Browse Source

高新口径-高新研发费用辅助明细账

zhouli 9 months ago
parent
commit
cdffc2a955

+ 4 - 4
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/SubjectEnterprise.java

@@ -44,11 +44,11 @@
      @Schema(description = "企业科目名称")
      private String name;
 
-	 @Schema(description = "高新研发费用科目")
+	 @Schema(description = "是否为高新研发费用科目,1:是,0,否")
 	 @TableField(exist = false)
-		 private String rdSubject;
+	 private Integer rdSubjectEnable;
 
-	 @Schema(description = "加计扣除研发费用科目")
+	 @Schema(description = "是否为加计扣除研发费用科目 ,1:是,0,否")
 	 @TableField(exist = false)
-	 private String adSubject;
+	 private Integer adSubjectEnable;
  }

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

@@ -1,18 +1,16 @@
 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 java.util.List;
 
 @Data
 public class FinanceCostDetailVO {
 
+	@Schema(description = "项目id")
+	private Long xmId;
+
 	@Schema(description = "项目编号")
 	private String xmbh;
 

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

@@ -29,6 +29,9 @@ public class FinanceCostItemVO{
 	@Schema(description = "系统三级科目编码,用于归集费用")
 	private String subjectCode;
 
+	@Schema(description = "是否为高新研发费用科目,1:是,0,否")
+	private int rdSubjectEnable;
+
 	@Schema(description = "金额")
 	private BigDecimal amount;
 

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

@@ -10,6 +10,9 @@ import java.math.BigDecimal;
 @Schema(description = "研发费用辅助账汇总表")
 public class FinanceCostSummary {
 
+	@Schema(description = "项目id")
+	private Long xmId;
+
 	@Schema(description = "项目编号")
 	private String xmbh;
 

+ 15 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmCostDetailsController.java

@@ -84,11 +84,25 @@ public class XmCostDetailsController extends KdController {
 	}
 
 	@GetMapping("/finance-summary")
-	@ApiOperationSupport(order = 20)
+	@ApiOperationSupport(order = 21)
 		@Operation(summary = "会计口径-研发费用辅助账汇总表")
 	public R<IPage<FinanceCostSummary>> financeCostSummary(Query query, XmCostDetailsDTO dto) {
 		return R.data(service.financeCostSummary(Condition.getPage(query), dto));
 	}
 
+	@GetMapping("/high-tech-list")
+	@ApiOperationSupport(order = 29)
+	@Operation(summary = "高新口径-高新研发费用辅助明细账")
+	public R<List<FinanceCostDetailVO>> 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) {
+		return R.data(service.highTechCostSummary(Condition.getPage(query), dto));
+	}
+
 
 }

+ 3 - 5
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/SubjectEnterpriseMapper.xml

@@ -9,8 +9,8 @@
         <result column="subject_name" property="subjectName"/>
         <result column="code" property="code"/>
         <result column="name" property="name"/>
-        <result column="rd_subject" property="rdSubject"/>
-        <result column="ad_subject" property="adSubject"/>
+        <result column="rd_subject_enable" property="rdSubjectEnable"/>
+        <result column="ad_subject_enable" property="adSubjectEnable"/>
     </resultMap>
 
     <insert id="insertBatch">
@@ -31,14 +31,12 @@
 
 
     <select id="selectSubjectEnterpriseList" resultMap="ResultMap">
-        select e.id, e.subject_id, e.code, e.name, s.rd_subject, s.ad_subject, e.subject_name
+        select e.id, e.subject_id, e.code, e.name, s.rd_subject_enable, s.ad_subject_enable, e.subject_name
         from kd_subject_enterprise e
         left join kd_subject s on e.subject_id = s.id
         where 1=1
         <if test="ew.code != null and ew.code != ''">and e.code = #{ew.code} </if>
         <if test="ew.name != null and ew.name != ''">and e.name like concat('%',#{ew.name},'%')</if>
         <if test="ew.subjectName != null and ew.subjectName != ''">and e.subject_name like concat('%',#{ew.subjectName},'%')</if>
-        <if test="ew.rdSubject != null and ew.rdSubject != ''">and s.rd_subject like concat('%',#{ew.rdSubject},'%')</if>
-        <if test="ew.adSubject != null and ew.adSubject != ''">and s.ad_subject like concat('%',#{ew.adSubject},'%')</if>
     </select>
 </mapper>

+ 4 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmCostDetailsMapper.java

@@ -7,6 +7,7 @@ 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.FinanceCostDetailVO;
+import org.sky.scientific.pojo.vo.FinanceCostItemVO;
 
 import java.util.List;
 
@@ -54,4 +55,7 @@ public interface XmCostDetailsMapper extends BaseMapper<XmCostDetailsEntity> {
 	 */
 	@TenantIgnore
 	List<FinanceCostDetailVO> financeCostSummary(IPage<FinanceCostDetailVO> page, @Param("ew") XmCostDetailsDTO dto);
+
+	@TenantIgnore
+	List<FinanceCostItemVO> selectCostItemByCondition(@Param("yearAndMonth") String yearAndMonth, @Param("xmId") Long xmId);
 }

+ 30 - 13
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmCostDetailsMapper.xml

@@ -76,6 +76,7 @@
 
 
     <resultMap id="FinanceCostDetailVO" type="org.sky.scientific.pojo.vo.FinanceCostDetailVO">
+        <result column="xm_id" property="xmId"/>
         <result column="XMBH" property="xmbh"/>
         <result column="XMMC" property="xmmc"/>
 
@@ -85,17 +86,18 @@
             <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="amount" property="amount"/>
             <result column="cashbook" property="cashbook"/>
         </collection>
     </resultMap>
     <select id="financeCostDetail" resultMap="FinanceCostDetailVO">
         SELECT
-            xm.XMBH,xm.XMMC,kxcd.record_date,kxcd.voucher_number,kxcd.digest,kxcd.amount,kxcd.cashbook, kxcd.e_subject_id,s.subject_code
+            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
         FROM kd_xm_cost_details kxcd
         LEFT JOIN
         (
-            SELECT se.id, se.subject_id ,sub.parent_id, sub1.`code` as subject_code
+            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
@@ -108,11 +110,13 @@
             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 = #{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">
+        <result column="xm_id" property="xmId"/>
         <result column="XMBH" property="xmbh"/>
         <result column="XMMC" property="xmmc"/>
 
@@ -128,15 +132,14 @@
     </resultMap>
     <select id="financeCostSummary" resultMap="FinanceCostDetailVO">
         SELECT
-        xm.XMBH,xm.XMMC,  kxcd.amount,kxcd.cashbook, kxcd.e_subject_id,s.subject_code
-        FROM kd_xm_cost_details kxcd
-        LEFT JOIN
+            p.xm_id,xm.XMBH,xm.XMMC
+        FROM
         (
-            SELECT se.id, se.subject_id ,sub.parent_id, sub1.`code` as subject_code
-            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
+            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
@@ -144,9 +147,23 @@
                 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 = kxcd.xm_id
-        WHERE kxcd.tenant_id = #{ew.tenantId} and kxcd.year_and_month between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}
+        ) 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}
     </select>
 
 </mapper>

+ 15 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/IXmCostDetailsService.java

@@ -72,4 +72,19 @@ public interface IXmCostDetailsService extends BaseService<XmCostDetailsEntity>
 	 * @return
 	 */
 	IPage<FinanceCostSummary> financeCostSummary(IPage page, XmCostDetailsDTO dto);
+
+	/**
+	 * 高新口径-研发费用辅助明细账
+	 * @param dto
+	 * @return
+	 */
+	List<FinanceCostDetailVO> highTechCostDetail(XmCostDetailsDTO dto);
+
+	/**
+	 * 高新口径-研发费用辅助账汇总表
+	 * @param page
+	 * @param dto
+	 * @return
+	 */
+	IPage<FinanceCostSummary> highTechCostSummary(IPage page, XmCostDetailsDTO dto);
 }

+ 102 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java

@@ -197,10 +197,13 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		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());
 
-			for (FinanceCostItemVO item : vo.getCostList()) {
+
+			List<FinanceCostItemVO> itemVOS = baseMapper.selectCostItemByCondition(dto.getYearAndMonth(), vo.getXmId());
+			for (FinanceCostItemVO item : itemVOS) {
 				if(Arrays.asList("53010101","53010201").contains(item.getSubjectCode())){
 					//人员人工费用
 					summary.setRyrgTotal(summary.getRyrgTotal() + item.getAmount().doubleValue());
@@ -232,6 +235,104 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		return page.setRecords(summaryList);
 	}
 
+	@Override
+	public List<FinanceCostDetailVO> 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){
+					//四级科目 不是高新研发费用科目,费用不归集
+					continue;
+				}
+				if(Arrays.asList("53010101","53010201").contains(vo.getSubjectCode())){
+					//人员人工费用
+					vo.setRyrg(vo.getAmount().doubleValue());
+				}else if(Arrays.asList("53010102","53010202").contains(vo.getSubjectCode())){
+					//直接投入费用
+					vo.setZjtr(vo.getAmount().doubleValue());
+				}else if(Arrays.asList("53010103","53010203").contains(vo.getSubjectCode())){
+					//折旧费用与长期待摊费用
+					vo.setZjfyycqdtfy(vo.getAmount().doubleValue());
+				}else if(Arrays.asList("53010104","53010204").contains(vo.getSubjectCode())){
+					//无形资产摊销费用
+					vo.setWxzctx(vo.getAmount().doubleValue());
+				}else if(Arrays.asList("53010105","53010205").contains(vo.getSubjectCode())){
+					//设计费用
+					vo.setSjf(vo.getAmount().doubleValue());
+				}else if(Arrays.asList("53010106","53010206").contains(vo.getSubjectCode())){
+					//装备调试费用与试验费用
+					vo.setZbtsfyysyfy(vo.getAmount().doubleValue());
+				}else if(Arrays.asList("53010107","53010207").contains(vo.getSubjectCode())){
+					//委托外部研究开发费用
+					vo.setWwyf(vo.getAmount().doubleValue());
+				}else if(Arrays.asList("53010108","53010208").contains(vo.getSubjectCode())){
+					//其他费用
+					vo.setQtfy(vo.getAmount().doubleValue());
+				}else {
+					throw new ServiceException("费用归集出错啦");
+				}
+			}
+		}
+		return list;
+	}
+
+	@Override
+	public IPage<FinanceCostSummary> highTechCostSummary(IPage 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());
+
+			List<FinanceCostItemVO> itemVOS = baseMapper.selectCostItemByCondition(dto.getYearAndMonth(), vo.getXmId());
+
+			for (FinanceCostItemVO item : itemVOS) {
+				if(item.getRdSubjectEnable() == 0){
+					//四级科目不是高新研发费用科目,费用不归集
+					continue;
+				}
+				if(Arrays.asList("53010101","53010201").contains(item.getSubjectCode())){
+					//人员人工费用
+					summary.setRyrgTotal(summary.getRyrgTotal() + item.getAmount().doubleValue());
+				}else if(Arrays.asList("53010102","53010202").contains(item.getSubjectCode())){
+					//直接投入费用
+					summary.setZjtrTotal(summary.getZjtrTotal() + item.getAmount().doubleValue());
+				}else if(Arrays.asList("53010103","53010203").contains(item.getSubjectCode())){
+					//折旧费用与长期待摊费用
+					summary.setZjfyycqdtfyTotal(summary.getZjfyycqdtfyTotal() + item.getAmount().doubleValue());
+				}else if(Arrays.asList("53010104","53010204").contains(item.getSubjectCode())){
+					//无形资产摊销费用
+					summary.setWxzctxTotal(summary.getWxzctxTotal() + item.getAmount().doubleValue());
+				}else if(Arrays.asList("53010105","53010205").contains(item.getSubjectCode())){
+					//设计费用
+					summary.setSjfTotal(summary.getSjfTotal() + item.getAmount().doubleValue());
+				}else if(Arrays.asList("53010106","53010206").contains(item.getSubjectCode())){
+					//装备调试费用与试验费用
+					summary.setZbtsfyysyfyTotal(summary.getZbtsfyysyfyTotal() + item.getAmount().doubleValue());
+				}else if(Arrays.asList("53010107","53010207").contains(item.getSubjectCode())){
+					//委托外部研究开发费用
+					summary.setWwyfTotal(summary.getWwyfTotal() + item.getAmount().doubleValue());
+				}else if(Arrays.asList("53010108","53010208").contains(item.getSubjectCode())){
+					//其他费用
+					summary.setQtfyTotal(summary.getQtfyTotal() + item.getAmount().doubleValue());
+				}
+			}
+			summaryList.add(summary);
+		}
+		return page.setRecords(summaryList);
+	}
+
 	public static void judgeDate(Date date, String yearAndMonth) {
 		//日期,必须时当月日期
 		if (date != null) {