zhoulisky 8 months ago
parent
commit
c335340241
21 changed files with 280 additions and 78 deletions
  1. 3 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/dto/XmCostDetailsDTO.java
  2. 33 1
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/HighTechYB.java
  3. 14 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/HighTechYBVO.java
  4. 40 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/CostController.java
  5. 9 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/KYCGController.java
  6. 2 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmCostDetailsController.java
  7. 4 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/CgZlMapper.java
  8. 7 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/CgZlMapper.xml
  9. 3 13
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmBgrzMapper.java
  10. 0 5
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmBgrzMapper.xml
  11. 5 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmCostDetailsMapper.java
  12. 42 13
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmCostDetailsMapper.xml
  13. 10 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/ICgZlService.java
  14. 6 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/CgZlServiceImpl.java
  15. 25 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/EnterpriseInfoServiceImpl.java
  16. 6 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java
  17. 69 39
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java
  18. BIN
      kd-service/kd-scientific/src/main/resources/export-template/研发项目汇总表.xls
  19. BIN
      kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.docx
  20. 1 1
      kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.ftl
  21. 1 1
      kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.xml

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

@@ -36,4 +36,7 @@ public class XmCostDetailsDTO implements Serializable {
 	@Schema(description = "费用金额区间-大")
 	private Double amountMax;
 
+	@Schema(description = "口径类型,1:会计口径,2:加计扣除口径,3:高新口径")
+	private Integer caliber;
+
 }

+ 33 - 1
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/HighTechYB.java

@@ -25,7 +25,39 @@ public class HighTechYB extends TenantEntity {
 	@Schema(description = "新增就业人员数")
 	private Integer d15;
 
-	@Schema(description = "其中:吸纳高校应届毕业生人数")
+	@Schema(description = "新增就业人员数")
 	private Integer d16;
 
+	@Schema(description = "总收入")
+	private String d18;
+
+	@Schema(description = "净资产")
+	private String d20;
+
+	@Schema(description = "高新技术产品(服务)收入")
+	private String d21;
+
+	@Schema(description = "纳税总额")
+	private String d22;
+
+	@Schema(description = "企业所得税减免额")
+	private String d23;
+
+	@Schema(description = "利润总额")
+	private String d24;
+
+	@Schema(description = "出口创汇总额(万美元)")
+	private String d25;
+
+	@Schema(description = "企业是否上市")
+	private String d30;
+
+	@Schema(description = "上市时间")
+	private String d31;
+
+	@Schema(description = "上市类型")
+	private String d32;
+
+	@Schema(description = "股票代码")
+	private String d33;
 }

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

@@ -46,4 +46,18 @@ public class HighTechYBVO extends HighTechYB {
 	@Schema(description = "科技人员数")
 	private Integer d14;
 
+	@Schema(description = "销售收入")
+	private String d19;
+
+	@Schema(description = "研究开发费用额")
+	private String d26;
+
+	@Schema(description = "在中国境内研发费用额")
+	private String d28;
+
+	@Schema(description = "基础研究投入费用总额")
+	private String d29;
+
+
+
 }

+ 40 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/CostController.java

@@ -1,11 +1,18 @@
 package org.sky.scientific.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
+import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.api.R;
+import org.sky.core.tool.utils.Func;
+import org.sky.scientific.mapper.XmCostDetailsMapper;
 import org.sky.scientific.pojo.dto.CostSummaryDTO;
 import org.sky.scientific.pojo.vo.CostSummaryVO;
 import org.sky.scientific.service.IAssetService;
@@ -14,6 +21,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @RestController
@@ -23,6 +31,8 @@ public class CostController {
 
 	private final IAssetService service;
 
+	private final XmCostDetailsMapper xmCostDetailsMapper;
+
 	@GetMapping("/cost/summary")
 	@ApiOperationSupport(order = 1)
 	@Operation(summary = "研发费用统计-本年各月研发费用汇总表")
@@ -32,9 +42,38 @@ public class CostController {
 
 	@PostMapping("/cost/summary/export")
 	@ApiOperationSupport(order = 2)
-	@Operation(summary = "研发费用统计-本年各月研发费用汇总表-导出", description  = "传入salary")
+	@Operation(summary = "研发费用统计-本年各月研发费用汇总表-导出", description = "传入salary")
 	public void exportCostSummary(HttpServletResponse response, @RequestBody CostSummaryDTO dto) {
 		service.exportCostSummary(response, dto);
 	}
 
+	@GetMapping("xmysygjqst")
+	@ApiOperationSupport(order = 3)
+	@Operation(summary = "首页-项目预算与归集趋势图")
+	@Parameters({
+		@Parameter(name = "year", description = "年份", in = ParameterIn.QUERY),
+		@Parameter(name = "currentYear", description = "本年度=1,全周期=0", in = ParameterIn.QUERY)
+	})
+	public R<List<JSONObject>> xmysygjqst(String year, Boolean currentYear) {
+		List<JSONObject> list = xmCostDetailsMapper.xmysygjqst(SecureUtil.getTenantId(), year, currentYear);
+		for (JSONObject obj : list) {
+
+			BigDecimal cost = obj.getBigDecimal("cost").multiply(BigDecimal.valueOf(0.0001));
+			obj.put("cost", cost);
+
+			List<JSONObject> XMYSZEMX = JSONObject.parseArray(obj.getString("XMYSZEMX"), JSONObject.class);
+
+			double total = 0;
+			if (currentYear) {
+				total = XMYSZEMX.stream().filter(t -> Func.equals(t.getString("year"), year)).mapToDouble(t -> t.getDouble("amount")).sum();
+			} else {
+				total = XMYSZEMX.stream().mapToDouble(t -> t.getDouble("amount")).sum();
+			}
+
+			obj.remove("XMYSZEMX");
+			obj.put("xmys", total);
+		}
+		return R.data(list);
+	}
+
 }

+ 9 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/KYCGController.java

@@ -1,6 +1,7 @@
 
 package org.sky.scientific.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
@@ -13,6 +14,7 @@ import org.sky.core.boot.ctrl.KdController;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
 import org.sky.core.secure.KdUser;
+import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.utils.Func;
 import org.sky.scientific.pojo.dto.CgQtDTO;
@@ -96,6 +98,13 @@ public class KYCGController extends KdController {
 		zlService.exportZl(response, cgZl);
 	}
 
+	@GetMapping("dashboard/zl")
+	@ApiOperationSupport(order = 8)
+	@Operation(summary = "首页-知识产权情况")
+	public R<JSONObject> zlDashboard(String year) {
+		return R.data(zlService.zlDashboard(SecureUtil.getTenantId(), year));
+	}
+
 	@GetMapping("/rjzzq/detail")
 	@ApiOperationSupport(order = 11)
 	@Operation(summary = "软件著作-详情", description = "传入cgRjzzq")

+ 2 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmCostDetailsController.java

@@ -164,4 +164,6 @@ public class XmCostDetailsController extends KdController {
 	public R<Boolean> updateDeductionQt(@RequestBody DeductionCostQt dto) {
 		return R.status(service.updateDeductionQt(dto));
 	}
+
+
 }

+ 4 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/CgZlMapper.java

@@ -1,7 +1,8 @@
 
 package org.sky.scientific.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+ import com.alibaba.fastjson.JSONObject;
+ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.sky.scientific.pojo.entity.CgZlEntity;
 
 import java.util.List;
@@ -15,4 +16,6 @@ import java.util.List;
 public interface CgZlMapper extends BaseMapper<CgZlEntity> {
 
 	boolean physicalDeleteByIds(List<Long> ids);
+
+    JSONObject zlDashboard(String tenantId, String year);
 }

+ 7 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/CgZlMapper.xml

@@ -40,4 +40,11 @@
         </foreach>
     </delete>
 
+    <select id="zlDashboard" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            (SELECT count(*) from kd_cg_zl where tenant_id = #{tenantId} and DATE_FORMAT(SHENQING_RQ,'%Y') = #{year}) as total,
+            (SELECT count(*) from kd_cg_zl where tenant_id = #{tenantId} and DATE_FORMAT(SHENQING_RQ,'%Y') = #{year} and FLZT in ('申请中','授权有效')) as shenqingshu,
+            (SELECT count(*) from kd_cg_zl where tenant_id = #{tenantId} and DATE_FORMAT(SHOUQUAN_RQ,'%Y') = #{year} and FLZT = '授权有效') as shouquanshu
+    </select>
+
 </mapper>

+ 3 - 13
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmBgrzMapper.java

@@ -1,13 +1,12 @@
 
 package org.sky.scientific.mapper;
 
-import org.sky.scientific.pojo.entity.XmBgrzEntity;
-import org.sky.scientific.pojo.vo.XmBgrzVO;
-import org.sky.scientific.excel.XmBgrzExcel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.sky.scientific.pojo.entity.XmBgrzEntity;
+import org.sky.scientific.pojo.vo.XmBgrzVO;
+
 import java.util.List;
 
 /**
@@ -18,15 +17,6 @@ import java.util.List;
  */
 public interface XmBgrzMapper extends BaseMapper<XmBgrzEntity> {
 
-
-	/**
-	 * 获取导出数据
-	 *
-	 * @param queryWrapper 查询条件
-	 * @return List<XmBgrzExcel>
-	 */
-	List<XmBgrzExcel> exportXmBgrz(@Param("ew") Wrapper<XmBgrzEntity> queryWrapper);
-
 	/**
 	 * 查询项目-变更记录分页数据
 	 * @param page

+ 0 - 5
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmBgrzMapper.xml

@@ -29,11 +29,6 @@
         <result column="xmsqdw" property="xmsqdw"/>
     </resultMap>
 
-    <select id="exportXmBgrz" resultType="org.sky.scientific.excel.XmBgrzExcel">
-        SELECT * FROM kd_xm_bgrz ${ew.customSqlSegment}
-    </select>
-
-
     <select id="selectBgrzPage" resultMap="ResultVoMap">
         SELECT
         XM_ID,

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

@@ -78,4 +78,9 @@ public interface XmCostDetailsMapper extends BaseMapper<XmCostDetailsEntity> {
 	@TenantIgnore
 	List<CostItemVO> selectCostItemByCondition(@Param("yearAndMonth") String yearAndMonth, @Param("xmId") Long xmId);
 
+	@TenantIgnore
+	List<JSONObject> statisticsCost(String yearAndMonth, String tenantId);
+
+
+	List<JSONObject> xmysygjqst(String tenantId, String year, boolean currentYear);
 }

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

@@ -114,10 +114,10 @@
         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}
-        <if test="xmmc!=null and xmmc!=''">and xm.XMMC like concat('%',#{xmmc},'%')</if>
-        <if test="xmId!=null">and xm.id = #{xmId}</if>
+        WHERE kxcd.tenant_id = #{tenantId} and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and #{yearAndMonth}
+            and xm.id in (select distinct(xm_id) from kd_xm_finance where type = 1 and tenant_id = #{tenantId})
+            <if test="xmmc!=null and xmmc!=''">and xm.XMMC like concat('%',#{xmmc},'%')</if>
+            <if test="xmId!=null">and xm.id = #{xmId}</if>
         order by kxcd.record_date asc
     </select>
 
@@ -159,10 +159,12 @@
             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}
-        <if test="xmmc!=null and xmmc!=''">and xm.XMMC like concat('%',#{xmmc},'%')</if>
-        <if test="xmId!=null">and xm.id = #{xmId}</if>
+        WHERE
+            kxcd.tenant_id = #{tenantId}
+            and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and #{yearAndMonth}
+            and xm.id in (select distinct(xm_id) from kd_xm_finance where type = 3 and tenant_id = #{tenantId})
+            <if test="xmmc!=null and xmmc!=''">and xm.XMMC like concat('%',#{xmmc},'%')</if>
+            <if test="xmId!=null">and xm.id = #{xmId}</if>
         order by kxcd.record_date asc
     </select>
 
@@ -208,11 +210,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 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>
-        <if test="xmId!=null">and xm.id = #{xmId}</if>
+        WHERE
+            kxcd.tenant_id = #{tenantId} and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and #{yearAndMonth}
+            and xm.id in (select distinct(xm_id) from kd_xm_finance where type = 2 and tenant_id = #{tenantId})
+            <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>
+            <if test="xmId!=null">and xm.id = #{xmId}</if>
         order by kxcd.record_date asc
     </select>
 
@@ -235,6 +239,9 @@
             WHERE xm.is_deleted = 0
         ) xm on xm.id = p.xm_id
         <where>
+            <if test="ew.caliber==1 or ew.caliber==2 or ew.caliber==3">
+                and xm.id in (select distinct(xm_id) from kd_xm_finance where type = #{ew.caliber} and tenant_id = #{ew.tenantId})
+            </if>
             <if test="ew.xmmc!=null and ew.xmmc!=''">and xm.XMMC like concat('%',#{ew.xmmc},'%')</if>
             <if test="ew.xmId!=null and ew.xmId>0">and xm.id = #{ew.xmId}</if>
         </where>
@@ -271,4 +278,26 @@
         where kxcd.xm_id = #{xmId} and year_and_month between concat(left(#{yearAndMonth}, 4), '01') and #{yearAndMonth}
     </select>
 
+    <select id="statisticsCost" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            kxcd.xm_id as xmId,
+            sum(amount) as amountTotal
+        FROM kd_xm_cost_details kxcd
+        WHERE
+            kxcd.tenant_id = #{tenantId}
+        <if test="yearAndMonth!=null and yearAndMonth!=''">
+            and kxcd.year_and_month between concat(left(#{yearAndMonth},4),'01') and #{yearAndMonth}
+        </if>
+        GROUP BY xm_id
+    </select>
+    <select id="xmysygjqst" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            id,
+            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMMC' AND bgrz.BGSXSJ <![CDATA[<=]]> NOW() ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMMC) AS XMMC,
+            (SELECT IFNULL(sum(amount), 0) FROM kd_xm_cost_details kxcd WHERE kxcd.xm_id = xm.id <if test="currentYear==1">and DATE_FORMAT(record_date,'%Y') = #{year}</if> and kxcd.tenant_id = #{tenantId}) as cost,
+            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMYSZEMX' AND bgrz.BGSXSJ <![CDATA[<=]]> NOW() ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMYSZEMX) AS XMYSZEMX
+        FROM kd_xm xm
+        WHERE xm.tenant_id = #{tenantId}
+        and #{year} between DATE_FORMAT(XMKSSJ, '%Y') and DATE_FORMAT(COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMJSSJ' AND bgrz.BGSXSJ <![CDATA[<=]]> NOW() ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMJSSJ), '%Y')
+    </select>
 </mapper>

+ 10 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/ICgZlService.java

@@ -1,6 +1,7 @@
 
 package org.sky.scientific.service;
 
+import com.alibaba.fastjson.JSONObject;
 import jakarta.servlet.http.HttpServletResponse;
 import org.sky.core.mp.base.BaseService;
 import org.sky.scientific.pojo.entity.CgZlEntity;
@@ -26,4 +27,13 @@ public interface ICgZlService extends BaseService<CgZlEntity> {
 	boolean physicalDeleteByIds(List<Long> ids);
 
 	void exportZl(HttpServletResponse response, Map<String, Object> cgZl);
+
+	/**
+	 * 首页-知识产权情况
+	 *
+	 * @param tenantId
+	 * @param year
+	 * @return
+	 */
+	JSONObject zlDashboard(String tenantId, String year);
 }

+ 6 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/CgZlServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.excel.write.metadata.fill.FillConfig;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
@@ -122,4 +123,9 @@ public class CgZlServiceImpl extends BaseServiceImpl<CgZlMapper, CgZlEntity> imp
 		}
 	}
 
+    @Override
+    public JSONObject zlDashboard(String tenantId, String year) {
+        return baseMapper.zlDashboard(tenantId, year);
+    }
+
 }

+ 25 - 3
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/EnterpriseInfoServiceImpl.java

@@ -841,9 +841,19 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		vo.setYearAndMonth(year);
 		HighTechYB db = highTechYbMapper.selectOne(Wrappers.<HighTechYB>lambdaQuery().eq(HighTechYB::getYearAndMonth, year));
 		if (Func.notNull(db)) {
-			vo.setD13(db.getD13());
-			vo.setD15(db.getD15());
-			vo.setD16(db.getD16());
+//			vo.setD13(db.getD13());
+//			vo.setD15(db.getD15());
+//			vo.setD16(db.getD16());
+//			vo.setD18(db.getD18());
+//			vo.setD20(db.getD20());
+//			vo.setD21(db.getD21());
+//			vo.setD22(db.getD22());
+//			vo.setD23(db.getD23());
+//			vo.setD24(db.getD24());
+//			vo.setD25(db.getD25());
+//			vo.setD30(db.getD30());
+//			vo.setd
+			BeanUtil.copyProperties(db, vo);
 		}
 		Date dateMin = DateUtil.parse(year + "-01-01", DateUtil.PATTERN_DATE);
 		Date dateMax = DateUtil.parse(year + "-12-31", DateUtil.PATTERN_DATE);
@@ -896,6 +906,18 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		}
 		//科技人员数
 		vo.setD14(d14);
+
+		//销售收入
+ 		EnterpriseInfoEntity enterpriseInfo = enterpriseInfoMapper.selectOne(Wrappers.<EnterpriseInfoEntity>lambdaQuery().eq(EnterpriseInfoEntity::getYearAndMonth, year));
+		if(Func.notNull(enterpriseInfo)){
+			vo.setD19(enterpriseInfo.getCurrentYearIncome().toPlainString());
+		}else {
+			vo.setD19("0.00");
+		}
+		//研究开发费用额
+//		vo.setD26();
+//		vo.setD28();
+//		vo.setD29();
 		return vo;
 	}
 

+ 6 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java

@@ -324,6 +324,8 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		query.setCurrent((int) page.getCurrent());
 		query.setSize((int) page.getSize());
 		IPage<JSONObject> p1 = Condition.getPage(query);
+		//设置为会计口径,1:会计口径,2:加计扣除口径,3:高新口径
+		dto.setCaliber(1);
 		List<JSONObject> tmpList = baseMapper.costSummary(p1, dto);
 		page.setTotal(p1.getTotal()).setCurrent(p1.getCurrent()).setSize(p1.getSize());
 
@@ -545,6 +547,8 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		query.setSize((int) page.getSize());
 		IPage<JSONObject> p1 = Condition.getPage(query);
 
+		//设置为高新口径,1:会计口径,2:加计扣除口径,3:高新口径
+		dto.setCaliber(3);
 		List<JSONObject> tmpList = baseMapper.costSummary(p1, dto);
 
 		page.setTotal(p1.getTotal()).setCurrent(p1.getCurrent()).setSize(p1.getSize());
@@ -812,6 +816,8 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 		dto.setTenantId(SecureUtil.getTenantId());
+		//设置为加计扣除口径,1:会计口径,2:加计扣除口径,3:高新口径
+		dto.setCaliber(2);
 		List<DeductionCostDetailVO> list = baseMapper.deductionCostDetail(dto);
 		DeductionCostSummary summary = new DeductionCostSummary();
 

+ 69 - 39
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java

@@ -25,6 +25,7 @@ import org.sky.scientific.e.XmStatusEnum;
 import org.sky.scientific.excel.XmExcel;
 import org.sky.scientific.mapper.DepartmentMapper;
 import org.sky.scientific.mapper.TechnicianMapper;
+import org.sky.scientific.mapper.XmCostDetailsMapper;
 import org.sky.scientific.mapper.XmMapper;
 import org.sky.scientific.pojo.dto.XmDTO;
 import org.sky.scientific.pojo.dto.XmUpdateDto;
@@ -37,6 +38,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.InputStream;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -53,6 +55,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 
 	private final TechnicianMapper technicianMapper;
 	private final DepartmentMapper departmentMapper;
+	private final XmCostDetailsMapper xmCostDetailsMapper;
 
 	@Override
 	public IPage<XmEntity> selectXmList(IPage<XmEntity> page, XmDTO xm) {
@@ -128,6 +131,12 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 		List<XmSummary> xmList = baseMapper.summaryPage(page, xm);
 
 		int year = Integer.parseInt(xm.getYearAndMonth().substring(0, 4));
+
+		//本年度已归集研发费用(万元)
+		List<JSONObject> costByDateList = xmCostDetailsMapper.statisticsCost(xm.getYearAndMonth(), SecureUtil.getTenantId());
+		//全周期已归集(万元)
+		List<JSONObject> costAllList = xmCostDetailsMapper.statisticsCost(null, SecureUtil.getTenantId());
+
 		for (XmSummary xmVO : xmList) {
 
 			//立项报告数量
@@ -145,6 +154,27 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 				}
 			}
 
+			//全周期已归集(万元)
+			double qzqygj = costAllList.stream().filter(item -> Func.equals(item.getLong("xmId"), xmVO.getId())).mapToDouble(item -> item.getDouble("amountTotal")).sum();
+			//元->万元
+			xmVO.setQzqygj(BigDecimal.valueOf(qzqygj).multiply(BigDecimal.valueOf(0.0001)).setScale(2, RoundingMode.HALF_UP));
+			//总预算完成率(%)
+			if (xmVO.getQzqygj() == null || xmVO.getQzqygj().compareTo(BigDecimal.ZERO) <= 0 || xmVO.getXmysze() == null || xmVO.getXmysze().compareTo(BigDecimal.ZERO) <= 0) {
+				xmVO.setZyswcl(BigDecimal.ZERO);
+			} else {
+				xmVO.setZyswcl(xmVO.getQzqygj().divide(xmVO.getXmysze(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+			}
+
+			//本年度已归集研发费用(万元)
+			double ndygjyffy = costByDateList.stream().filter(item -> Func.equals(item.getLong("xmId"), xmVO.getId())).mapToDouble(item -> item.getDouble("amountTotal")).sum();
+			//元->万元
+			xmVO.setNdygjyffy(BigDecimal.valueOf(ndygjyffy).multiply(BigDecimal.valueOf(0.0001)).setScale(2, RoundingMode.HALF_UP));
+			//年度已归集金额/年度预算(%)xmyszeCurrentYear
+			if (xmVO.getNdygjyffy() == null || xmVO.getNdygjyffy().compareTo(BigDecimal.ZERO) <= 0 || xmVO.getXmyszeCurrentYear() == null || xmVO.getXmyszeCurrentYear() <= 0) {
+				xmVO.setNdygjjel(BigDecimal.ZERO);
+			} else {
+				xmVO.setNdygjjel(xmVO.getNdygjyffy().divide(BigDecimal.valueOf(xmVO.getXmyszeCurrentYear()),4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+			}
 			xmVO.setXmsqdw(departmentMapper.getFullNameById(xmVO.getXmsqdwid()));
 		}
 		return page.setRecords(xmList);
@@ -154,44 +184,44 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 	@Override
 	public void exportSummary(HttpServletResponse response, XmDTO dto) {
 //		try {
-			InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/研发项目汇总表.xls");
-			response.setContentType("application/vnd.ms-excel");
-			response.setCharacterEncoding("utf-8");
-			response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("研发项目汇总表.xls", Charsets.UTF_8));
-
-			Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
-
-			List<XmSummary> list = this.summaryPage(Condition.getPage(query), dto).getRecords();
-			AtomicInteger index = new AtomicInteger();
-			for (XmSummary summary : list) {
-				summary.setXh(index.incrementAndGet());
-				Optional<XmStatusEnum> first = Arrays.stream(XmStatusEnum.values()).filter(status -> status.getCode() == summary.getStatus()).findFirst();
-				summary.setStatusName(first.isPresent()?first.get().getName():"");
-
-				summary.setXmkssjStr(Func.notNull(summary.getXmkssj())?DateUtil.format(summary.getXmkssj(), DateUtil.PATTERN_DATE):null);
-				summary.setXmjssjStr(Func.notNull(summary.getXmjssj())?DateUtil.format(summary.getXmjssj(), DateUtil.PATTERN_DATE):null);
-
-				summary.setLxbgStatus((summary.getLxbgCount()>0)?"已提交":"未提交");
-				summary.setJdxbgStatus((summary.getJdxbgCount()>0)?"已提交":"未提交");
-				summary.setYsbgStatus((summary.getYsbgCount()>0)?"已提交":"未提交");
-			}
+		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/研发项目管理/研发项目汇总表.xls");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("研发项目汇总表.xls", Charsets.UTF_8));
 
-			ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
-				.withTemplate((templateFileName))
-				.excelType(ExcelTypeEnum.XLS)
-				.build();
-
-			WriteSheet writeSheet = EasyExcel.writerSheet().build();
-			//设置list集合数据
-			excelWriter.fill(list, writeSheet);
-			Map<String, Object> map = new HashMap<>();
-			map.put("year", dto.getYearAndMonth().substring(0, 4));
-			map.put("month", dto.getYearAndMonth().substring(4));
-			excelWriter.fill(map, writeSheet);
-			excelWriter.finish();
-			if (templateFileName != null) {
-				templateFileName.close();
-			}
+		Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
+
+		List<XmSummary> list = this.summaryPage(Condition.getPage(query), dto).getRecords();
+		AtomicInteger index = new AtomicInteger();
+		for (XmSummary summary : list) {
+			summary.setXh(index.incrementAndGet());
+			Optional<XmStatusEnum> first = Arrays.stream(XmStatusEnum.values()).filter(status -> status.getCode() == summary.getStatus()).findFirst();
+			summary.setStatusName(first.isPresent() ? first.get().getName() : "");
+
+			summary.setXmkssjStr(Func.notNull(summary.getXmkssj()) ? DateUtil.format(summary.getXmkssj(), DateUtil.PATTERN_DATE) : null);
+			summary.setXmjssjStr(Func.notNull(summary.getXmjssj()) ? DateUtil.format(summary.getXmjssj(), DateUtil.PATTERN_DATE) : null);
+
+			summary.setLxbgStatus((summary.getLxbgCount() > 0) ? "已提交" : "未提交");
+			summary.setJdxbgStatus((summary.getJdxbgCount() > 0) ? "已提交" : "未提交");
+			summary.setYsbgStatus((summary.getYsbgCount() > 0) ? "已提交" : "未提交");
+		}
+
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+			.withTemplate((templateFileName))
+			.excelType(ExcelTypeEnum.XLS)
+			.build();
+
+		WriteSheet writeSheet = EasyExcel.writerSheet().build();
+		//设置list集合数据
+		excelWriter.fill(list, writeSheet);
+		Map<String, Object> map = new HashMap<>();
+		map.put("year", dto.getYearAndMonth().substring(0, 4));
+		map.put("month", dto.getYearAndMonth().substring(4));
+		excelWriter.fill(map, writeSheet);
+		excelWriter.finish();
+		if (templateFileName != null) {
+			templateFileName.close();
+		}
 //		}catch (Exception e) {
 //			throw new ServiceException("导出失败," + e.getLocalizedMessage());
 //			try {
@@ -209,7 +239,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			throw new ServiceException("参数xmId不能为空");
 		}
 		XmYszbVO vo = baseMapper.selectYszb(xmId);
- 		List<JSONObject> mxList = JSON.parseArray(vo.getXmyszemx(), JSONObject.class);
+		List<JSONObject> mxList = JSON.parseArray(vo.getXmyszemx(), JSONObject.class);
 		vo.setXmysze(mxList.stream().mapToDouble(t -> t.getDouble("amount")).sum());
 
 		vo.setXmsqdw(departmentMapper.getFullNameById(vo.getXmsqdwid()));
@@ -239,7 +269,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 		List<JSONObject> list = this.selectAssistList(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto).getRecords();
 		AtomicInteger index = new AtomicInteger(1);
 
- 		list.forEach(temp -> {
+		list.forEach(temp -> {
 			temp.put("xh", index.getAndIncrement() + "");
 		});
 

BIN
kd-service/kd-scientific/src/main/resources/export-template/研发项目汇总表.xls


BIN
kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.docx


File diff suppressed because it is too large
+ 1 - 1
kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.ftl


File diff suppressed because it is too large
+ 1 - 1
kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.xml