zhoulisky 9 months ago
parent
commit
68ea7c620c

+ 48 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/CostItemVO.java

@@ -0,0 +1,48 @@
+package org.sky.scientific.pojo.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.sky.core.tool.utils.DateUtil;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class CostItemVO {
+	@Schema(description = "凭证日期")
+	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
+	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
+	private Date recordDate;
+
+	@Schema(description = "凭证字号")
+	private String voucherNumber;
+
+	@Schema(description = "摘要")
+	private String digest;
+
+	@Schema(description = "企业科目id")
+	private Long eSubjectId;
+
+	@Schema(description = "四级科目是否为高新研发费用科目,1:是,0,否")
+	private int rdSubjectEnable;
+
+	@Schema(description = "四级科目是否为加计扣除研发费用科目,1:是,0,否")
+	private int adSubjectEnable;
+
+	@Schema(description = "四级科目代码")
+	private String l4Code;
+
+	@Schema(description = "三级科目代码")
+	private String l3Code;
+
+	@Schema(description = "二级科目代码")
+	private String l2Code;
+
+	@Schema(description = "金额")
+	private BigDecimal amount;
+
+	@Schema(description = "账簿名称")
+	private String cashbook;
+}

+ 3 - 39
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/DeductionCostItemVO.java

@@ -1,48 +1,12 @@
 package org.sky.scientific.pojo.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
-import org.sky.core.tool.utils.DateUtil;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.util.Date;
+import lombok.EqualsAndHashCode;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
-public class DeductionCostItemVO {
-
-	@Schema(description = "凭证日期")
-	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
-	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
-	private Date recordDate;
-
-	@Schema(description = "凭证字号")
-	private String voucherNumber;
-
-	@Schema(description = "摘要")
-	private String digest;
-
-	@Schema(description = "企业科目id")
-	private Long eSubjectId;
-
-	@Schema(description = "四级科目是否为加计扣除研发费用科目,1:是,0,否")
-	private int adSubjectEnable;
-
-	@Schema(description = "四级科目代码")
-	private String l4Code;
-
-	@Schema(description = "三级科目代码")
-	private String l3Code;
-
-	@Schema(description = "二级科目代码")
-	private String l2Code;
-
-	@Schema(description = "金额")
-	private BigDecimal amount;
-
-	@Schema(description = "账簿名称")
-	private String cashbook;
+public class DeductionCostItemVO extends CostItemVO{
 
 	@Schema(description = "1、人员人工费用")
 	private Double ryrgfy;

+ 104 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/DeductionCostSummary.java

@@ -0,0 +1,104 @@
+package org.sky.scientific.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+@Data
+@Schema(description = "研发费用辅助账汇总表")
+public class DeductionCostSummary {
+
+	@Schema(description = "项目id")
+	private Long xmId;
+
+	@Schema(description = "项目编号")
+	private String xmbh;
+
+	@Schema(description = "项目名称")
+	private String xmmc;
+
+	@Schema(description = "1、人员人工费用")
+	private double ryrgTotal;
+	@Schema(description = "1、人员人工费用-费用化")
+	private double ryrgTotal_fyh;
+	@Schema(description = "1、人员人工费用-资本化")
+	private double ryrgTotal_zbh;
+
+	@Schema(description = "2、直接投入费用")
+	private double zjtrTotal;
+	@Schema(description = "2、直接投入费用-费用化")
+	private double zjtrTotal_fyh;
+	@Schema(description = "2、直接投入费用-资本化")
+	private double zjtrTotal_zbh;
+
+	@Schema(description = "3、折旧费用")
+	private double zjfyTotal;
+	@Schema(description = "3、折旧费用-费用化")
+	private double zjfyTotal_fyh;
+	@Schema(description = "3、折旧费用-资本化")
+	private double zjfyTotal_zbh;
+
+
+	@Schema(description = "4、无形资产摊销")
+	private double wxzctxTotal;
+	@Schema(description = "4、无形资产摊销-费用化")
+	private double wxzctxTotal_fyh;
+	@Schema(description = "4、无形资产摊销-资本化")
+	private double wxzctxTotal_zbh;
+
+	@Schema(description = "5、新产品设计费等")
+	private double xcpsjfd;
+	@Schema(description = "5、新产品设计费等-费用化")
+	private double xcpsjfd_fyh;
+	@Schema(description = "5、新产品设计费等-资本化")
+	private double xcpsjfd_zbh;
+
+	@Schema(description = "6、前五项小计")
+	private double total;
+	@Schema(description = "6、前五项小计-费用化")
+	private double total_fyh;
+	@Schema(description = "6、前五项小计-资本化")
+	private double total_zbh;
+
+	@Schema(description = "7.1、其他相关费用合计")
+	private double qtxgfyTotal;
+	@Schema(description = "7.1、其他相关费用合计-费用化")
+	private double qtxgfyTotal_fyh;
+	@Schema(description = "7.1、其他相关费用合计-资本化")
+	private double qtxgfyTotal_zbh;
+
+	@Schema(description = "7.2、经限额调整后的其他相关费用")
+	private double qtxgfyAdjustTotal;
+	@Schema(description = "7.2、经限额调整后的其他相关费用-费用化")
+	private double qtxgfyAdjustTotal_fyh;
+	@Schema(description = "7.2、经限额调整后的其他相关费用-资本化")
+	private double qtxgfyAdjustTotal_zbh;
+
+	@Schema(description = "8.1、委托境内机构或个人进行研发活动所发生的费用")
+	private double wtjnfy;
+	@Schema(description = "8.1、委托境内机构或个人进行研发活动所发生的费用-费用化")
+	private double wtjnfy_fyh;
+	@Schema(description = "8.1、委托境内机构或个人进行研发活动所发生的费用-资本化")
+	private double wtjnfy_zbh;
+
+	@Schema(description = "8.2、允许加计扣除的委托境内机构或个人进行研发活动所发生的费用")
+	private double wtjnfyRate;
+	@Schema(description = "8.2、允许加计扣除的委托境内机构或个人进行研发活动所发生的费用-费用化")
+	private double wtjnfyRate_fyh;
+	@Schema(description = "8.2、允许加计扣除的委托境内机构或个人进行研发活动所发生的费用-资本化")
+	private double wtjnfyRate_zbh;
+
+	@Schema(description = "8.3、委托境外机构进行研发活动所发生的费用")
+	private double wtjwfy;
+	@Schema(description = "8.3、委托境外机构进行研发活动所发生的费用-费用化")
+	private double wtjwfy_fyh;
+	@Schema(description = "8.3、委托境外机构进行研发活动所发生的费用-资本化")
+	private double wtjwfy_zbh;
+
+	@Schema(description = "8.4、经限额调整后的委托境外机构进行研发活动所发生的费用")
+	private double wtjwfyRate;
+	@Schema(description = "8.4、经限额调整后的委托境外机构进行研发活动所发生的费用-费用化")
+	private double wtjwfyRate_fyh;
+	@Schema(description = "8.4、经限额调整后的委托境外机构进行研发活动所发生的费用-资本化")
+	private double wtjwfyRate_zbh;
+}

+ 3 - 33
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/FinanceCostItemVO.java

@@ -1,42 +1,12 @@
 package org.sky.scientific.pojo.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
-import org.sky.core.tool.utils.DateUtil;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.util.Date;
+import lombok.EqualsAndHashCode;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
-public class FinanceCostItemVO{
-
-	@Schema(description = "凭证日期")
-	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
-	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
-	private Date recordDate;
-
-	@Schema(description = "凭证字号")
-	private String voucherNumber;
-
-	@Schema(description = "摘要")
-	private String digest;
-
-	@Schema(description = "企业科目id")
-	private Long eSubjectId;
-
-	@Schema(description = "系统三级科目编码,用于归集费用")
-	private String subjectCode;
-
-	@Schema(description = "是否为高新研发费用科目,1:是,0,否")
-	private int rdSubjectEnable;
-
-	@Schema(description = "金额")
-	private BigDecimal amount;
-
-	@Schema(description = "账簿名称")
-	private String cashbook;
+public class FinanceCostItemVO extends CostItemVO{
 
 	@Schema(description = "1、人员人工")
 	private Double ryrg;

+ 0 - 14
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/FinanceCostSummary.java

@@ -3,8 +3,6 @@ package org.sky.scientific.pojo.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
-import java.math.BigDecimal;
-
 
 @Data
 @Schema(description = "研发费用辅助账汇总表")
@@ -19,18 +17,6 @@ public class FinanceCostSummary {
 	@Schema(description = "项目名称")
 	private String xmmc;
 
-	@Schema(description = "企业科目id")
-	private Long eSubjectId;
-
-	@Schema(description = "系统三级科目编码,用于归集费用")
-	private String subjectCode;
-
-	@Schema(description = "金额")
-	private BigDecimal amount;
-
-	@Schema(description = "账簿名称")
-	private String cashbook;
-
 	@Schema(description = "1、人员人工")
 	private double ryrgTotal;
 

+ 26 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/HighTechCostDetailVO.java

@@ -0,0 +1,26 @@
+package org.sky.scientific.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class HighTechCostDetailVO {
+
+	@Schema(description = "项目id")
+	private Long xmId;
+
+	@Schema(description = "项目编号")
+	private String xmbh;
+
+	@Schema(description = "项目名称")
+	private String xmmc;
+
+	@Schema(description = "")
+	private List<HighTechCostItemVO> costList;
+}
+
+
+
+

+ 34 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/HighTechCostItemVO.java

@@ -0,0 +1,34 @@
+package org.sky.scientific.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class HighTechCostItemVO extends CostItemVO{
+
+	@Schema(description = "1、人员人工")
+	private Double ryrg;
+
+	@Schema(description = "2、直接投入")
+	private Double zjtr;
+
+	@Schema(description = "3、折旧费用与长期摊销费用")
+	private Double zjfyycqdtfy;
+
+	@Schema(description = "4、设计费")
+	private Double sjf;
+
+	@Schema(description = "5、无形资产摊销")
+	private Double wxzctx;
+
+	@Schema(description = "6、装备调试费用与试验费用")
+	private Double zbtsfyysyfy;
+
+	@Schema(description = "7、其他费用")
+	private Double qtfy;
+
+	@Schema(description = "8、委外研发")
+	private Double wwyf;
+}

+ 47 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/HighTechCostSummary.java

@@ -0,0 +1,47 @@
+package org.sky.scientific.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class HighTechCostSummary {
+
+	@Schema(description = "项目id")
+	private Long xmId;
+
+	@Schema(description = "项目编号")
+	private String xmbh;
+
+	@Schema(description = "项目名称")
+	private String xmmc;
+
+	@Schema(description = "1、人员人工")
+	private double ryrgTotal;
+
+	@Schema(description = "2、直接投入")
+	private double zjtrTotal;
+
+	@Schema(description = "3、折旧费用与长期摊销费用")
+	private double zjfyycqdtfyTotal;
+
+	@Schema(description = "4、设计费")
+	private double sjfTotal;
+
+	@Schema(description = "5、无形资产摊销")
+	private double wxzctxTotal;
+
+	@Schema(description = "6、装备调试费用与试验费用")
+	private double zbtsfyysyfyTotal;
+
+	@Schema(description = "7-1、其他费用")
+	private double qtfyTotal;
+
+	@Schema(description = "7-2、其他费用限额,1-6合计相加/0.8*0.2")
+	private double qtfyLimit;
+
+	@Schema(description = "7-3、调整后其他费用,7-1和7-2,谁小取谁")
+	private double qtfyAdjust;
+
+	@Schema(description = "8、委外研发")
+	private double wwyfTotal;
+}

+ 10 - 16
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmCostDetailsController.java

@@ -17,9 +17,7 @@ import org.sky.core.tool.api.R;
 import org.sky.core.tool.utils.Func;
 import org.sky.scientific.pojo.dto.XmCostDetailsDTO;
 import org.sky.scientific.pojo.entity.XmCostDetailsEntity;
-import org.sky.scientific.pojo.vo.DeductionCostDetailVO;
-import org.sky.scientific.pojo.vo.FinanceCostDetailVO;
-import org.sky.scientific.pojo.vo.FinanceCostSummary;
+import org.sky.scientific.pojo.vo.*;
 import org.sky.scientific.service.IXmCostDetailsService;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -94,32 +92,28 @@ public class XmCostDetailsController extends KdController {
 	@GetMapping("/high-tech-list")
 	@ApiOperationSupport(order = 29)
 	@Operation(summary = "高新口径-高新研发费用辅助明细账")
-	public R<List<FinanceCostDetailVO>> highTechCostDetail(XmCostDetailsDTO dto) {
+	public R<List<HighTechCostDetailVO>> highTechCostDetail(XmCostDetailsDTO dto) {
 		return R.data(service.highTechCostDetail(dto));
 	}
 
 	@GetMapping("/high-tech-summary")
 	@ApiOperationSupport(order = 30)
 	@Operation(summary = "高新口径-研发费用辅助账汇总表")
-	public R<IPage<FinanceCostSummary>> highTechCostSummary(Query query, XmCostDetailsDTO dto) {
+	public R<IPage<HighTechCostSummary>> highTechCostSummary(Query query, XmCostDetailsDTO dto) {
 		return R.data(service.highTechCostSummary(Condition.getPage(query), dto));
 	}
 
 	@GetMapping("/deduction-list")
-	@ApiOperationSupport(order = 29)
+	@ApiOperationSupport(order = 31)
 	@Operation(summary = "加计扣除-研发支出辅助明细账")
 	public R<List<DeductionCostDetailVO>> deductionCostDetail(XmCostDetailsDTO dto) {
 		return R.data(service.deductionCostDetail(dto));
 	}
 
-//	@GetMapping("/deduction-summary")
-//	@ApiOperationSupport(order = 30)
-//	@Operation(summary = "加计扣除-研发支出辅助汇总表")
-//	public R<IPage<FinanceCostSummary>>deductionCostSummary(Query query, XmCostDetailsDTO dto) {
-//		return R.data(service.highTechCostSummary(Condition.getPage(query), dto));
-//	}
-
-
-
-
+	@GetMapping("/deduction-summary")
+	@ApiOperationSupport(order = 32)
+	@Operation(summary = "加计扣除-研发支出辅助汇总表")
+	public R<IPage<DeductionCostSummary>>deductionCostSummary(Query query, XmCostDetailsDTO dto) {
+		return R.data(service.deductionCostSummary(Condition.getPage(query), dto));
+	}
 }

+ 33 - 7
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmCostDetailsMapper.java

@@ -1,14 +1,16 @@
 package org.sky.scientific.mapper;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.sky.core.tenant.annotation.TenantIgnore;
 import org.sky.scientific.pojo.dto.XmCostDetailsDTO;
 import org.sky.scientific.pojo.entity.XmCostDetailsEntity;
+import org.sky.scientific.pojo.vo.CostItemVO;
 import org.sky.scientific.pojo.vo.DeductionCostDetailVO;
 import org.sky.scientific.pojo.vo.FinanceCostDetailVO;
-import org.sky.scientific.pojo.vo.FinanceCostItemVO;
+import org.sky.scientific.pojo.vo.HighTechCostDetailVO;
 
 import java.util.List;
 
@@ -49,22 +51,46 @@ public interface XmCostDetailsMapper extends BaseMapper<XmCostDetailsEntity> {
     List<FinanceCostDetailVO> financeCostDetail(XmCostDetailsDTO dto);
 
 	/**
-	 * 会计口径-研发费用辅助账汇总表
-	 * @param page
+	 * 高新口径-研发费用辅助明细账
 	 * @param dto
 	 * @return
 	 */
 	@TenantIgnore
-	List<FinanceCostDetailVO> financeCostSummary(IPage<FinanceCostDetailVO> page, @Param("ew") XmCostDetailsDTO dto);
+	List<HighTechCostDetailVO> highTechCostDetail(XmCostDetailsDTO dto);
 
+	/**
+	 * 加计扣除-研发支出辅助明细账
+	 * @param dto
+	 * @return
+	 */
 	@TenantIgnore
-	List<FinanceCostItemVO> selectCostItemByCondition(@Param("yearAndMonth") String yearAndMonth, @Param("xmId") Long xmId);
+	List<DeductionCostDetailVO> deductionCostDetail(XmCostDetailsDTO dto);
+
+//	/**
+//	 * 高新口径-研发费用辅助账汇总表
+//	 * @param dto
+//	 * @return
+//	 */
+//	@TenantIgnore
+//	List<HighTechCostSummary> highTechCostSummary(IPage<HighTechCostSummary> page, @Param("ew") XmCostDetailsDTO dto);
+
 
 	/**
-	 * 加计扣除-研发支出辅助明细账
+	 * 会计/高新/加计扣除口径-研发费用辅助账汇总表
+	 * @param page
 	 * @param dto
 	 * @return
 	 */
 	@TenantIgnore
-    List<DeductionCostDetailVO> deductionCostDetail(XmCostDetailsDTO dto);
+	List<JSONObject> costSummary(IPage<JSONObject> page, @Param("ew") XmCostDetailsDTO dto);
+
+	@TenantIgnore
+	List<CostItemVO> selectCostItemByCondition(@Param("yearAndMonth") String yearAndMonth, @Param("xmId") Long xmId);
+
+//	/**
+//	 * 加计扣除-研发支出辅助汇总表
+//	 * @param dto
+//	 * @return
+//	 */
+//	List<DeductionCostSummary> deductionCostSummary(XmCostDetailsDTO dto);
 }

+ 115 - 63
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmCostDetailsMapper.xml

@@ -85,85 +85,83 @@
             <result column="voucher_number" property="voucherNumber"/>
             <result column="digest" property="digest"/>
             <result column="e_subject_id" property="eSubjectId"/>
-            <result column="subject_code" property="subjectCode"/>
-            <result column="rd_subject_enable" property="rdSubjectEnable"/>
+            <result column="ad_subject_enable" property="adSubjectEnable"/>
+            <result column="L4Code" property="l4Code"/>
+            <result column="L3Code" property="l3Code"/>
+            <result column="L2Code" property="l2Code"/>
             <result column="amount" property="amount"/>
             <result column="cashbook" property="cashbook"/>
         </collection>
     </resultMap>
     <select id="financeCostDetail" resultMap="FinanceCostDetailVO">
         SELECT
-            xm.id as XMID, xm.XMBH,xm.XMMC,kxcd.record_date,kxcd.voucher_number,kxcd.digest,kxcd.amount,kxcd.cashbook, kxcd.e_subject_id,s.subject_code, s.rd_subject_enable
+        xm.id as XMID, xm.XMBH,xm.XMMC,kxcd.record_date,kxcd.voucher_number,kxcd.digest,kxcd.amount,kxcd.cashbook,
+        kxcd.e_subject_id,s.L3Code
         FROM kd_xm_cost_details kxcd
         LEFT JOIN
         (
-            SELECT se.id, se.subject_id ,sub.parent_id, sub1.`code` as subject_code, sub.rd_subject_enable
-            FROM kd_subject_enterprise se
-            LEFT JOIN kd_subject sub on sub.id = se.subject_id
-            LEFT JOIN kd_subject sub1 on sub1.id = sub.parent_id
+        SELECT se.id, sub3.code as L3Code
+        FROM kd_subject_enterprise se
+        LEFT JOIN kd_subject sub4 on sub4.id = se.subject_id
+        LEFT JOIN kd_subject sub3 on sub3.id = sub4.parent_id
         )s ON s.id = kxcd.e_subject_id
         LEFT JOIN
         (
-            SELECT
-                xm.id, xm.XMBH,
-                COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMMC' AND DATE_FORMAT(bgrz.BGSXSJ,'%Y%m') <![CDATA[<=]]> #{yearAndMonth} ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMMC) AS XMMC
-            FROM kd_xm xm
-            WHERE xm.is_deleted = 0
+        SELECT
+        xm.id, xm.XMBH,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMMC' AND
+        DATE_FORMAT(bgrz.BGSXSJ,'%Y%m') <![CDATA[<=]]> #{yearAndMonth} ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMMC) AS XMMC
+        FROM kd_xm xm
+        WHERE xm.is_deleted = 0
         ) xm on xm.id = kxcd.xm_id
-        WHERE kxcd.tenant_id = #{tenantId} and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and #{yearAndMonth}
+        WHERE kxcd.tenant_id = #{tenantId} and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and
+        #{yearAndMonth}
         <if test="xmmc!=null and xmmc!=''">and xm.XMMC like concat('%',#{xmmc},'%')</if>
         order by kxcd.record_date asc
     </select>
 
-    <resultMap id="FinanceCostSummary" type="org.sky.scientific.pojo.vo.FinanceCostSummary">
+    <resultMap id="HighTechCostDetailVO" type="org.sky.scientific.pojo.vo.HighTechCostDetailVO">
         <result column="xm_id" property="xmId"/>
         <result column="XMBH" property="xmbh"/>
         <result column="XMMC" property="xmmc"/>
 
-        <result column="e_subject_id" property="eSubjectId"/>
-        <result column="subject_code" property="subjectCode"/>
-        <result column="amount" property="amount"/>
-        <result column="cashbook" property="cashbook"/>
-
-        <result column="e_subject_id" property="eSubjectId"/>
-        <result column="subject_code" property="subjectCode"/>
-        <result column="amount" property="amount"/>
-        <result column="cashbook" property="cashbook"/>
+        <collection property="costList" ofType="org.sky.scientific.pojo.vo.HighTechCostItemVO">
+            <result column="record_date" property="recordDate"/>
+            <result column="voucher_number" property="voucherNumber"/>
+            <result column="digest" property="digest"/>
+            <result column="e_subject_id" property="eSubjectId"/>
+            <result column="rd_subject_enable" property="rdSubjectEnable"/>
+            <result column="L4Code" property="l4Code"/>
+            <result column="L3Code" property="l3Code"/>
+            <result column="L2Code" property="l2Code"/>
+            <result column="amount" property="amount"/>
+            <result column="cashbook" property="cashbook"/>
+        </collection>
     </resultMap>
-    <select id="financeCostSummary" resultMap="FinanceCostDetailVO">
+    <select id="highTechCostDetail" resultMap="HighTechCostDetailVO">
         SELECT
-            p.xm_id,xm.XMBH,xm.XMMC
-        FROM
+            xm.id as XMID, xm.XMBH,xm.XMMC,kxcd.record_date,kxcd.voucher_number,kxcd.digest,kxcd.amount,kxcd.cashbook,
+            kxcd.e_subject_id, s.L4Code ,s.rd_subject_enable, s.L3Code
+        FROM kd_xm_cost_details kxcd
+        LEFT JOIN
         (
-            select distinct xm_id
-            from kd_xm_cost_details
-            where tenant_id = #{ew.tenantId} and year_and_month between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}
-            order by xm_id
-        )as p
+            SELECT se.id, sub4.code as L4Code, sub4.rd_subject_enable,sub3.code as L3Code
+            FROM kd_subject_enterprise se
+            LEFT JOIN kd_subject sub4 on sub4.id = se.subject_id
+            LEFT JOIN kd_subject sub3 on sub3.id = sub4.parent_id
+        )s ON s.id = kxcd.e_subject_id
         LEFT JOIN
         (
             SELECT
                 xm.id, xm.XMBH,
-                COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMMC' AND DATE_FORMAT(bgrz.BGSXSJ,'%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMMC) AS XMMC
+                COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMMC' AND DATE_FORMAT(bgrz.BGSXSJ,'%Y%m') <![CDATA[<=]]> #{yearAndMonth} ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMMC) AS XMMC
             FROM kd_xm xm
             WHERE xm.is_deleted = 0
-        ) xm  on xm.id = p.xm_id
-        <where>
-        <if test="ew.xmmc!=null and ew.xmmc!=''">and xm.XMMC like concat('%',#{ew.xmmc},'%')</if>
-        </where>
-    </select>
-
-    <select id="selectCostItemByCondition" resultType="org.sky.scientific.pojo.vo.FinanceCostItemVO">
-        select kxcd.amount,kxcd.e_subject_id as eSubjectId,s.subject_code as subjectCode, s.rd_subject_enable as rdSubjectEnable
-        from kd_xm_cost_details kxcd
-        LEFT JOIN
-        (
-            SELECT se.id, se.subject_id ,sub.parent_id, sub1.`code` as subject_code, sub.rd_subject_enable
-            FROM kd_subject_enterprise se
-            LEFT JOIN kd_subject sub on sub.id = se.subject_id
-            LEFT JOIN kd_subject sub1 on sub1.id = sub.parent_id
-        )s ON s.id = kxcd.e_subject_id
-        where kxcd.xm_id = #{xmId} and year_and_month between concat(left(#{yearAndMonth},4),'01') and #{yearAndMonth}
+        ) xm on xm.id = kxcd.xm_id
+        WHERE kxcd.tenant_id = #{tenantId} and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and
+        #{yearAndMonth}
+        <if test="xmmc!=null and xmmc!=''">and xm.XMMC like concat('%',#{xmmc},'%')</if>
+        order by kxcd.record_date asc
     </select>
 
     <resultMap id="DeductionCostDetailVO" type="org.sky.scientific.pojo.vo.DeductionCostDetailVO">
@@ -180,37 +178,91 @@
             <result column="L4Code" property="l4Code"/>
             <result column="L3Code" property="l3Code"/>
             <result column="L2Code" property="l2Code"/>
-
             <result column="amount" property="amount"/>
             <result column="cashbook" property="cashbook"/>
         </collection>
     </resultMap>
     <select id="deductionCostDetail" resultMap="DeductionCostDetailVO">
         SELECT
-            xm.id as XMID, xm.XMBH,xm.XMMC,kxcd.record_date,kxcd.voucher_number,kxcd.digest,kxcd.amount,kxcd.cashbook,
-            kxcd.e_subject_id, s.ad_subject_enable,s.L4Code, s.L3Code, s.L2Code
+        xm.id as XMID, xm.XMBH,xm.XMMC,kxcd.record_date,kxcd.voucher_number,kxcd.digest,kxcd.amount,kxcd.cashbook,
+        kxcd.e_subject_id, s.ad_subject_enable,s.L4Code, s.L3Code, s.L2Code
         FROM kd_xm_cost_details kxcd
         LEFT JOIN
         (
-            SELECT se.id,sub4.code as L4Code, sub4.ad_subject_enable,sub3.code as L3Code, sub2.code as L2Code
-            FROM kd_subject_enterprise se
-            LEFT JOIN kd_subject sub4 on sub4.id = se.subject_id
-            LEFT JOIN kd_subject sub3 on sub3.id = sub4.parent_id
-            LEFT JOIN kd_subject sub2 on sub2.id = sub3.parent_id
+        SELECT se.id,sub4.code as L4Code, sub4.ad_subject_enable,sub3.code as L3Code, sub2.code as L2Code
+        FROM kd_subject_enterprise se
+        LEFT JOIN kd_subject sub4 on sub4.id = se.subject_id
+        LEFT JOIN kd_subject sub3 on sub3.id = sub4.parent_id
+        LEFT JOIN kd_subject sub2 on sub2.id = sub3.parent_id
         )s ON s.id = kxcd.e_subject_id
         LEFT JOIN
         (
-            SELECT
-                xm.id, xm.XMBH,
-                COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMMC' AND DATE_FORMAT(bgrz.BGSXSJ,'%Y%m') <![CDATA[<=]]> #{yearAndMonth} ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMMC) AS XMMC
-            FROM kd_xm xm
-            WHERE xm.is_deleted = 0
+        SELECT
+        xm.id, xm.XMBH,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMMC' AND
+        DATE_FORMAT(bgrz.BGSXSJ,'%Y%m') <![CDATA[<=]]> #{yearAndMonth} ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMMC) AS XMMC
+        FROM kd_xm xm
+        WHERE xm.is_deleted = 0
         ) xm on xm.id = kxcd.xm_id
-        WHERE kxcd.tenant_id = #{tenantId} and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and #{yearAndMonth}
+        WHERE kxcd.tenant_id = #{tenantId} and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and
+        #{yearAndMonth}
         <if test="type==1">and s.L2Code = '530101'</if>
         <if test="type==2">and s.L2Code = '530102'</if>
         <if test="xmmc!=null and xmmc!=''">and xm.XMMC like concat('%',#{xmmc},'%')</if>
         order by kxcd.record_date asc
     </select>
 
+    <select id="costSummary" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        p.xm_id as xmId,xm.XMBH,xm.XMMC
+        FROM
+        (
+            select distinct xm_id
+            from kd_xm_cost_details
+            where tenant_id = #{ew.tenantId} and year_and_month between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}
+            order by xm_id
+        )as p
+        LEFT JOIN
+        (
+            SELECT
+                xm.id, xm.XMBH,
+                COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMMC' AND DATE_FORMAT(bgrz.BGSXSJ,'%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMMC) AS XMMC
+            FROM kd_xm xm
+            WHERE xm.is_deleted = 0
+        ) xm on xm.id = p.xm_id
+        <where>
+            <if test="ew.xmmc!=null and ew.xmmc!=''">and xm.XMMC like concat('%',#{ew.xmmc},'%')</if>
+        </where>
+    </select>
+
+    <resultMap id="CostItemVO" type="org.sky.scientific.pojo.vo.CostItemVO">
+        <result column="record_date" property="recordDate"/>
+        <result column="voucher_number" property="voucherNumber"/>
+        <result column="amount" property="amount"/>
+        <result column="cashbook" property="cashbook"/>
+        <result column="digest" property="digest"/>
+        <result column="e_subject_id" property="eSubjectId"/>
+        <result column="rd_subject_enable" property="rdSubjectEnable"/>
+        <result column="ad_subject_enable" property="adSubjectEnable"/>
+        <result column="l4Code" property="l4Code"/>
+        <result column="l3Code" property="l3Code"/>
+        <result column="l2Code" property="l2Code"/>
+
+    </resultMap>
+    <select id="selectCostItemByCondition" resultMap="CostItemVO">
+        select kxcd.record_date, kxcd.voucher_number, kxcd.digest, kxcd.amount,kxcd.cashbook,
+               kxcd.e_subject_id, s.L4Code,s.ad_subject_enable,s.rd_subject_enable,s.L3Code,s.L2Code
+        from kd_xm_cost_details kxcd
+        LEFT JOIN
+        (
+            SELECT
+                se.id, sub4.code as L4Code, sub4.ad_subject_enable, sub4.rd_subject_enable, sub3.code as L3Code, sub2.code as L2Code
+            FROM kd_subject_enterprise se
+            LEFT JOIN kd_subject sub4 on sub4.id = se.subject_id
+            LEFT JOIN kd_subject sub3 on sub3.id = sub4.parent_id
+            LEFT JOIN kd_subject sub2 on sub2.id = sub3.parent_id
+        )s ON s.id = kxcd.e_subject_id
+        where kxcd.xm_id = #{xmId} and year_and_month between concat(left(#{yearAndMonth}, 4), '01') and #{yearAndMonth}
+    </select>
+
 </mapper>

+ 12 - 6
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/IXmCostDetailsService.java

@@ -6,9 +6,7 @@ import jakarta.servlet.http.HttpServletResponse;
 import org.sky.core.mp.base.BaseService;
 import org.sky.scientific.pojo.dto.XmCostDetailsDTO;
 import org.sky.scientific.pojo.entity.XmCostDetailsEntity;
-import org.sky.scientific.pojo.vo.DeductionCostDetailVO;
-import org.sky.scientific.pojo.vo.FinanceCostDetailVO;
-import org.sky.scientific.pojo.vo.FinanceCostSummary;
+import org.sky.scientific.pojo.vo.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -72,14 +70,14 @@ public interface IXmCostDetailsService extends BaseService<XmCostDetailsEntity>
 	 * @param dto
 	 * @return
 	 */
-	IPage<FinanceCostSummary> financeCostSummary(IPage page, XmCostDetailsDTO dto);
+	IPage<FinanceCostSummary> financeCostSummary(IPage<FinanceCostSummary> page, XmCostDetailsDTO dto);
 
 	/**
 	 * 高新口径-研发费用辅助明细账
 	 * @param dto
 	 * @return
 	 */
-	List<FinanceCostDetailVO> highTechCostDetail(XmCostDetailsDTO dto);
+	List<HighTechCostDetailVO> highTechCostDetail(XmCostDetailsDTO dto);
 
 	/**
 	 * 高新口径-研发费用辅助账汇总表
@@ -87,7 +85,7 @@ public interface IXmCostDetailsService extends BaseService<XmCostDetailsEntity>
 	 * @param dto
 	 * @return
 	 */
-	IPage<FinanceCostSummary> highTechCostSummary(IPage page, XmCostDetailsDTO dto);
+	IPage<HighTechCostSummary> highTechCostSummary(IPage<HighTechCostSummary> page, XmCostDetailsDTO dto);
 
 	/**
 	 * 加计扣除-研发支出辅助明细账
@@ -95,4 +93,12 @@ public interface IXmCostDetailsService extends BaseService<XmCostDetailsEntity>
 	 * @return
 	 */
 	List<DeductionCostDetailVO> deductionCostDetail(XmCostDetailsDTO dto);
+
+	/**
+	 * 加计扣除-研发支出辅助汇总表
+	 * @param page
+	 * @param dto
+	 * @return
+	 */
+	IPage<DeductionCostSummary> deductionCostSummary(IPage<DeductionCostSummary> page, XmCostDetailsDTO dto);
 }

+ 222 - 104
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java

@@ -1,6 +1,8 @@
 
 package org.sky.scientific.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import jakarta.servlet.http.HttpServletResponse;
@@ -8,6 +10,8 @@ import lombok.AllArgsConstructor;
 import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.mp.base.BaseServiceImpl;
+import org.sky.core.mp.support.Condition;
+import org.sky.core.mp.support.Query;
 import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.utils.*;
 import org.sky.scientific.excel.XmCostDetailsExcel;
@@ -152,31 +156,31 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		for (FinanceCostDetailVO tmp : list) {
 			List<FinanceCostItemVO> vos = tmp.getCostList();
 			for (FinanceCostItemVO vo : vos) {
-				if(Arrays.asList("53010101","53010201").contains(vo.getSubjectCode())){
+				if (Arrays.asList("53010101", "53010201").contains(vo.getL3Code())) {
 					//人员人工费用
 					vo.setRyrg(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010102","53010202").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010102", "53010202").contains(vo.getL3Code())) {
 					//直接投入费用
 					vo.setZjtr(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010103","53010203").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010103", "53010203").contains(vo.getL3Code())) {
 					//折旧费用与长期待摊费用
 					vo.setZjfyycqdtfy(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010104","53010204").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010104", "53010204").contains(vo.getL3Code())) {
 					//无形资产摊销费用
 					vo.setWxzctx(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010105","53010205").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010105", "53010205").contains(vo.getL3Code())) {
 					//设计费用
 					vo.setSjf(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010106","53010206").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010106", "53010206").contains(vo.getL3Code())) {
 					//装备调试费用与试验费用
 					vo.setZbtsfyysyfy(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010107","53010207").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010107", "53010207").contains(vo.getL3Code())) {
 					//委托外部研究开发费用
 					vo.setWwyf(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010108","53010208").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010108", "53010208").contains(vo.getL3Code())) {
 					//其他费用
 					vo.setQtfy(vo.getAmount().doubleValue());
-				}else {
+				} else {
 					throw new ServiceException("费用归集出错啦");
 				}
 			}
@@ -185,93 +189,94 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 	}
 
 	@Override
-	public IPage<FinanceCostSummary> financeCostSummary(IPage page, XmCostDetailsDTO dto) {
+	public IPage<FinanceCostSummary> financeCostSummary(IPage<FinanceCostSummary> page, XmCostDetailsDTO dto) {
 		if (Func.isBlank(dto.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 		dto.setTenantId(SecureUtil.getTenantId());
-		List<FinanceCostDetailVO> vos = baseMapper.financeCostSummary(page, dto);
 
-		List<FinanceCostSummary> summaryList = new ArrayList<>();
-		for (FinanceCostDetailVO vo : vos) {
-			FinanceCostSummary summary = new FinanceCostSummary();
-			summary.setXmId(vo.getXmId());
-			summary.setXmbh(vo.getXmbh());
-			summary.setXmmc(vo.getXmmc());
 
+		Query query = new Query();
+		query.setCurrent((int) page.getCurrent());
+		query.setSize((int) page.getSize());
+		IPage<JSONObject> p1 = Condition.getPage(query);
+		List<JSONObject> tmpList = baseMapper.costSummary(p1, dto);
+		page.setTotal(p1.getTotal()).setCurrent(p1.getCurrent()).setSize(p1.getSize());
 
-			List<FinanceCostItemVO> itemVOS = baseMapper.selectCostItemByCondition(dto.getYearAndMonth(), vo.getXmId());
-			for (FinanceCostItemVO item : itemVOS) {
-				if(Arrays.asList("53010101","53010201").contains(item.getSubjectCode())){
+		List<FinanceCostSummary> summaryList = JSON.parseArray(JSON.toJSONString(tmpList), FinanceCostSummary.class);
+		for (FinanceCostSummary summary : summaryList) {
+
+			List<CostItemVO> itemVOS = baseMapper.selectCostItemByCondition(dto.getYearAndMonth(), summary.getXmId());
+			for (CostItemVO item : itemVOS) {
+				if (Arrays.asList("53010101", "53010201").contains(item.getL3Code())) {
 					//人员人工费用
 					summary.setRyrgTotal(summary.getRyrgTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010102","53010202").contains(item.getSubjectCode())){
+				} else if (Arrays.asList("53010102", "53010202").contains(item.getL3Code())) {
 					//直接投入费用
- 					summary.setZjtrTotal(summary.getZjtrTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010103","53010203").contains(item.getSubjectCode())){
+					summary.setZjtrTotal(summary.getZjtrTotal() + item.getAmount().doubleValue());
+				} else if (Arrays.asList("53010103", "53010203").contains(item.getL3Code())) {
 					//折旧费用与长期待摊费用
- 					summary.setZjfyycqdtfyTotal(summary.getZjfyycqdtfyTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010104","53010204").contains(item.getSubjectCode())){
+					summary.setZjfyycqdtfyTotal(summary.getZjfyycqdtfyTotal() + item.getAmount().doubleValue());
+				} else if (Arrays.asList("53010104", "53010204").contains(item.getL3Code())) {
 					//无形资产摊销费用
- 					summary.setWxzctxTotal(summary.getWxzctxTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010105","53010205").contains(item.getSubjectCode())){
+					summary.setWxzctxTotal(summary.getWxzctxTotal() + item.getAmount().doubleValue());
+				} else if (Arrays.asList("53010105", "53010205").contains(item.getL3Code())) {
 					//设计费用
- 					summary.setSjfTotal(summary.getSjfTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010106","53010206").contains(item.getSubjectCode())){
+					summary.setSjfTotal(summary.getSjfTotal() + item.getAmount().doubleValue());
+				} else if (Arrays.asList("53010106", "53010206").contains(item.getL3Code())) {
 					//装备调试费用与试验费用
- 					summary.setZbtsfyysyfyTotal(summary.getZbtsfyysyfyTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010107","53010207").contains(item.getSubjectCode())){
+					summary.setZbtsfyysyfyTotal(summary.getZbtsfyysyfyTotal() + item.getAmount().doubleValue());
+				} else if (Arrays.asList("53010107", "53010207").contains(item.getL3Code())) {
 					//委托外部研究开发费用
- 					summary.setWwyfTotal(summary.getWwyfTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010108","53010208").contains(item.getSubjectCode())){
+					summary.setWwyfTotal(summary.getWwyfTotal() + item.getAmount().doubleValue());
+				} else if (Arrays.asList("53010108", "53010208").contains(item.getL3Code())) {
 					//其他费用
- 					summary.setQtfyTotal(summary.getQtfyTotal() + item.getAmount().doubleValue());
+					summary.setQtfyTotal(summary.getQtfyTotal() + item.getAmount().doubleValue());
 				}
 			}
- 			summaryList.add(summary);
 		}
 		return page.setRecords(summaryList);
 	}
 
 	@Override
-	public List<FinanceCostDetailVO> highTechCostDetail(XmCostDetailsDTO dto) {
+	public List<HighTechCostDetailVO> highTechCostDetail(XmCostDetailsDTO dto) {
 		if (Func.isBlank(dto.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 		dto.setTenantId(SecureUtil.getTenantId());
-		List<FinanceCostDetailVO> list = baseMapper.financeCostDetail(dto);
-		for (FinanceCostDetailVO tmp : list) {
-			List<FinanceCostItemVO> vos = tmp.getCostList();
-			for (FinanceCostItemVO vo : vos) {
-				if(vo.getRdSubjectEnable() == 0){
+		List<HighTechCostDetailVO> list = baseMapper.highTechCostDetail(dto);
+		for (HighTechCostDetailVO tmp : list) {
+			List<HighTechCostItemVO> vos = tmp.getCostList();
+			for (HighTechCostItemVO vo : vos) {
+				if (vo.getRdSubjectEnable() == 0) {
 					//四级科目 不是高新研发费用科目,费用不归集
 					continue;
 				}
-				if(Arrays.asList("53010101","53010201").contains(vo.getSubjectCode())){
+				if (Arrays.asList("53010101", "53010201").contains(vo.getL3Code())) {
 					//人员人工费用
 					vo.setRyrg(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010102","53010202").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010102", "53010202").contains(vo.getL3Code())) {
 					//直接投入费用
 					vo.setZjtr(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010103","53010203").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010103", "53010203").contains(vo.getL3Code())) {
 					//折旧费用与长期待摊费用
 					vo.setZjfyycqdtfy(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010104","53010204").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010104", "53010204").contains(vo.getL3Code())) {
 					//无形资产摊销费用
 					vo.setWxzctx(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010105","53010205").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010105", "53010205").contains(vo.getL3Code())) {
 					//设计费用
 					vo.setSjf(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010106","53010206").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010106", "53010206").contains(vo.getL3Code())) {
 					//装备调试费用与试验费用
 					vo.setZbtsfyysyfy(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010107","53010207").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010107", "53010207").contains(vo.getL3Code())) {
 					//委托外部研究开发费用
 					vo.setWwyf(vo.getAmount().doubleValue());
-				}else if(Arrays.asList("53010108","53010208").contains(vo.getSubjectCode())){
+				} else if (Arrays.asList("53010108", "53010208").contains(vo.getL3Code())) {
 					//其他费用
 					vo.setQtfy(vo.getAmount().doubleValue());
-				}else {
+				} else {
 					throw new ServiceException("费用归集出错啦");
 				}
 			}
@@ -280,66 +285,76 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 	}
 
 	@Override
-	public IPage<FinanceCostSummary> highTechCostSummary(IPage page, XmCostDetailsDTO dto) {
+	public IPage<HighTechCostSummary> highTechCostSummary(IPage<HighTechCostSummary> page, XmCostDetailsDTO dto) {
 		if (Func.isBlank(dto.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 		dto.setTenantId(SecureUtil.getTenantId());
-		List<FinanceCostDetailVO> vos = baseMapper.financeCostSummary(page, dto);
 
-		List<FinanceCostSummary> summaryList = new ArrayList<>();
-		for (FinanceCostDetailVO vo : vos) {
-			FinanceCostSummary summary = new FinanceCostSummary();
-			summary.setXmbh(vo.getXmbh());
-			summary.setXmmc(vo.getXmmc());
+		Query query = new Query();
+		query.setCurrent((int) page.getCurrent());
+		query.setSize((int) page.getSize());
+		IPage<JSONObject> p1 = Condition.getPage(query);
 
-			List<FinanceCostItemVO> itemVOS = baseMapper.selectCostItemByCondition(dto.getYearAndMonth(), vo.getXmId());
+		List<JSONObject> tmpList = baseMapper.costSummary(p1, dto);
 
-			for (FinanceCostItemVO item : itemVOS) {
-				if(item.getRdSubjectEnable() == 0){
+		page.setTotal(p1.getTotal()).setCurrent(p1.getCurrent()).setSize(p1.getSize());
+
+		List<HighTechCostSummary> summaryList = JSON.parseArray(JSON.toJSONString(tmpList), HighTechCostSummary.class);
+		for (HighTechCostSummary summary : summaryList) {
+
+			List<CostItemVO> itemVOS = baseMapper.selectCostItemByCondition(dto.getYearAndMonth(), summary.getXmId());
+
+			for (CostItemVO item : itemVOS) {
+				if (item.getRdSubjectEnable() == 0) {
 					//四级科目不是高新研发费用科目,费用不归集
 					continue;
 				}
-				if(Arrays.asList("53010101","53010201").contains(item.getSubjectCode())){
-					//人员人工费用
+				if (Arrays.asList("53010101", "53010201").contains(item.getL3Code())) {
+					//1、人员人工费用
 					summary.setRyrgTotal(summary.getRyrgTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010102","53010202").contains(item.getSubjectCode())){
-					//直接投入费用
+				} else if (Arrays.asList("53010102", "53010202").contains(item.getL3Code())) {
+					//2、直接投入费用
 					summary.setZjtrTotal(summary.getZjtrTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010103","53010203").contains(item.getSubjectCode())){
-					//折旧费用与长期待摊费用
+				} else if (Arrays.asList("53010103", "53010203").contains(item.getL3Code())) {
+					//3、折旧费用与长期待摊费用
 					summary.setZjfyycqdtfyTotal(summary.getZjfyycqdtfyTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010104","53010204").contains(item.getSubjectCode())){
-					//无形资产摊销费用
+				} else if (Arrays.asList("53010104", "53010204").contains(item.getL3Code())) {
+					//4、无形资产摊销费用
 					summary.setWxzctxTotal(summary.getWxzctxTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010105","53010205").contains(item.getSubjectCode())){
-					//设计费用
+				} else if (Arrays.asList("53010105", "53010205").contains(item.getL3Code())) {
+					//5、设计费用
 					summary.setSjfTotal(summary.getSjfTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010106","53010206").contains(item.getSubjectCode())){
-					//装备调试费用与试验费用
+				} else if (Arrays.asList("53010106", "53010206").contains(item.getL3Code())) {
+					//6、装备调试费用与试验费用
 					summary.setZbtsfyysyfyTotal(summary.getZbtsfyysyfyTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010107","53010207").contains(item.getSubjectCode())){
+				} else if (Arrays.asList("53010107", "53010207").contains(item.getL3Code())) {
 					//委托外部研究开发费用
 					summary.setWwyfTotal(summary.getWwyfTotal() + item.getAmount().doubleValue());
-				}else if(Arrays.asList("53010108","53010208").contains(item.getSubjectCode())){
-					//其他费用
+				} else if (Arrays.asList("53010108", "53010208").contains(item.getL3Code())) {
+					//7-1、其他费用
 					summary.setQtfyTotal(summary.getQtfyTotal() + item.getAmount().doubleValue());
 				}
+				// 7-2、其他费用限额,1-6合计相加/0.8*0.2
+				double total = summary.getRyrgTotal() + summary.getZjtrTotal() + summary.getZjfyycqdtfyTotal() + summary.getSjfTotal() + summary.getWxzctxTotal() + summary.getZbtsfyysyfyTotal();
+				summary.setQtfyLimit(total / 0.8 * 0.2);
+				//7-3、调整后其他费用,7-1和7-2,谁小取谁
+				summary.setQtfyAdjust(Math.min(summary.getQtfyTotal(), summary.getQtfyLimit()));
+
 			}
-			summaryList.add(summary);
 		}
 		return page.setRecords(summaryList);
 	}
 
-    @Override
-    public List<DeductionCostDetailVO> deductionCostDetail(XmCostDetailsDTO dto) {
+	@Override
+	public List<DeductionCostDetailVO> deductionCostDetail(XmCostDetailsDTO dto) {
 		if (Func.isBlank(dto.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
-		if(dto.getType()==null){
+		if (dto.getType() == null) {
 			throw new ServiceException("参数type不能为空");
 		}
-		if(!Arrays.asList(1,2).contains(dto.getType())){
+		if (!Arrays.asList(1, 2).contains(dto.getType())) {
 			throw new ServiceException("参数type的值只能是1:费用化,2:资本化");
 		}
 		dto.setTenantId(SecureUtil.getTenantId());
@@ -347,68 +362,68 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		for (DeductionCostDetailVO tmp : list) {
 			List<DeductionCostItemVO> vos = tmp.getCostList();
 			for (DeductionCostItemVO vo : vos) {
-				if(vo.getAdSubjectEnable() == 0){
+				if (vo.getAdSubjectEnable() == 0) {
 					//四级科目 不是加计扣除研发费用科目,费用不归集
 					continue;
 				}
-				if(dto.getType()==1){
+				if (dto.getType() == 1) {
 					//费用化
-					if(Func.equals(vo.getL3Code(),"53010101")){
+					if (Func.equals(vo.getL3Code(), "53010101")) {
 						//人员人工费用
 						vo.setRyrgfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL3Code(),"53010102")){
+					} else if (Func.equals(vo.getL3Code(), "53010102")) {
 						//直接投入费用
 						vo.setZjtrfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL3Code(),"53010103")){
+					} else if (Func.equals(vo.getL3Code(), "53010103")) {
 						//折旧费用
 						vo.setZjfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL3Code(),"53010104")){
+					} else if (Func.equals(vo.getL3Code(), "53010104")) {
 						//无形资产摊销
 						vo.setWxzctx(vo.getAmount().doubleValue());
-					}else if(Arrays.asList("5301010501","5301010502","5301010602","5301010603").contains(vo.getL4Code())){
+					} else if (Arrays.asList("5301010501", "5301010502", "5301010602", "5301010603").contains(vo.getL4Code())) {
 						//新产品设计费等
 						//三级科目中的“设计费用”-新产品设计费,新工艺规程制定费;和"装备调试费用与试验费用"-新药研制的临床试验费,勘探开发的现场试验费;归集到新产品设计费等
- 						vo.setXcpsjfd(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL3Code(),"53010108")){
+						vo.setXcpsjfd(vo.getAmount().doubleValue());
+					} else if (Func.equals(vo.getL3Code(), "53010108")) {
 						//其他相关费用
 						vo.setQtxgfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL4Code(),"5301010701")){
+					} else if (Func.equals(vo.getL4Code(), "5301010701")) {
 						//委托境内机构或个人进行研发活动所发生的费用
 						vo.setWtjnjgfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL4Code(),"5301010702")){
+					} else if (Func.equals(vo.getL4Code(), "5301010702")) {
 						//委托境外机构进行研发活动所发生的费用
 						vo.setWtjwjgfy(vo.getAmount().doubleValue());
-					}else {
+					} else {
 						throw new ServiceException("费用归集出错啦");
 					}
-				}else if(dto.getType() == 2){
+				} else if (dto.getType() == 2) {
 					//资本化
-					if(Func.equals(vo.getL3Code(),"53010201")){
+					if (Func.equals(vo.getL3Code(), "53010201")) {
 						//人员人工费用
 						vo.setRyrgfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL3Code(),"53010202")){
+					} else if (Func.equals(vo.getL3Code(), "53010202")) {
 						//直接投入费用
 						vo.setZjtrfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL3Code(),"53010203")){
+					} else if (Func.equals(vo.getL3Code(), "53010203")) {
 						//折旧费用
 						vo.setZjfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL3Code(),"53010204")){
+					} else if (Func.equals(vo.getL3Code(), "53010204")) {
 						//无形资产摊销
 						vo.setWxzctx(vo.getAmount().doubleValue());
-					}else if(Arrays.asList("5301020501","5301020502","5301020602","5301020603").contains(vo.getL4Code())){
+					} else if (Arrays.asList("5301020501", "5301020502", "5301020602", "5301020603").contains(vo.getL4Code())) {
 						//新产品设计费等
 						//三级科目中的“设计费用”-新产品设计费,新工艺规程制定费;和"装备调试费用与试验费用"-新药研制的临床试验费,勘探开发的现场试验费;归集到新产品设计费等
 						vo.setXcpsjfd(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL3Code(),"53010208")){
+					} else if (Func.equals(vo.getL3Code(), "53010208")) {
 						//其他相关费用
 						vo.setQtxgfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL4Code(),"5301020701")){
+					} else if (Func.equals(vo.getL4Code(), "5301020701")) {
 						//委托境内机构或个人进行研发活动所发生的费用
 						vo.setWtjnjgfy(vo.getAmount().doubleValue());
-					}else if(Func.equals(vo.getL4Code(),"5301020702")){
+					} else if (Func.equals(vo.getL4Code(), "5301020702")) {
 						//委托境外机构进行研发活动所发生的费用
 						vo.setWtjwjgfy(vo.getAmount().doubleValue());
-					}else {
+					} else {
 						throw new ServiceException("费用归集出错啦");
 					}
 				}
@@ -416,9 +431,112 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 			}
 		}
 		return list;
-    }
+	}
+
+	@Override
+	public IPage<DeductionCostSummary> deductionCostSummary(IPage<DeductionCostSummary> page, XmCostDetailsDTO dto) {
+		if (Func.isBlank(dto.getYearAndMonth())) {
+			throw new ServiceException("参数yearAndMonth不能为空");
+		}
+		dto.setTenantId(SecureUtil.getTenantId());
+
+		Query query = new Query();
+		query.setCurrent((int) page.getCurrent());
+		query.setSize((int) page.getSize());
+		IPage<JSONObject> p1 = Condition.getPage(query);
+
+		List<JSONObject> tmpList = baseMapper.costSummary(p1, dto);
+
+		page.setTotal(p1.getTotal()).setCurrent(p1.getCurrent()).setSize(p1.getSize());
+
+		List<DeductionCostSummary> summaryList = JSON.parseArray(JSON.toJSONString(tmpList), DeductionCostSummary.class);
+
+		for (DeductionCostSummary summary : summaryList) {
+			List<CostItemVO> itemList = baseMapper.selectCostItemByCondition(dto.getYearAndMonth(), summary.getXmId());
+			for (CostItemVO vo : itemList) {
+				if (vo.getAdSubjectEnable() == 0) {
+					//四级科目 不是加计扣除研发费用科目,费用不归集
+					continue;
+				}
+				if (Func.equals(vo.getL3Code(), "53010101")) {
+					//1、人员人工费用-费用化
+					summary.setRyrgTotal(summary.getRyrgTotal() + vo.getAmount().doubleValue());
+					summary.setRyrgTotal_fyh(summary.getRyrgTotal_fyh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010201")) {
+					//人员人工费用-资本化
+					summary.setRyrgTotal(summary.getRyrgTotal() + vo.getAmount().doubleValue());
+					summary.setRyrgTotal_zbh(summary.getRyrgTotal_zbh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010102")) {
+					//2、直接投入费用费用-费用化
+					summary.setZjtrTotal(summary.getZjtrTotal() + vo.getAmount().doubleValue());
+					summary.setZjtrTotal_fyh(summary.getZjtrTotal_fyh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010202")) {
+					//直接投入费用-资本化
+					summary.setZjtrTotal(summary.getZjtrTotal() + vo.getAmount().doubleValue());
+					summary.setZjtrTotal_zbh(summary.getZjtrTotal_zbh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010103")) {
+					//3、折旧费用-费用化
+					summary.setZjfyTotal(summary.getZjfyTotal() + vo.getAmount().doubleValue());
+					summary.setZjfyTotal_fyh(summary.getZjfyTotal_fyh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010203")) {
+					//3、折旧费用-资本化
+					summary.setZjfyTotal(summary.getZjfyTotal() + vo.getAmount().doubleValue());
+					summary.setZjfyTotal_zbh(summary.getZjfyTotal_zbh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010104")) {
+					//4、无形资产摊销-费用化
+					summary.setWxzctxTotal(summary.getWxzctxTotal() + vo.getAmount().doubleValue());
+					summary.setWxzctxTotal_fyh(summary.getWxzctxTotal_fyh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010204")) {
+					//4、无形资产摊销-资本化
+					summary.setWxzctxTotal(summary.getWxzctxTotal() + vo.getAmount().doubleValue());
+					summary.setWxzctxTotal_zbh(summary.getWxzctxTotal_zbh() + vo.getAmount().doubleValue());
+				} else if (Arrays.asList("5301010501", "5301010502", "5301010602", "5301010603").contains(vo.getL4Code())) {
+					//5、新产品设计费等-费用化
+					//三级科目中的“设计费用”-新产品设计费,新工艺规程制定费;和"装备调试费用与试验费用"-新药研制的临床试验费,勘探开发的现场试验费;归集到新产品设计费等
+					summary.setXcpsjfd(summary.getXcpsjfd() + vo.getAmount().doubleValue());
+					summary.setXcpsjfd_fyh(summary.getXcpsjfd_fyh() + vo.getAmount().doubleValue());
+				} else if (Arrays.asList("5301020501", "5301020502", "5301020602", "5301020603").contains(vo.getL4Code())) {
+					//5、新产品设计费等-资本化
+					//三级科目中的“设计费用”-新产品设计费,新工艺规程制定费;和"装备调试费用与试验费用"-新药研制的临床试验费,勘探开发的现场试验费;归集到新产品设计费等
+					summary.setXcpsjfd(summary.getXcpsjfd() + vo.getAmount().doubleValue());
+					summary.setXcpsjfd_zbh(summary.getXcpsjfd_zbh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010108")) {
+					//7.1、其他相关费用-费用化
+					summary.setQtxgfyTotal(summary.getQtxgfyTotal() + vo.getAmount().doubleValue());
+					summary.setQtxgfyTotal_fyh(summary.getQtxgfyTotal_fyh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL3Code(), "53010208")) {
+					//7.1、其他相关费用-资本化
+					summary.setQtxgfyTotal(summary.getQtxgfyTotal() + vo.getAmount().doubleValue());
+					summary.setQtxgfyTotal_zbh(summary.getQtxgfyTotal_zbh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL4Code(), "5301010701")) {
+					//8.1、委托境内机构或个人进行研发活动所发生的费用-费用化
+					summary.setWtjnfy(summary.getWtjnfy() + vo.getAmount().doubleValue());
+					summary.setWtjnfy_fyh(summary.getWtjnfy_fyh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL4Code(), "5301020701")) {
+					//8.1、委托境内机构或个人进行研发活动所发生的费用-资本化
+					summary.setWtjnfy(summary.getWtjnfy() + vo.getAmount().doubleValue());
+					summary.setWtjnfy_zbh(summary.getWtjnfy_zbh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL4Code(), "5301010702")) {
+					//8.3、委托境外机构进行研发活动所发生的费用-费用化
+					summary.setWtjwfy(summary.getWtjwfy() + vo.getAmount().doubleValue());
+					summary.setWtjwfy_fyh(summary.getWtjwfy_fyh() + vo.getAmount().doubleValue());
+				} else if (Func.equals(vo.getL4Code(), "5301020702")) {
+					//8.3、委托境外机构进行研发活动所发生的费用-资本化
+					summary.setWtjwfy(summary.getWtjwfy() + vo.getAmount().doubleValue());
+					summary.setWtjwfy_zbh(summary.getWtjwfy_zbh() + vo.getAmount().doubleValue());
+				} else {
+					throw new ServiceException("费用归集出错啦");
+				}
+			}
+
+			//前五项小计=1、人员人工费用+2、直接投入费用+3、折旧费用+4、无形资产摊销+5、新产品设计费等
+			summary.setTotal(summary.getRyrgTotal() + summary.getZjtrTotal() + summary.getZjfyTotal() + summary.getWxzctxTotal() + summary.getXcpsjfd());
+
+		}
+		return page.setRecords(summaryList);
+	}
 
-    public static void judgeDate(Date date, String yearAndMonth) {
+	public static void judgeDate(Date date, String yearAndMonth) {
 		//日期,必须时当月日期
 		if (date != null) {
 			String format = DateUtil.format(date, DateUtil.PATTERN_YYYYMM);