zhoulisky 4 months ago
parent
commit
adccf4c084
38 changed files with 406 additions and 448 deletions
  1. 2 1
      kd-common/src/main/java/org/sky/common/utils/CommonUtil.java
  2. 1 1
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/A107_1.java
  3. 1 1
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/A107_2.java
  4. 6 6
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/A107012VO.java
  5. 11 11
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/A107041VO.java
  6. 4 4
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/A107_1VO.java
  7. 3 3
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/A107_2VO.java
  8. 5 5
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/CostSummaryVO.java
  9. 9 9
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/FinanceCostSummary.java
  10. 3 3
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/HighTechCostSummary.java
  11. 1 1
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/SalaryVO.java
  12. 11 11
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/TorchDevYBVO.java
  13. 13 13
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmSalaryVO.java
  14. 2 2
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmTechnicianSalaryVO.java
  15. 4 4
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/CostController.java
  16. 10 10
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/SalaryExcel.java
  17. 2 2
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/XmLeaseExcel.java
  18. 82 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/XmCqdtfyImportListener.java
  19. 2 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/A107_1Mapper.xml
  20. 0 4
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/CgZlMapper.java
  21. 0 7
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/CgZlMapper.xml
  22. 9 196
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianMapper.xml
  23. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmWwxmCostMapper.xml
  24. 11 11
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AssetServiceImpl.java
  25. 53 7
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/CgZlServiceImpl.java
  26. 18 12
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/EnterpriseInfoServiceImpl.java
  27. 9 9
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/SalaryServiceImpl.java
  28. 6 67
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java
  29. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java
  30. 46 16
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCqdtfyServiceImpl.java
  31. 10 10
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmDirectCostServiceImpl.java
  32. 2 2
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmFixedAssetServiceImpl.java
  33. 3 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmGoodsServiceImpl.java
  34. 3 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmLeaseServiceImpl.java
  35. 9 10
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java
  36. 19 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/YsRyrgfyServiceImpl.java
  37. 17 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/YsWxzctxfyServiceImpl.java
  38. 17 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/YsZjfyycqdtfyServiceImpl.java

+ 2 - 1
kd-common/src/main/java/org/sky/common/utils/CommonUtil.java

@@ -3,7 +3,6 @@ package org.sky.common.utils;
 
 /**
  * 通用工具类
- *
  */
 public class CommonUtil {
 
@@ -24,4 +23,6 @@ public class CommonUtil {
 	public static Double multiply(Double a, Double b) {
 		return Double.parseDouble(String.format("%.2f", a * b));
 	}
+
+
 }

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

@@ -30,6 +30,6 @@ public class A107_1 extends TenantEntity {
 	private String xmStage;
 
 	@Schema(description = "其中:政府奖金")
-	private BigDecimal govBonus = BigDecimal.ZERO;
+	private BigDecimal govBonus = new BigDecimal("0.00");
 
 }

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

@@ -24,7 +24,7 @@ public class A107_2 extends TenantEntity {
 	@Schema(description = "其中:管理和服务人员,手填")
 	private Integer d2;
 	@Schema(description = "3.来自银行贷款")
-	private BigDecimal d58= BigDecimal.ZERO;
+	private BigDecimal d58= BigDecimal.valueOf(0.00);
 	@Schema(description = "4.来自风险投资")
 	private BigDecimal d55= BigDecimal.ZERO;
 	@Schema(description = "5.来自其他渠道")

+ 6 - 6
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/A107012VO.java

@@ -21,22 +21,22 @@ public class A107012VO extends A107012 {
 	private Integer d1 = 0;
 
 	@Schema(description = "一、自主研发、合作研发、集中研发(3+7+16+19+23+34)")
-	private BigDecimal d2 = BigDecimal.ZERO;
+	private BigDecimal d2 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "(一)人员人工费用(4+5+6)")
-	private BigDecimal d3 = BigDecimal.ZERO;
+	private BigDecimal d3 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "(二)直接投入费用(8+9+10+11+12+13+14+15)")
-	private BigDecimal d7 = BigDecimal.ZERO;
+	private BigDecimal d7 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "(三)折旧费用(17+18)")
-	private BigDecimal d16 = BigDecimal.ZERO;
+	private BigDecimal d16 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "(四)无形资产摊销(20+21+22)")
-	private BigDecimal d19 = BigDecimal.ZERO;
+	private BigDecimal d19 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "(五)新产品设计费(24+25+26+27)")
-	private BigDecimal d23 = BigDecimal.ZERO;
+	private BigDecimal d23 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "(六)其他相关费用(29+30+31+32+33)")
 	private BigDecimal d28 = BigDecimal.ZERO;

+ 11 - 11
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/A107041VO.java

@@ -25,35 +25,35 @@ public class A107041VO extends A107041 {
 	private String d3;
 
 	@Schema(description = "一、本年高新技术产品(服务)收入(5+6)")
-	private BigDecimal d4 = BigDecimal.ZERO;
+	private BigDecimal d4 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "二、本年企业总收入(6-9)")
-	private BigDecimal d7 = BigDecimal.ZERO;
+	private BigDecimal d7 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "三、本年高新技术产品(服务)收入占企业总收入的比例(4÷7)")
-	private BigDecimal d10 = BigDecimal.ZERO;
+	private BigDecimal d10 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "四、本年企业成本(10-13)")
 	private Integer d11=0;
 
 	@Schema(description = "六、本年科技人员占企业当年职工总数的比例(11÷12)")
-	private BigDecimal d13 = BigDecimal.ZERO;
+	private BigDecimal d13 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "七、归集的高新研发费用金额(16+25)本年度")
-	private BigDecimal d15_1 = BigDecimal.ZERO;
+	private BigDecimal d15_1 = BigDecimal.valueOf(0.00);
 	@Schema(description = "七、归集的高新研发费用金额(16+25)前一年度")
-	private BigDecimal d15_2 = BigDecimal.ZERO;
+	private BigDecimal d15_2 = BigDecimal.valueOf(0.00);
 	@Schema(description = "七、归集的高新研发费用金额(16+25)前二年度")
-	private BigDecimal d15_3 = BigDecimal.ZERO;
+	private BigDecimal d15_3 = BigDecimal.valueOf(0.00);
 	@Schema(description = "七、归集的高新研发费用金额(16+25)合计")
-	private BigDecimal d15_4 = BigDecimal.ZERO;
+	private BigDecimal d15_4 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "一)内部研究开发投入 本年度")
-	private BigDecimal d16_1 = BigDecimal.ZERO;
+	private BigDecimal d16_1 = BigDecimal.valueOf(0.00);
 	@Schema(description = "一)内部研究开发投入 前一年度")
-	private BigDecimal d16_2 = BigDecimal.ZERO;
+	private BigDecimal d16_2 = BigDecimal.valueOf(0.00);
 	@Schema(description = "一)内部研究开发投入 前二年度")
-	private BigDecimal d16_3 = BigDecimal.ZERO;
+	private BigDecimal d16_3 = BigDecimal.valueOf(0.00);
 	@Schema(description = "一)内部研究开发投入 合计")
 	private BigDecimal d16_4 = BigDecimal.ZERO;
 

+ 4 - 4
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/A107_1VO.java

@@ -55,16 +55,16 @@ public class A107_1VO extends A107_1 {
 	private Double workTime;
 
 	@Schema(description = "项目经费支出(千元)")
-	private BigDecimal cost = BigDecimal.ZERO;
+	private BigDecimal cost = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "用于科学原理的探索发现的经费总额")
-	private BigDecimal cost1 = BigDecimal.ZERO;
+	private BigDecimal cost1 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "其中:企业自主开展")
-	private BigDecimal cost2 = BigDecimal.ZERO;
+	private BigDecimal cost2 = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "委托外单位开展")
-	private BigDecimal wwfy = BigDecimal.ZERO;
+	private BigDecimal wwfy = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "研究类型")
 	private String yjlx;

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

@@ -24,11 +24,11 @@ public class A107_2VO extends A107_2 {
 	private Integer d6 = 0;
 
 	@Schema(description = "研究开发费用合计")
-	private BigDecimal d7 = BigDecimal.ZERO;
+	private BigDecimal d7 = BigDecimal.valueOf(0.00);
 	@Schema(description = "1.人员人工费用")
-	private BigDecimal d8 = BigDecimal.ZERO;
+	private BigDecimal d8 = BigDecimal.valueOf(0.00);
 	@Schema(description = "2.直接投入费用")
-	private BigDecimal d9 = BigDecimal.ZERO;
+	private BigDecimal d9 = BigDecimal.valueOf(0.00);
 	@Schema(description = "3.折旧费用与长期待摊费用")
 	private BigDecimal d10 = BigDecimal.ZERO;
 	@Schema(description = "4.无形资产摊销费用")

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

@@ -15,19 +15,19 @@ public class CostSummaryVO {
 	private String yearAndMonth;
 
 	@Schema(description = "人员人工费用")
-	private BigDecimal ryrgfy = BigDecimal.ZERO;
+	private BigDecimal ryrgfy = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "直接投入费用")
-	private BigDecimal zjtrfy = BigDecimal.ZERO;
+	private BigDecimal zjtrfy = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "折旧费用和长期待摊费用")
-	private BigDecimal zjfyycqdtfy = BigDecimal.ZERO;
+	private BigDecimal zjfyycqdtfy = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "设计费用")
-	private BigDecimal sjfy = BigDecimal.ZERO;
+	private BigDecimal sjfy = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "无形资产摊销费用")
-	private BigDecimal wxzctxfy = BigDecimal.ZERO;
+	private BigDecimal wxzctxfy = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "装备调试费用与试验费用")
 	private BigDecimal zbtsfyysyfy = BigDecimal.ZERO;

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

@@ -25,29 +25,29 @@ public class FinanceCostSummary {
 	private String xmmc;
 
 	@Schema(description = "1、人员人工")
-	private BigDecimal ryrgTotal=BigDecimal.ZERO;
+	private BigDecimal ryrgTotal=BigDecimal.valueOf(0.00);
 
 	@Schema(description = "2、直接投入")
-	private BigDecimal zjtrTotal = BigDecimal.ZERO;
+	private BigDecimal zjtrTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "3、折旧费用与长期摊销费用")
-	private BigDecimal zjfyycqdtfyTotal = BigDecimal.ZERO;
+	private BigDecimal zjfyycqdtfyTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "4、设计费")
-	private BigDecimal sjfTotal = BigDecimal.ZERO;
+	private BigDecimal sjfTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "5、无形资产摊销")
-	private BigDecimal wxzctxTotal = BigDecimal.ZERO;
+	private BigDecimal wxzctxTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "6、装备调试费用与试验费用")
-	private BigDecimal zbtsfyysyfyTotal = BigDecimal.ZERO;
+	private BigDecimal zbtsfyysyfyTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "7、其他费用")
-	private BigDecimal qtfyTotal = BigDecimal.ZERO;
+	private BigDecimal qtfyTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "8、委外研发")
-	private BigDecimal wwyfTotal = BigDecimal.ZERO;
+	private BigDecimal wwyfTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "1-8项合计")
-	private BigDecimal total = BigDecimal.ZERO;
+	private BigDecimal total = BigDecimal.valueOf(0.00);
 }

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

@@ -23,13 +23,13 @@ public class HighTechCostSummary {
 	private String xmmc;
 
 	@Schema(description = "1、人员人工")
-	private BigDecimal ryrgTotal = BigDecimal.ZERO;
+	private BigDecimal ryrgTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "2、直接投入")
-	private BigDecimal zjtrTotal = BigDecimal.ZERO;
+	private BigDecimal zjtrTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "3、折旧费用与长期摊销费用")
-	private BigDecimal zjfyycqdtfyTotal = BigDecimal.ZERO;
+	private BigDecimal zjfyycqdtfyTotal = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "4、设计费")
 	private BigDecimal sjfTotal = BigDecimal.ZERO;

+ 1 - 1
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/SalaryVO.java

@@ -25,5 +25,5 @@ public class SalaryVO extends SalaryDTO {
 	private String xh;
 
 	@Schema(description = "社保单位部分(元)")
-	private BigDecimal total= BigDecimal.ZERO;
+	private BigDecimal total= BigDecimal.valueOf(0.00);
 }

+ 11 - 11
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/TorchDevYBVO.java

@@ -37,27 +37,27 @@ public class TorchDevYBVO implements Serializable {
 	private Integer qj09_3 = 0;
 
  	@Schema(description = "研究开发费用合计")
-	private BigDecimal qj20 = BigDecimal.ZERO;
+	private BigDecimal qj20 = BigDecimal.valueOf(0.00);
 	@Schema(description = "1.人员人工费用")
-	private BigDecimal qj23_1 = BigDecimal.ZERO;
+	private BigDecimal qj23_1 = BigDecimal.valueOf(0.00);
 	@Schema(description = "2.直接投入费用")
-	private BigDecimal qj23_2 = BigDecimal.ZERO;
+	private BigDecimal qj23_2 = BigDecimal.valueOf(0.00);
 	@Schema(description = "3.折旧费用与长期待摊费用")
-	private BigDecimal qj23_3 = BigDecimal.ZERO;
+	private BigDecimal qj23_3 = BigDecimal.valueOf(0.00);
 	@Schema(description = "4.无形资产摊销费用")
-	private BigDecimal qj23_4 = BigDecimal.ZERO;
+	private BigDecimal qj23_4 = BigDecimal.valueOf(0.00);
 	@Schema(description = "5.设计费用")
-	private BigDecimal qj23_6 = BigDecimal.ZERO;
+	private BigDecimal qj23_6 = BigDecimal.valueOf(0.00);
 	@Schema(description = "6.装备调试费用与试验费用")
-	private BigDecimal qj23_7 = BigDecimal.ZERO;
+	private BigDecimal qj23_7 = BigDecimal.valueOf(0.00);
 	@Schema(description = "7.委托外部研究开发费用")
-	private BigDecimal qj33= BigDecimal.ZERO;
+	private BigDecimal qj33= BigDecimal.valueOf(0.00);
 	@Schema(description = "①委托境内研究机构")
-	private BigDecimal qj33_1 = BigDecimal.ZERO;
+	private BigDecimal qj33_1 = BigDecimal.valueOf(0.00);
 	@Schema(description = "②委托境内高等学校")
-	private BigDecimal qj33_2 = BigDecimal.ZERO;
+	private BigDecimal qj33_2 = BigDecimal.valueOf(0.00);
 	@Schema(description = "③委托境内企业")
-	private BigDecimal qj33_3 = BigDecimal.ZERO;
+	private BigDecimal qj33_3 = BigDecimal.valueOf(0.00);
 	@Schema(description = "④委托境外机构")
 	private BigDecimal qj33_4 = BigDecimal.ZERO;
 	@Schema(description = "8.其他费用")

+ 13 - 13
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmSalaryVO.java

@@ -39,41 +39,41 @@ public class XmSalaryVO implements Serializable {
 	private double workHours = 0.0;
 
 	@Schema(description = "工资(元)")
-	private BigDecimal averageMonthlySalary = BigDecimal.ZERO;
+	private BigDecimal averageMonthlySalary = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "养老保险单位部分")
-	private BigDecimal pensionInsurance = BigDecimal.ZERO;
+	private BigDecimal pensionInsurance = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "医疗保险单位部分")
-	private BigDecimal medicalInsurance = BigDecimal.ZERO;
+	private BigDecimal medicalInsurance = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "失业保险单位部分")
-	private BigDecimal unemploymentInsurance = BigDecimal.ZERO;
+	private BigDecimal unemploymentInsurance = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "工伤保险单位部分")
-	private BigDecimal injuryInsurance = BigDecimal.ZERO;
+	private BigDecimal injuryInsurance = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "生育保险单位部分")
-	private BigDecimal maternityInsurance = BigDecimal.ZERO;
+	private BigDecimal maternityInsurance = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "社保合计")
-	private BigDecimal totalInsurance = BigDecimal.ZERO;
+	private BigDecimal totalInsurance = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "公积金单位部分")
-	private BigDecimal providentFund = BigDecimal.ZERO;
+	private BigDecimal providentFund = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "奖金")
-	private BigDecimal bonus = BigDecimal.ZERO;
+	private BigDecimal bonus = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "福利费")
-	private BigDecimal benefit = BigDecimal.ZERO;
+	private BigDecimal benefit = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "补充养老保险")
-	private BigDecimal pensionInsuranceBc = BigDecimal.ZERO;
+	private BigDecimal pensionInsuranceBc = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "补充医疗保险")
-	private BigDecimal medicalInsuranceBc = BigDecimal.ZERO;
+	private BigDecimal medicalInsuranceBc = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "研发费用合计")
-	private BigDecimal total = BigDecimal.ZERO;
+	private BigDecimal total = BigDecimal.valueOf(0.00);
 }

+ 2 - 2
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmTechnicianSalaryVO.java

@@ -61,10 +61,10 @@ public class XmTechnicianSalaryVO implements Serializable {
 	private double workHours;
 
 	@Schema(description = "研发占比(%)")
-	private BigDecimal yanfazhanbi = BigDecimal.ZERO;
+	private BigDecimal yanfazhanbi = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "工资(元)")
-	private BigDecimal averageMonthlySalary = BigDecimal.ZERO;
+	private BigDecimal averageMonthlySalary = BigDecimal.valueOf(0.00);
 
 	@Schema(description = "养老保险单位部分")
 	private BigDecimal pensionInsurance = BigDecimal.ZERO;

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

@@ -59,16 +59,16 @@ public class CostController {
 		List<JSONObject> list = xmCostDetailsMapper.xmysygjqst(SecureUtil.getTenantId(), year, currentYear);
 		for (JSONObject obj : list) {
 
-			BigDecimal cost = obj.getBigDecimal("cost").multiply(BigDecimal.valueOf(0.0001).setScale(4, RoundingMode.HALF_UP));
+			BigDecimal cost = obj.getBigDecimal("cost").multiply(BigDecimal.valueOf(0.0001).setScale(2, RoundingMode.HALF_UP));
 			obj.put("cost", cost);
 
 			List<JSONObject> XMYSZEMX = JSONObject.parseArray(obj.getString("XMYSZEMX"), JSONObject.class);
 
-			BigDecimal total = BigDecimal.ZERO;
+			BigDecimal total = BigDecimal.valueOf(0.00);
 			if (currentYear) {
-				total = XMYSZEMX.stream().filter(t -> Func.equals(t.getString("year"), year)).map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.UP);
+				total = XMYSZEMX.stream().filter(t -> Func.equals(t.getString("year"), year)).map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.valueOf(0.00), BigDecimal::add).setScale(4, RoundingMode.UP);
 			} else {
-				total = XMYSZEMX.stream().map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.UP);
+				total = XMYSZEMX.stream().map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.valueOf(0.00), BigDecimal::add).setScale(4, RoundingMode.UP);
 			}
 			obj.remove("XMYSZEMX");
 			obj.put("xmys", total);

+ 10 - 10
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/SalaryExcel.java

@@ -38,33 +38,33 @@ public class SalaryExcel implements Serializable {
 	private BigDecimal averageMonthlySalary;
 
 	@ExcelProperty(index = 7, value = "养老保险单位部分(元)")
-	private BigDecimal pensionInsurance = BigDecimal.ZERO;
+	private BigDecimal pensionInsurance = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 8, value = "医疗保险单位部分(元)")
-	private BigDecimal medicalInsurance = BigDecimal.ZERO;
+	private BigDecimal medicalInsurance = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 9, value = "失业保险单位部分(元)")
-	private BigDecimal unemploymentInsurance = BigDecimal.ZERO;
+	private BigDecimal unemploymentInsurance = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 10, value = "工伤保险单位部分(元)")
-	private BigDecimal injuryInsurance = BigDecimal.ZERO;
+	private BigDecimal injuryInsurance = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 11, value = "生育保险单位部分(元)")
-	private BigDecimal maternityInsurance = BigDecimal.ZERO;
+	private BigDecimal maternityInsurance = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 13, value = "公积金单位部分(元)")
-	private BigDecimal providentFund = BigDecimal.ZERO;
+	private BigDecimal providentFund = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 14, value = "奖金(元)")
-	private BigDecimal bonus = BigDecimal.ZERO;
+	private BigDecimal bonus = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 15, value = "福利费(元)")
-	private BigDecimal benefit = BigDecimal.ZERO;
+	private BigDecimal benefit = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 16, value = "补充养老保险(元)")
-	private BigDecimal pensionInsuranceBc = BigDecimal.ZERO;
+	private BigDecimal pensionInsuranceBc = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(index = 17, value = "补充医疗保险(元)")
-	private BigDecimal medicalInsuranceBc = BigDecimal.ZERO;
+	private BigDecimal medicalInsuranceBc = BigDecimal.valueOf(0.00);
 
 }

+ 2 - 2
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/XmLeaseExcel.java

@@ -63,10 +63,10 @@ public class XmLeaseExcel implements Serializable {
 	private Double quantity = 0.00;
 
 	@ExcelProperty(value =  "单价(元)")
-	private BigDecimal unitPrice = BigDecimal.ZERO;
+	private BigDecimal unitPrice = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(value =  "总价(不含税)")
-	private BigDecimal amount = BigDecimal.ZERO;
+	private BigDecimal amount = BigDecimal.valueOf(0.00);
 
 	@ExcelProperty(value =  "备注")
 	private String remark;

+ 82 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/XmCqdtfyImportListener.java

@@ -0,0 +1,82 @@
+package org.sky.scientific.excel.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.sky.core.tool.utils.DateUtil;
+import org.sky.core.tool.utils.Func;
+import org.sky.scientific.excel.XmCqdtfyExcel;
+import org.sky.scientific.utils.ImportResult;
+import org.sky.scientific.utils.ValidationUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class XmCqdtfyImportListener extends BaseReadListener {
+
+	@Override
+	public void invoke(Map<Integer, String> map, AnalysisContext context) {
+		int rowIndex = context.readRowHolder().getRowIndex() + 1;
+
+		ImportResult<Object> result = convertAndValidate(map, rowIndex);
+		resultList.add(result);
+		if (result.isSuccess()) {
+			dataList.add(result.getData());
+			incrementSuccessCount();
+		} else {
+			incrementErrorCount();
+		}
+	}
+
+	private ImportResult<Object> convertAndValidate(Map<Integer, String> data, int rowIndex) {
+
+		List<String> errors = new ArrayList<>();
+
+		XmCqdtfyExcel excel = new XmCqdtfyExcel();
+		excel.setXh(data.get(0));
+		excel.setXmbh(data.get(1));
+		excel.setXmmc(data.get(2));
+		excel.setCtdtfybm(data.get(3));
+		excel.setCtdtfymc(data.get(4));
+		excel.setYt(data.get(5));
+		Date txksrq = ValidationUtils.safeParseDate(data.get(6), DateUtil.PATTERN_DATE);
+		if (txksrq != null) {
+			excel.setTxksrq(DateUtil.format(txksrq, DateUtil.PATTERN_DATE));
+		} else {
+			errors.add("摊销开始时间为空或格式错误,yyyy-MM-dd");
+		}
+		excel.setSysm(ValidationUtils.safeParseInteger(data.get(7)));
+		if (Func.isNull(excel.getSysm())) {
+			errors.add("使用寿命数据格式错误");
+		}
+		excel.setYsyys(ValidationUtils.safeParseInteger(data.get(8)));
+		if (Func.isNull(excel.getYsyys())) {
+			errors.add("已使用月数数据格式错误");
+		}
+		excel.setZcyz(ValidationUtils.safeParseBigDecimal(data.get(9)));
+		if (Func.isNull(excel.getZcyz())) {
+			errors.add("资产原值数据格式错误");
+		}
+		excel.setYtxe(ValidationUtils.safeParseBigDecimal(data.get(10)));
+		if (Func.isNull(excel.getYtxe())) {
+			errors.add("月摊销额数据格式错误");
+		}
+		excel.setSyzb(ValidationUtils.safeParseBigDecimal(data.get(11)));
+		if (Func.isNull(excel.getSyzb())) {
+			errors.add("使用占比数据格式错误");
+		}
+
+		excel.setZbyj(data.get(12));
+		excel.setFtyj(data.get(14));
+
+		errors.addAll(ValidationUtils.validate(excel));
+		if (!errors.isEmpty()) {
+			return ImportResult.error(rowIndex, errors, data.toString());
+		}
+		return ImportResult.success(rowIndex, excel);
+	}
+}

+ 2 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/A107_1Mapper.xml

@@ -4,7 +4,8 @@
 
     <select id="qyyjkfxmqk" resultType="org.sky.scientific.pojo.vo.A107_1VO">
         SELECT
-        xm.*, tmp.xm_stage,tmp.gov_bonus,
+        xm.*, tmp.xm_stage,
+        ifnull(tmp.gov_bonus,0.00),
         IFNULL((SELECT COUNT(DISTINCT unicode) FROM kd_xm_technician xt where xt.xm_id = xm.xm_id GROUP BY xt.year_and_month ORDER BY xt.year_and_month desc  limit 1),0) as technicianCount
         FROM
         (

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

@@ -1,6 +1,5 @@
 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;
@@ -22,7 +21,4 @@ public interface CgZlMapper extends BaseMapper<CgZlEntity> {
 
 	boolean physicalDeleteByIds(List<Long> ids);
 
-    JSONObject zlDashboard(String tenantId, String year);
-
-
 }

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

@@ -66,11 +66,4 @@
         </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>

+ 9 - 196
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianMapper.xml

@@ -226,6 +226,7 @@
         <result column="pension_insurance_bc" property="pensionInsuranceBc"/>
         <result column="medical_insurance_bc" property="medicalInsuranceBc"/>
     </resultMap>
+
     <select id="meiyueyanfarengongfeiyongfeifenpeibiao" resultMap="XmTechnicianSalaryVOMap" parameterType="org.sky.scientific.pojo.dto.XmTechnicianDto">
         select
             v.* ,
@@ -238,205 +239,17 @@
                   COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC) as XMMC
              from kd_xm temp
         ) xm on v.xm_id = xm.id
-        where v.tenant_id = #{ew.tenantId} and v.year_and_month = #{ew.yearAndMonth}
-    </select>
-
-<!--    <select id="meiyueyanfarengongfeiyongfeifenpeibiao" resultMap="XmTechnicianSalaryVOMap" parameterType="org.sky.scientific.pojo.dto.XmTechnicianDto">-->
-<!--        SELECT-->
-<!--            xm.id as xm_id,xm.XMBH,xm.XMMC,-->
-<!--            t.unicode,t.name, t.number,t.id_card, t.personnel_type,t.year_and_month,-->
-<!--            (SELECT IFNULL(SUM(work_hours),0) FROM kd_attendance_records WHERE unicode = m.unicode AND LEFT(work_date,6)= #{ew.yearAndMonth}) AS attendanceHours,-->
-<!--            (SELECT IFNULL(SUM(work_hours),0) FROM kd_xm_technician_hours WHERE xm_id = m.xm_id and unicode = m.unicode AND LEFT(work_date,6)=#{ew.yearAndMonth}) AS workHours,-->
-<!--            s.average_monthly_salary,-->
-<!--            s.pension_insurance,-->
-<!--            s.medical_insurance,-->
-<!--            s.unemployment_insurance,-->
-<!--            s.injury_insurance,-->
-<!--            s.maternity_insurance,-->
-<!--            s.provident_fund,-->
-<!--            s.bonus,-->
-<!--            s.benefit,-->
-<!--            s.pension_insurance_bc,-->
-<!--            s.medical_insurance_bc-->
-<!--        FROM kd_xm_technician m-->
-<!--        LEFT JOIN kd_technician t on t.unicode = m.unicode and t.year_and_month = #{ew.yearAndMonth}-->
-<!--        LEFT JOIN kd_salary s on s.unicode = m.unicode and s.year_and_month = #{ew.yearAndMonth}-->
-<!--        LEFT JOIN (-->
-<!--            SELECT temp.id, XMBH,-->
-<!--                COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC ) AS XMMC-->
-<!--            FROM kd_xm as  temp-->
-<!--        ) xm ON m.xm_id = xm.id-->
-<!--        WHERE m.tenant_id = #{ew.tenantId} and m.year_and_month = #{ew.yearAndMonth}-->
-<!--        <if test="ew.xmId!=null">and xm.id = #{ew.xmId}</if>-->
-<!--        <if test="ew.xmmc!=null and ew.xmmc!=''">and xm.XMMC like concat('%',#{ew.xmmc},'%')</if>-->
-<!--        <if test="ew.name!=null and ew.name!=''">and t.name like concat('%', #{ew.name},'%')</if>-->
-<!--        <if test="ew.number!=null and ew.number!=''">and t.number like concat('%',#{ew.number}, '%')</if>-->
-<!--        <if test="ew.idCard!=null and ew.idCard!=''">and t.id_card like concat('%', #{ew.idCard}, '%')</if>-->
-<!--        <if test="ew.personnelType!=null and ew.personnelType!=''">and t.personnel_type = #{ew.personnelType}</if>-->
-<!--        order by m.xm_id, m.unicode-->
-<!--    </select>-->
-
-    <select id="meiyueyanfarengongfeiyongfeifenpeibiaoYear"
-            resultMap="XmTechnicianSalaryVOMap">
-        SELECT
-            m.xm_id,xm.XMBH,xm.XMMC,
-            m.unicode,t.name, t.number,t.id_card, t.personnel_type
-        FROM kd_xm_technician m
-        LEFT JOIN
-        (
-            select
-                unicode,name,number,id_card,personnel_type,year_and_month
-            from kd_technician temp
-            where temp.unicode = unicode and year_and_month = (select max(year_and_month) from kd_technician where unicode = temp.unicode and left(year_and_month,4) = #{ew.yearAndMonth} order by year_and_month desc limit 1)
-        ) as t on t.unicode = m.unicode
-        LEFT JOIN (
-            SELECT
-                temp.id, XMBH,
-                COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC ) AS XMMC
-            FROM kd_xm temp
-        ) xm ON m.xm_id = xm.id
-        WHERE m.tenant_id = #{ew.tenantId} and LEFT(m.year_and_month,4) = #{ew.yearAndMonth}
+        where v.tenant_id = #{ew.tenantId}
+        <if test="ew.yearAndMonth.length()==6">and v.year_and_month = #{ew.yearAndMonth}</if>
+        <if test="ew.yearAndMonth.length()==4">and left(v.year_and_month,4) = #{ew.yearAndMonth}</if>
         <if test="ew.xmmc!=null and ew.xmmc!=''">and xm.XMMC like concat('%',#{ew.xmmc},'%')</if>
-        <if test="ew.name!=null and ew.name!=''">and t.name like concat('%', #{ew.name},'%')</if>
-        <if test="ew.number!=null and ew.number!=''">and t.number like concat('%',#{ew.number}, '%')</if>
-        <if test="ew.idCard!=null and ew.idCard!=''">and t.id_card like concat('%', #{ew.idCard}, '%')</if>
-        <if test="ew.personnelType!=null and ew.personnelType!=''">and t.personnel_type = #{ew.personnelType}</if>
-        GROUP BY m.xm_id, m.unicode
-        order by m.xm_id, m.unicode
+        <if test="ew.name!=null and ew.name!=''">and v.name like concat('%', #{ew.name},'%')</if>
+        <if test="ew.number!=null and ew.number!=''">and v.number like concat('%',#{ew.number}, '%')</if>
+        <if test="ew.idCard!=null and ew.idCard!=''">and v.id_card like concat('%', #{ew.idCard}, '%')</if>
+        <if test="ew.personnelType!=null and ew.personnelType!=''">and v.personnel_type = #{ew.personnelType}</if>
+        order by v.xm_id asc, v.unicode asc, v.year_and_month asc
     </select>
 
-<!--    <select id="meiyueyanfarengongfeiyongfeifenpeibiaoYear"-->
-<!--            resultMap="XmTechnicianSalaryVOMap">-->
-<!--        SELECT-->
-<!--            m.xm_id,xm.XMBH,xm.XMMC,-->
-<!--            m.unicode,t.name, t.number,t.id_card, t.personnel_type,t.year_and_month,-->
-<!--            (SELECT IFNULL(SUM(work_hours),0) FROM kd_attendance_records kar WHERE kar.unicode= m.unicode AND LEFT ( work_date, 4 ) = LEFT(m.year_and_month,4)) AS attendanceHours,-->
-<!--            (SELECT IFNULL(SUM(work_hours),0) FROM kd_xm_technician_hours kxth WHERE kxth.xm_id = m.xm_id AND kxth.unicode = m.unicode AND LEFT ( work_date, 4 ) = LEFT(m.year_and_month,4)) AS workHours,-->
-<!--            (SELECT IFNULL( sum( s.average_monthly_salary ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS average_monthly_salary,-->
-<!--            (SELECT IFNULL( sum( s.pension_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS pension_insurance,-->
-<!--            (SELECT IFNULL( sum( s.medical_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS medical_insurance,-->
-<!--            (SELECT IFNULL( sum( s.unemployment_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS unemployment_insurance,-->
-<!--            (SELECT IFNULL( sum( s.injury_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS injury_insurance,-->
-<!--            (SELECT IFNULL( sum( s.maternity_insurance ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS maternity_insurance,-->
-<!--            (SELECT IFNULL( sum( s.provident_fund ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS provident_fund,-->
-<!--            (SELECT IFNULL( sum( s.bonus ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS bonus,-->
-<!--            (SELECT IFNULL( sum( s.benefit ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS benefit,-->
-<!--            (SELECT IFNULL( sum( s.pension_insurance_bc ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS pension_insurance_bc,-->
-<!--            (SELECT IFNULL( sum( s.medical_insurance_bc ), 0 ) FROM kd_salary s WHERE s.unicode = m.unicode AND LEFT ( s.year_and_month, 4 ) = LEFT(m.year_and_month,4)) AS medical_insurance_bc-->
-<!--        FROM kd_xm_technician m-->
-<!--        LEFT JOIN-->
-<!--        (-->
-<!--            select unicode,name,number,id_card,personnel_type,year_and_month-->
-<!--            from kd_technician temp-->
-<!--            where temp.unicode = unicode and year_and_month = (select max(year_and_month) from kd_technician where unicode = temp.unicode and left(year_and_month,4) = #{ew.yearAndMonth} order by year_and_month desc limit 1)-->
-<!--        ) as t on t.unicode = m.unicode-->
-<!--        LEFT JOIN (-->
-<!--            SELECT temp.id, XMBH,-->
-<!--                COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC ) AS XMMC-->
-<!--            FROM kd_xm temp-->
-<!--        ) xm ON m.xm_id = xm.id-->
-<!--        WHERE m.tenant_id = #{ew.tenantId} and LEFT(m.year_and_month,4) = #{ew.yearAndMonth}-->
-<!--        <if test="ew.xmmc!=null and ew.xmmc!=''">and xm.XMMC like concat('%',#{ew.xmmc},'%')</if>-->
-<!--        <if test="ew.name!=null and ew.name!=''">and t.name like concat('%', #{ew.name},'%')</if>-->
-<!--        <if test="ew.number!=null and ew.number!=''">and t.number like concat('%',#{ew.number}, '%')</if>-->
-<!--        <if test="ew.idCard!=null and ew.idCard!=''">and t.id_card like concat('%', #{ew.idCard}, '%')</if>-->
-<!--        <if test="ew.personnelType!=null and ew.personnelType!=''">and t.personnel_type = #{ew.personnelType}</if>-->
-<!--        GROUP BY m.xm_id, m.unicode-->
-<!--        order by m.xm_id, m.unicode-->
-<!--    </select>-->
-
-<!--    <select id="meiyueyanfaxiangmurengongfenpeihuizongbiao" resultType="org.sky.scientific.pojo.vo.XmSalaryVO">-->
-<!--        SELECT-->
-<!--            t.xm_id,-->
-<!--            m.xmbh,-->
-<!--            m.xmmc,-->
-<!--            &#45;&#45; 工资薪金总和(每个人的工资×研发占比)-->
-<!--            ROUND(SUM(COALESCE(s.average_monthly_salary, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS averageMonthlySalary,-->
-<!--            &#45;&#45; 社保总和(每个人的社保×研发占比)-->
-<!--            ROUND(SUM((COALESCE(s.pension_insurance, 0) + COALESCE(s.medical_insurance, 0) + COALESCE(s.unemployment_insurance, 0) + COALESCE(s.injury_insurance, 0) + COALESCE(s.maternity_insurance, 0)) * COALESCE(rd_ratio.ratio, 0)), 2) AS totalInsurance,-->
-<!--            &#45;&#45; 公积金总和(每个人的公积金×研发占比)-->
-<!--            ROUND(SUM(COALESCE(s.provident_fund, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS providentFund,-->
-<!--            &#45;&#45; 奖金总和(每个人的公积金×研发占比)-->
-<!--            ROUND(SUM(COALESCE(s.bonus, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS bonus,-->
-<!--            &#45;&#45; 福利费总和(每个人的福利费×研发占比)-->
-<!--            ROUND(SUM(COALESCE(s.benefit, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS benefit,-->
-<!--            &#45;&#45; 补充养老保险总和(每个人的补充养老保险×研发占比)-->
-<!--            ROUND(SUM(COALESCE(s.pension_insurance_bc, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS pensionInsuranceBc,-->
-<!--            &#45;&#45; 补充医疗保险总和(每个人的补充医疗保险×研发占比)-->
-<!--            ROUND(SUM(COALESCE(s.medical_insurance_bc, 0) * COALESCE(rd_ratio.ratio, 0)), 2) AS medicalInsuranceBc-->
-<!--        FROM kd_xm_technician t-->
-<!--        &#45;&#45; 计算研发占比的子查询-->
-<!--        INNER JOIN (-->
-<!--            SELECT-->
-<!--                rd.tenant_id,rd.unicode,rd.work_year_month,rd.xm_id,-->
-<!--            &#45;&#45; 研发占比 = 研发工时 / 考勤工时-->
-<!--                CASE WHEN COALESCE(att.attendance_hours, 0) > 0 THEN LEAST(rd.rd_hours / att.attendance_hours, 1.0) ELSE 0 END AS ratio,-->
-<!--                rd.rd_hours,att.attendance_hours-->
-<!--            FROM (-->
-<!--                &#45;&#45; 计算每个人的研发工时-->
-<!--                SELECT-->
-<!--                    tenant_id,unicode,LEFT(work_date, 6) AS work_year_month, xm_id,SUM(work_hours) AS rd_hours-->
-<!--                FROM kd_xm_technician_hours-->
-<!--                GROUP BY tenant_id, unicode, LEFT(work_date, 6), xm_id-->
-<!--            ) rd-->
-<!--            LEFT JOIN (-->
-<!--                &#45;&#45; 计算每个人的考勤工时-->
-<!--                SELECT-->
-<!--                    tenant_id, unicode,LEFT(work_date, 6) AS work_year_month, SUM(work_hours) AS attendance_hours-->
-<!--                FROM kd_attendance_records-->
-<!--                GROUP BY tenant_id, unicode, LEFT(work_date, 6)-->
-<!--            ) att ON rd.tenant_id = att.tenant_id AND rd.unicode = att.unicode AND rd.work_year_month = att.work_year_month-->
-<!--        ) rd_ratio ON t.tenant_id = rd_ratio.tenant_id AND t.unicode = rd_ratio.unicode AND t.year_and_month = rd_ratio.work_year_month AND t.xm_id = rd_ratio.xm_id-->
-
-<!--        &#45;&#45; 关联工资数据-->
-<!--        LEFT JOIN kd_salary s ON t.tenant_id = s.tenant_id AND t.unicode = s.unicode AND t.year_and_month = s.year_and_month-->
-
-<!--        left join-->
-<!--        (-->
-<!--            select-->
-<!--                temp.id, XMBH ,-->
-<!--                COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC) as XMMC from kd_xm temp-->
-<!--        ) m on m.id = t.xm_id-->
-<!--        WHERE t.tenant_id = #{ew.tenantId} and t.year_and_month = #{ew.yearAndMonth}-->
-<!--        <if test="ew.xmmc!=null and ew.xmmc!=''">and m.XMMC like concat('%',#{ew.xmmc},'%')</if>-->
-<!--        GROUP BY t.xm_id-->
-<!--    </select>-->
-
-
-
-<!--    <select id="meiyueyanfaxiangmurengongfenpeihuizongbiaoByYear" resultType="org.sky.scientific.pojo.vo.XmSalaryVO">-->
-<!--        SELECT-->
-<!--        xm.xm_id,m.XMBH,m.XMMC,-->
-<!--        xm.year_and_month,-->
-<!--        (SELECT IFNULL(SUM(work_hours),0) FROM kd_attendance_records r WHERE r.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and LEFT(tmp.year_and_month,4) = #{ew.yearAndMonth}) and LEFT(work_date,4)= #{ew.yearAndMonth}) AS attendanceHours,-->
-<!--        (SELECT IFNULL(SUM(work_hours),0) FROM kd_xm_technician_hours kxth WHERE kxth.xm_id = xm.xm_id AND LEFT(work_date,4)= #{ew.yearAndMonth})AS workHours,-->
-<!--        (SELECT IFNULL(sum(s.average_monthly_salary),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS average_monthly_salary,-->
-<!--        (SELECT IFNULL(sum(s.pension_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS pension_insurance,-->
-<!--        (SELECT IFNULL(sum(s.medical_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS medical_insurance,-->
-
-<!--        (SELECT IFNULL(sum(s.unemployment_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS unemployment_insurance,-->
-
-<!--        (SELECT IFNULL(sum(s.injury_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS injury_insurance,-->
-
-<!--        (SELECT IFNULL(sum(s.maternity_insurance),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left( s.year_and_month,4) = #{ew.yearAndMonth}) AS maternity_insurance,-->
-
-<!--        (SELECT IFNULL(sum(s.provident_fund),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS provident_fund,-->
-<!--        (SELECT IFNULL(sum(s.bonus),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS bonus,-->
-<!--        (SELECT IFNULL(sum(s.benefit),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS benefit,-->
-<!--        (SELECT IFNULL(sum(s.pension_insurance_bc),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS pension_insurance_bc,-->
-<!--        (SELECT IFNULL(sum(s.medical_insurance_bc),0) FROM kd_salary s WHERE s.unicode in (select distinct (tmp.unicode) from kd_xm_technician tmp WHERE tmp.xm_id = xm.xm_id and left(tmp.year_and_month,4) = #{ew.yearAndMonth}) AND left(s.year_and_month,4) = #{ew.yearAndMonth}) AS medical_insurance_bc-->
-<!--        FROM kd_xm_technician xm-->
-<!--        LEFT JOIN (-->
-<!--            SELECT-->
-<!--                temp.id, XMBH,-->
-<!--                COALESCE(get_xm_info(temp.id, 'XMMC', #{ew.yearAndMonth}), temp.XMMC ) AS XMMC-->
-<!--            FROM kd_xm as  temp-->
-<!--        ) m ON m.id = xm.xm_id-->
-<!--        WHERE xm.tenant_id = #{ew.tenantId} and LEFT(xm.year_and_month,4) = #{ew.yearAndMonth}-->
-<!--        <if test="ew.xmmc!=null and ew.xmmc!=''">and m.XMMC like concat('%',#{ew.xmmc},'%')</if>-->
-<!--        GROUP BY xm.xm_id-->
-<!--    </select>-->
-
     <select id="meiyueyanfaxiangmurengongfenpeihuizongbiao" resultType="org.sky.scientific.pojo.vo.XmSalaryVO">
         SELECT
             v.xm_id,m.XMBH,m.XMMC,v.year_and_month,

+ 1 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmWwxmCostMapper.xml

@@ -78,7 +78,7 @@
     </select>
 
     <select id="getAmountByXmAndYear">
-        SELECT IFNULL(sum(pay_amount),0)
+        SELECT IFNULL(sum(pay_amount),0.00)
         FROM kd_xm_wwxm_cost c
                  LEFT JOIN kd_xm_wwxm w on w.id = c.ww_id
         WHERE LEFT(c.year_and_month,4) = #{year} and w.XM_ID = #{xmId} and w.STFLX in ('境内研究机构','境内高等学校','境内企业','境内个人','境外机构')

+ 11 - 11
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AssetServiceImpl.java

@@ -312,16 +312,16 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 		//设置list集合数据
 		excelWriter.fill(list, fillConfig, writeSheet);
 		Map<String, Object> map = new HashMap<>();
-		map.put("ryrgfySum", list.stream().map(CostSummaryVO::getRyrgfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("zjtrfySum", list.stream().map(CostSummaryVO::getZjtrfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("zjfyycqdtfySum", list.stream().map(CostSummaryVO::getZjfyycqdtfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("sjfySum", list.stream().map(CostSummaryVO::getSjfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("wxzctxfySum", list.stream().map(CostSummaryVO::getWxzctxfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("zbtsfyysyfySum", list.stream().map(CostSummaryVO::getZbtsfyysyfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("qtfySum", list.stream().map(CostSummaryVO::getQtfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("wwfySum", list.stream().map(CostSummaryVO::getWwfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("wwfyAdjustSum", list.stream().map(CostSummaryVO::getWwfyAdjust).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("totalSum", list.stream().map(CostSummaryVO::getTotal).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("ryrgfySum", list.stream().map(CostSummaryVO::getRyrgfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("zjtrfySum", list.stream().map(CostSummaryVO::getZjtrfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("zjfyycqdtfySum", list.stream().map(CostSummaryVO::getZjfyycqdtfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("sjfySum", list.stream().map(CostSummaryVO::getSjfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("wxzctxfySum", list.stream().map(CostSummaryVO::getWxzctxfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("zbtsfyysyfySum", list.stream().map(CostSummaryVO::getZbtsfyysyfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("qtfySum", list.stream().map(CostSummaryVO::getQtfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("wwfySum", list.stream().map(CostSummaryVO::getWwfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("wwfyAdjustSum", list.stream().map(CostSummaryVO::getWwfyAdjust).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("totalSum", list.stream().map(CostSummaryVO::getTotal).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
 		map.put("year", dto.getYearAndMonth().substring(0, 4));
 		map.put("month", dto.getYearAndMonth().substring(4));
 		excelWriter.fill(map, writeSheet);
@@ -502,7 +502,7 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 
 		String yearAndMonth = dto.getYearAndMonth();
 		map.put("yearAndMonth", yearAndMonth.length() == 6 ? yearAndMonth.substring(0, 4) + "年" + yearAndMonth.substring(4) + "月" : yearAndMonth + "年");
-		map.put("yqsbzjfySum", list.stream().map(XmAssetCostSummary::getYqsbzjfy).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("yqsbzjfySum", list.stream().map(XmAssetCostSummary::getYqsbzjfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
 		map.put("fwzjfySum", list.stream().map(XmAssetCostSummary::getFwzjfy).reduce(BigDecimal.ZERO, BigDecimal::add));
 		map.put("cqdtfySum", list.stream().map(XmAssetCostSummary::getCqdtfy).reduce(BigDecimal.ZERO, BigDecimal::add));
 		map.put("wxzcdtfySum", list.stream().map(XmAssetCostSummary::getWxzcdtfy).reduce(BigDecimal.ZERO, BigDecimal::add));

+ 53 - 7
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/CgZlServiceImpl.java

@@ -10,7 +10,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import jakarta.annotation.Resource;
+import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.mp.base.BaseServiceImpl;
@@ -18,9 +18,8 @@ import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.utils.*;
 import org.sky.scientific.excel.CgZlExcel;
 import org.sky.scientific.excel.listener.CgZlImportListener;
-import org.sky.scientific.mapper.CgZlMapper;
-import org.sky.scientific.mapper.XmMapper;
-import org.sky.scientific.pojo.entity.CgZlEntity;
+import org.sky.scientific.mapper.*;
+import org.sky.scientific.pojo.entity.*;
 import org.sky.scientific.service.ICgZlService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -41,10 +40,15 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @since 2025-06-29
  */
 @Service
+@AllArgsConstructor
 public class CgZlServiceImpl extends BaseServiceImpl<CgZlMapper, CgZlEntity> implements ICgZlService {
 
-	@Resource
-	private XmMapper xmMapper;
+	private final XmMapper xmMapper;
+	private final CgRjzzqMapper rjzzqMapper;
+	private final CgJsbzMapper jsbzMapper;
+	private final CgKylwMapper kylwMapper;
+	private final CgQtMapper qtMapper;
+
 
 	@Override
 	public IPage<CgZlEntity> selectPageByCondition(IPage<CgZlEntity> page, CgZlEntity cgZl) {
@@ -148,7 +152,49 @@ public class CgZlServiceImpl extends BaseServiceImpl<CgZlMapper, CgZlEntity> imp
 
 	@Override
 	public JSONObject zlDashboard(String tenantId, String year) {
-		return baseMapper.zlDashboard(tenantId, year);
+//		总数= 专利数+软著数+标准数+论文数+其他数量
+//		专利数= 专利申请中数+专利授权有效数+已失效数(申请中,包括表示还在进行中,未授权)
+//		软著数=申请数=授权数
+//		技术标准数=尚未发布数(申请中)+现行有效数(已授权)+废止数
+//		标准数=申请数=授权数
+//		其他成果数=申请数=授权数
+
+		JSONObject result = new JSONObject();
+
+		long total = 0, shenqingshu = 0, shouquanshu = 0;
+  		List<CgZlEntity> zlList = baseMapper.selectList(Wrappers.emptyWrapper());
+		long zl = zlList.stream().filter(temp -> Func.equals(DateUtil.format(temp.getShenqingRq(), DateUtil.PATTERN_YYYY), year) || Func.equals(DateUtil.format(temp.getShouquanRq(), DateUtil.PATTERN_YYYY), year)).count();
+		total += zl;
+
+		shenqingshu += zlList.stream().filter(temp ->  temp.getShenqingRq()!=null && Func.equals(DateUtil.format(temp.getShenqingRq(), DateUtil.PATTERN_YYYY), year)).count();
+		shouquanshu += zlList.stream().filter(temp -> temp.getShouquanRq()!=null && Func.equals(DateUtil.format(temp.getShouquanRq(), DateUtil.PATTERN_YYYY), year)).count();
+
+		long rjzzq = rjzzqMapper.selectCount(Wrappers.<CgRjzzqEntity>lambdaQuery().apply("DATE_FORMAT(DJPZRQ,'%Y') = {0}", year));
+		total += rjzzq;
+		shenqingshu += rjzzq;
+		shouquanshu += rjzzq;
+
+		long jsbz = jsbzMapper.selectCount(Wrappers.<CgJsbzEntity>lambdaQuery().apply("DATE_FORMAT(SSRQ,'%Y') = {0}", year));
+		total += jsbz;
+		shenqingshu += jsbz;
+		shouquanshu += jsbz;
+
+		long kylw = kylwMapper.selectCount(Wrappers.<CgKylwEntity>lambdaQuery().apply("DATE_FORMAT(FBRQ,'%Y') = {0}", year));
+		total += kylw;
+		shenqingshu += kylw;
+		shouquanshu += kylw;
+
+		List<CgQtEntity> qtEntityList = qtMapper.selectList(Wrappers.emptyWrapper());
+		long qt = qtEntityList.stream().filter(temp -> Func.equals(DateUtil.format(temp.getShenqingRq(), DateUtil.PATTERN_YYYY), year) || Func.equals(DateUtil.format(temp.getShouquanRq(), DateUtil.PATTERN_YYYY), year)).count();
+		total += qt;
+		shenqingshu += qt;
+		shouquanshu += qt;
+
+		result.put("total", total);
+		result.put("shenqingshu", shenqingshu);
+		result.put("shouquanshu", shouquanshu);
+
+		return result;
 	}
 
 }

+ 18 - 12
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/EnterpriseInfoServiceImpl.java

@@ -32,6 +32,7 @@ import org.sky.scientific.pojo.vo.*;
 import org.sky.scientific.service.IEnterpriseInfoService;
 import org.sky.scientific.service.IXmCostDetailsService;
 import org.sky.scientific.utils.TemplateService;
+import org.sky.system.cache.DictCache;
 import org.sky.system.cache.RegionCache;
 import org.sky.system.feign.ISysClient;
 import org.sky.system.pojo.entity.Region;
@@ -186,20 +187,20 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 				//对应研发项目的受托方类型的前5项的委外金额合计
 				vo.setWwfy(wwxmCostMapper.getAmountByXmAndYear(year, vo.getXmId()));
 			} else {
-				vo.setWwfy(BigDecimal.ZERO);
+				vo.setWwfy(new BigDecimal("0.00"));
 			}
 
 			XmCostDetailsDTO dto = new XmCostDetailsDTO();
 			dto.setXmId(vo.getXmId());
 			dto.setYearAndMonth(year + "12");
 			List<FinanceCostSummary> summaryList = xmCostDetailsService.financeCostSummary(Condition.getPage(new Query().setCurrent(1).setSize(1)), dto).getRecords();
-			if (Func.isEmpty(summaryList)) {
-				vo.setCost(BigDecimal.ZERO);
-				vo.setCost1(BigDecimal.ZERO);
+			FinanceCostSummary summary = null;
+			if (Func.isEmpty(summaryList) || ((summary=summaryList.get(0)).getTotal()) == null) {
+				vo.setCost(new BigDecimal("0.00"));
+				vo.setCost1(new BigDecimal("0.00"));
 			} else {
-				FinanceCostSummary summary = summaryList.get(0);
-				vo.setCost(summary.getTotal());
-				vo.setCost1(summary.getTotal());
+				vo.setCost(summary.getTotal().multiply(BigDecimal.valueOf(0.001)).setScale(2, RoundingMode.UP));
+				vo.setCost1(summary.getTotal().multiply(BigDecimal.valueOf(0.001)).setScale(2, RoundingMode.UP));
 			}
 			//其中:企业自主开展=用于科学原理的探索发现的经费总额-委托外单位开展
 			vo.setCost2(vo.getCost1().subtract(vo.getWwfy()));
@@ -448,6 +449,12 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		if (Func.isNotEmpty(technicianVOList)) {
 			d1 = technicianVOList.size();
 			d3 = (int) technicianVOList.stream().filter(item -> item.getGender() == 2).count();
+			String workdayNumber = DictCache.getValue("workday_number", year);
+			if(Func.isBlank(workdayNumber)){
+				workdayNumber = "248";
+			}
+			String finalWorkdayNumber = workdayNumber;
+			d4 = (int) technicianVOList.stream().filter(item -> item.getWorkDaysByYear()/Double.parseDouble(finalWorkdayNumber)>1.027).count();
 			d5 = (int) technicianVOList.stream().filter(item -> List.of("本科", "硕士研究生", "博士研究生").contains(item.getEducation())).count();
 		}
 		vo.setD1(d1);
@@ -624,9 +631,9 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 
 		//三、年度研发费用小计(2+36×80%+38)
 		//(一)本年费用化金额
-		vo.setD41(Func.isNull(summary) ? BigDecimal.ZERO : summary.getTotal_fyh());
+		vo.setD41(Func.isNull(summary) ? BigDecimal.ZERO : summary.getYxjjkcjehj_fyh());
 		//(二)本年资本化金额
-		vo.setD42(Func.isNull(summary) ? BigDecimal.ZERO : summary.getTotal_zbh());
+		vo.setD42(Func.isNull(summary) ? BigDecimal.ZERO : summary.getYxjjkcjehj_zbh());
 
 		//一、自主研发、合作研发、集中研发(3+7+16+19+23+34)
 		vo.setD2(vo.getD3().add(vo.getD7()).add(vo.getD16()).add(vo.getD19()).add(vo.getD23()).add(vo.getD34()));
@@ -733,7 +740,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		vo.setD9(d9);
 		vo.setD7(vo.getD6().subtract(vo.getD9()));
 
-		vo.setD10(vo.getD7().doubleValue() == 0 ? BigDecimal.ZERO : vo.getD4().divide(vo.getD7(), 4, RoundingMode.HALF_UP));
+		vo.setD10(vo.getD7().doubleValue() == 0 ? BigDecimal.ZERO : vo.getD4().divide(vo.getD7(), 2, RoundingMode.HALF_UP));
 
 		//四、本年科技人员数
 		IPage<TechnicianVO> page = Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE));
@@ -961,7 +968,6 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		}
 		Date dateMin = DateUtil.parse(year + "-01-01", DateUtil.PATTERN_DATE);
 		Date dateMax = DateUtil.parse(year + "-12-31", DateUtil.PATTERN_DATE);
-//		List<CgZlEntity> zlList = zlMapper.selectList(Wrappers.<CgZlEntity>lambdaQuery().between(CgZlEntity::getShouquanRq, dateMin, dateMax));
 		List<CgZlEntity> zlList = zlMapper.selectList(Wrappers.<CgZlEntity>lambdaQuery().apply("DATE_FORMAT(SHOUQUAN_RQ,'%Y') = {0}", year));
 		int d2 = 0, d3 = 0, d9 = 0, d10 = 0;
 		if (Func.isNotEmpty(zlList)) {
@@ -994,7 +1000,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		Long count = rjzzqMapper.countByYear(year, SecureUtil.getTenantId());
 		vo.setD11(count.intValue());
 
-		vo.setD1(vo.getD2() - vo.getD3() + vo.getD4() + vo.getD5() + vo.getD6() + vo.getD7() + vo.getD8() + vo.getD9() + vo.getD10() + vo.getD11());
+		vo.setD1(vo.getD2() + vo.getD4() + vo.getD5() + vo.getD6() + vo.getD7() + vo.getD8() + vo.getD9() + vo.getD10() + vo.getD11() - vo.getD3());
 
 		Query query = new Query();
 		query.setCurrent(1);

+ 9 - 9
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/SalaryServiceImpl.java

@@ -69,33 +69,33 @@ public class SalaryServiceImpl extends BaseServiceImpl<SalaryMapper, SalaryEntit
 		list.forEach(temp -> {
 			temp.setXh(i.getAndIncrement() + "");
 			if (Func.isNull(temp.getAverageMonthlySalary())) {
-				temp.setAverageMonthlySalary(BigDecimal.ZERO);
+				temp.setAverageMonthlySalary(BigDecimal.valueOf(0.00));
 			}
 			if (Func.isNull(temp.getPensionInsurance())) {
-				temp.setPensionInsurance(BigDecimal.ZERO);
+				temp.setPensionInsurance(BigDecimal.valueOf(0.00));
 			}
 			if (Func.isNull(temp.getMedicalInsurance())) {
-				temp.setMedicalInsurance(BigDecimal.ZERO);
+				temp.setMedicalInsurance(BigDecimal.valueOf(0.00));
 			}
 			if (Func.isNull(temp.getUnemploymentInsurance())) {
-				temp.setUnemploymentInsurance(BigDecimal.ZERO);
+				temp.setUnemploymentInsurance(BigDecimal.valueOf(0.00));
 			}
 			if (Func.isNull(temp.getInjuryInsurance())) {
-				temp.setInjuryInsurance(BigDecimal.ZERO);
+				temp.setInjuryInsurance(BigDecimal.valueOf(0.00));
 			}
 			if (Func.isNull(temp.getMaternityInsurance())) {
-				temp.setMaternityInsurance(BigDecimal.ZERO);
+				temp.setMaternityInsurance(BigDecimal.valueOf(0.00));
 			}
 			temp.setTotal(temp.getPensionInsurance().add(temp.getMedicalInsurance()).add(temp.getUnemploymentInsurance()).add(temp.getInjuryInsurance()).add(temp.getMaternityInsurance()));
 
 			if (Func.isNull(temp.getProvidentFund())) {
-				temp.setProvidentFund(BigDecimal.ZERO);
+				temp.setProvidentFund(BigDecimal.valueOf(0.00));
 			}
 			if (Func.isNull(temp.getBonus())) {
-				temp.setBonus(BigDecimal.ZERO);
+				temp.setBonus(BigDecimal.valueOf(0.00));
 			}
 			if (Func.isNull(temp.getBenefit())) {
-				temp.setBenefit(BigDecimal.ZERO);
+				temp.setBenefit(BigDecimal.valueOf(0.00));
 			}
 			if (Func.isNull(temp.getPensionInsuranceBc())) {
 				temp.setPensionInsuranceBc(BigDecimal.ZERO);

+ 6 - 67
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java

@@ -541,74 +541,13 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		if (StringUtil.isBlank(dto.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
-		dto.setTenantId(SecureUtil.getTenantId());
-		List<XmTechnicianSalaryVO> list = null;
-		if (dto.getYearAndMonth().length() == 6) {
-			list = xmTechnicianMapper.meiyueyanfarengongfeiyongfeifenpeibiao(page, dto);
-		} else if (dto.getYearAndMonth().length() == 4) {
-			list = xmTechnicianMapper.meiyueyanfarengongfeiyongfeifenpeibiaoYear(page, dto);
-
-//			String year = dto.getYearAndMonth();
-//			for (XmTechnicianSalaryVO vo : list) {
-//				//1.根据unicode、year查询考勤时长
-//				vo.setAttendanceHours(attendanceMapper.sumHoursByUnicodeAndYear(vo.getUnicode(), year));
-//				//2.根据xmId、unicode、yearAndMonth查询 工时
-//				vo.setWorkHours(hoursMapper.sumHoursByXmAndUnicodeAndYear(vo.getXmId(), vo.getUnicode(), year));
-//				//3.根据unicode、yearAndMonth查询工资数据
-//				List<SalaryEntity> salaryList = salaryMapper.selectList(Wrappers.<SalaryEntity>lambdaQuery().eq(SalaryEntity::getUnicode, vo.getUnicode()).apply("left(year_and_month,4)={0}", year));
-//				if (Func.isEmpty(salaryList)) {
-//					continue;
-//				}
-//				SalaryEntity salary = salaryList.get(0);
-//				//4. 第2/第1 * 第3的工资分项数据
-//				if (vo.getAttendanceHours() != 0) {
-//					vo.setYanfazhanbi(BigDecimal.valueOf(vo.getWorkHours() / vo.getAttendanceHours()));
-//				}
-//
-//				vo.setAverageMonthlySalary(salary.getAverageMonthlySalary());
-//				vo.setAverageMonthlySalaryRate(vo.getAverageMonthlySalary().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setPensionInsurance(salary.getPensionInsurance());
-//				vo.setPensionInsuranceRate(vo.getPensionInsurance().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setMedicalInsurance(salary.getMedicalInsurance());
-//				vo.setMedicalInsuranceRate(vo.getMedicalInsurance().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setUnemploymentInsurance(salary.getUnemploymentInsurance());
-//				vo.setUnemploymentInsuranceRate(vo.getUnemploymentInsurance().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setInjuryInsurance(salary.getInjuryInsurance());
-//				vo.setInjuryInsuranceRate(vo.getInjuryInsurance().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setMaternityInsurance(salary.getMaternityInsurance());
-//				vo.setMaternityInsuranceRate(vo.getMaternityInsurance().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setProvidentFund(salary.getProvidentFund());
-//				vo.setProvidentFundRate(vo.getProvidentFund().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setBonus(salary.getBonus());
-//				vo.setBonusRate(vo.getBonus().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setBenefit(salary.getBenefit());
-//				vo.setBenefitRate(vo.getBenefit().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setPensionInsuranceBc(salary.getPensionInsuranceBc());
-//				vo.setPensionInsuranceBcRate(vo.getPensionInsuranceBc().multiply(vo.getYanfazhanbi()));
-//
-//				vo.setMedicalInsuranceBc(salary.getMedicalInsuranceBc());
-//				vo.setMedicalInsuranceBcRate(vo.getMedicalInsuranceBc().multiply(vo.getYanfazhanbi()));
-//				//5.将第4点的结果累加
-//
-//				//社保合计
-//				vo.setTotalInsurance(vo.getInjuryInsurance().add(vo.getUnemploymentInsurance()).add(vo.getMaternityInsurance()).add(vo.getMedicalInsurance()).add(vo.getPensionInsurance()));
-//				//项目分配的社保合计
-//				vo.setTotalInsuranceRate(vo.getInjuryInsuranceRate().add(vo.getUnemploymentInsuranceRate()).add(vo.getMaternityInsuranceRate()).add(vo.getMedicalInsuranceRate()).add(vo.getPensionInsuranceRate()));
-//				//研发费用合计=研发项目分配的工资薪金 + 社保合计 + 公积金 + 奖金 + 福利费 + 补充养老保险 + 补充医疗保险
-//				vo.setTotal(vo.getAverageMonthlySalaryRate().add(vo.getTotalInsuranceRate()).add(vo.getProvidentFundRate()).add(vo.getBonusRate()).add(vo.getBenefit()).add(vo.getMedicalInsuranceBcRate()).add(vo.getPensionInsuranceBcRate()));
-//			}
-		} else {
+		if(dto.getYearAndMonth().length()!=6 && dto.getYearAndMonth().length()!=4){
 			throw new ServiceException("参数yearAndMonth格式错误,yyyyMM或yyyy");
 		}
+		dto.setTenantId(SecureUtil.getTenantId());
+
+		List<XmTechnicianSalaryVO> list = xmTechnicianMapper.meiyueyanfarengongfeiyongfeifenpeibiao(page, dto);
+
 		return page.setRecords(list);
 	}
 
@@ -620,7 +559,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		list.forEach(temp -> {
 			temp.setXh(index.getAndIncrement() + "");
 			//研发占比(%)
-			temp.setYanfazhanbi(((temp.getWorkHours() <= 0 || temp.getAttendanceHours() <= 0) ? BigDecimal.ZERO : BigDecimal.valueOf(temp.getWorkHours() / temp.getAttendanceHours())));
+			temp.setYanfazhanbi(((temp.getWorkHours() <= 0 || temp.getAttendanceHours() <= 0) ? BigDecimal.valueOf(0.00) : BigDecimal.valueOf(temp.getWorkHours() / temp.getAttendanceHours())));
 			//社保合计
 			temp.setTotalInsurance(temp.getPensionInsurance().add(temp.getMedicalInsurance()).add(temp.getUnemploymentInsurance()).add(temp.getInjuryInsurance()).add(temp.getMaternityInsurance()));
 			//小计=工资+社保合计+公积金+奖金+福利费+补充养老保险+补充医疗保险

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

@@ -206,7 +206,7 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		//设置list集合数据
 		excelWriter.fill(list, fillConfig, writeSheet);
 		Map<String, Object> map = new HashMap<>();
-		map.put("total", list.stream().filter(Objects::nonNull).map(XmCostDetailsEntity::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("total", list.stream().filter(Objects::nonNull).map(XmCostDetailsEntity::getAmount).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
 		String yearAndMonth = dto.getYearAndMonth();
 
 		map.put("yearAndMonth", (yearAndMonth.length() == 6) ? yearAndMonth.substring(0, 4) + "年" + yearAndMonth.substring(4) + "月" : yearAndMonth + "年");

+ 46 - 16
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCqdtfyServiceImpl.java

@@ -6,18 +6,19 @@ 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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
-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.tool.utils.BeanUtil;
 import org.sky.core.tool.utils.CollectionUtil;
 import org.sky.core.tool.utils.DateUtil;
+import org.sky.core.tool.utils.Func;
 import org.sky.core.tool.utils.StringUtil;
 import org.sky.scientific.excel.XmCqdtfyExcel;
+import org.sky.scientific.excel.listener.XmCqdtfyImportListener;
 import org.sky.scientific.mapper.XmCqdtfyMapper;
 import org.sky.scientific.mapper.XmMapper;
 import org.sky.scientific.pojo.dto.XmCqdtfyDTO;
@@ -28,6 +29,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.*;
@@ -50,6 +52,7 @@ public class XmCqdtfyServiceImpl extends BaseServiceImpl<XmCqdtfyMapper, XmCqdtf
 		return page.setRecords(baseMapper.selectPageByCondition(page, dto));
 	}
 
+	@SneakyThrows
 	@Override
 	@Transactional
 	public void importData(MultipartFile file, String yearAndMonth) {
@@ -57,34 +60,60 @@ public class XmCqdtfyServiceImpl extends BaseServiceImpl<XmCqdtfyMapper, XmCqdtf
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 
-		List<XmCqdtfyExcel> dataList = ExcelUtil.read(file, 0, 2, XmCqdtfyExcel.class);
-		if (CollectionUtil.isEmpty(dataList)) {
-			throw new ServiceException("导入数据为空");
-		}
+		XmCqdtfyImportListener listener = new XmCqdtfyImportListener();
+		EasyExcel.read(new BufferedInputStream(file.getInputStream()))
+			.registerReadListener(listener)
+			.sheet(0)
+			.headRowNumber(2) // 重要:设置表头行数(0-based)
+			.doRead();
+		List<Object> dataList = listener.getDataList();
 
 		List<XmCqdtfyEntity> insertList = new ArrayList<>();
-		for (XmCqdtfyExcel data : dataList) {
-			if (StringUtil.isBlank(data.getXmbh())) {
-				throw new ServiceException("序号[" + data.getXh() + "]的研发项目编号为空,请重新填写数据");
+		int batchCount = 20;
+		for (Object obj : dataList) {
+			XmCqdtfyExcel excel = (XmCqdtfyExcel) obj;
+			XmCqdtfyEntity entity = new XmCqdtfyEntity();
+			cn.hutool.core.bean.BeanUtil.copyProperties(excel, entity);
+			if (StringUtil.isBlank(excel.getXmbh())) {
+				throw new ServiceException("序号[" + excel.getXh() + "]的研发项目编号为空,请重新填写数据");
 			}
 			//根据项目编号查询xmId
-			Long xmId = xmMapper.getXmIdByXmmcOrXmbh(null, null, data.getXmbh());
+			Long xmId = xmMapper.getXmIdByXmmcOrXmbh(null, null, excel.getXmbh());
 			if (xmId == null) {
-				throw new ServiceException("序号[" + data.getXh() + "]的研发项目不存在,请检查模板数据");
+				throw new ServiceException("序号[" + excel.getXh() + "]的研发项目不存在,请检查模板数据");
 			}
-
-			XmCqdtfyEntity entity = Objects.requireNonNull(BeanUtil.copyProperties(data, XmCqdtfyEntity.class));
 			entity.setXmId(xmId);
 			entity.setYearAndMonth(yearAndMonth);
-
 			insertList.add(entity);
+			if (insertList.size() % batchCount == 0 && this.saveBatch(insertList)) {
+				insertList.clear();
+			}
+		}
+		if (!insertList.isEmpty()) {
+			this.saveBatch(insertList);
 		}
-
-		this.saveBatch(insertList);
 	}
 
 	@Override
 	public boolean submit(XmCqdtfyEntity entity) {
+		LambdaQueryWrapper<XmCqdtfyEntity> queryWrapper = Wrappers.<XmCqdtfyEntity>lambdaQuery()
+			.eq(XmCqdtfyEntity::getYearAndMonth, entity.getYearAndMonth())
+			.eq(XmCqdtfyEntity::getCtdtfymc, entity.getCtdtfymc());
+		List<XmCqdtfyEntity> list = baseMapper.selectList(queryWrapper);
+
+		if(entity.getId() == null){
+			//新增
+			if(Func.isNotEmpty(list)){
+				throw new ServiceException("长期待摊费用名称已存在");
+			}
+		}else {
+			//修改
+			if(Func.isNotEmpty(list) && !Func.equals(list.get(0).getId(), entity.getId())){
+				throw new ServiceException("长期待摊费用名称已存在");
+			}
+			//后续同 长期待摊费用名称的已使用月数 +1
+
+		}
 		return this.saveOrUpdate(entity);
 	}
 
@@ -112,6 +141,7 @@ public class XmCqdtfyServiceImpl extends BaseServiceImpl<XmCqdtfyMapper, XmCqdtf
 		List<XmCqdtfyEntity> insertList = new ArrayList<>();
 		for (XmCqdtfyEntity entity : lastMonthDataList) {
 			entity.setYearAndMonth(yearAndMonth);
+			entity.setYsyys(Math.min(entity.getYsyys() + 1, entity.getSysm()));
 			entity.setId(null);
 			entity.setCreateUser(null);
 			entity.setCreateDept(null);

+ 10 - 10
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmDirectCostServiceImpl.java

@@ -76,7 +76,7 @@ public class XmDirectCostServiceImpl extends BaseServiceImpl<XmDirectCostMapper,
 		excelWriter.fill(list, fillConfig, writeSheet);
 		Map<String, Object> map = new HashMap<>();
 
-		map.put("amountSum", list.stream().map(XmDirectCostEntity::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountSum", list.stream().map(XmDirectCostEntity::getAmount).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
 		excelWriter.fill(map, writeSheet);
 		excelWriter.finish();
 		if (templateFileName != null) {
@@ -190,15 +190,15 @@ public class XmDirectCostServiceImpl extends BaseServiceImpl<XmDirectCostMapper,
 		//设置list集合数据
 		excelWriter.fill(list, fillConfig, writeSheet);
 		Map<String, Object> map = new HashMap<>();
-		map.put("cailiaofySum", list.stream().map(XmDirectCostSummary::getCailiaofy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("ranliaofySum", list.stream().map(XmDirectCostSummary::getRanliaofy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("donglifySum", list.stream().map(XmDirectCostSummary::getDonglify).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("yiqishebeifySum", list.stream().map(XmDirectCostSummary::getYiqishebeify).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("fawuzulinfySum", list.stream().map(XmDirectCostSummary::getFawuzulinfy).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("fy6Sum", list.stream().map(XmDirectCostSummary::getFy6).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("fy7Sum", list.stream().map(XmDirectCostSummary::getFy7).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("fy8Sum", list.stream().map(XmDirectCostSummary::getFy8).reduce(BigDecimal.ZERO, BigDecimal::add));
-		map.put("totalSum", list.stream().map(XmDirectCostSummary::getTotal).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("cailiaofySum", list.stream().map(XmDirectCostSummary::getCailiaofy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("ranliaofySum", list.stream().map(XmDirectCostSummary::getRanliaofy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("donglifySum", list.stream().map(XmDirectCostSummary::getDonglify).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("yiqishebeifySum", list.stream().map(XmDirectCostSummary::getYiqishebeify).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("fawuzulinfySum", list.stream().map(XmDirectCostSummary::getFawuzulinfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("fy6Sum", list.stream().map(XmDirectCostSummary::getFy6).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("fy7Sum", list.stream().map(XmDirectCostSummary::getFy7).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("fy8Sum", list.stream().map(XmDirectCostSummary::getFy8).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		map.put("totalSum", list.stream().map(XmDirectCostSummary::getTotal).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
 
 		String yearAndMonth = dto.getYearAndMonth();
 		map.put("yearAndMonth", yearAndMonth.length() == 6 ? yearAndMonth.substring(0, 4) + "年" + yearAndMonth.substring(4) + "月" : yearAndMonth.substring(0, 4) + "年");

+ 2 - 2
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmFixedAssetServiceImpl.java

@@ -357,8 +357,8 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 			AssetEntity asset = temp.getAsset();
 			if (Func.isNull(asset)) {
 				asset = new AssetEntity();
-				asset.setZcyz(BigDecimal.ZERO);
-				asset.setYzje(BigDecimal.ZERO);
+				asset.setZcyz(BigDecimal.valueOf(0.00));
+				asset.setYzje(BigDecimal.valueOf(0.00));
 				asset.setZgs(0.0);
 			}
 			data.put("zcbm", asset.getZcbm());

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

@@ -68,7 +68,7 @@ public class XmGoodsServiceImpl extends BaseServiceImpl<XmGoodsMapper, XmGoodsEn
 			assert excel != null;
 			excel.setXh(index.getAndIncrement() + "");
 			if (excel.getUnitPrice() == null) {
-				excel.setUnitPrice(BigDecimal.ZERO);
+				excel.setUnitPrice(BigDecimal.valueOf(0.00));
 			}
 			if (excel.getUseQuantity() == null) {
 				excel.setUseQuantity(0.00);
@@ -249,7 +249,7 @@ public class XmGoodsServiceImpl extends BaseServiceImpl<XmGoodsMapper, XmGoodsEn
 				excel.setUseQuantity(0.0);
 			}
 			if (excel.getUnitPrice() == null) {
-				excel.setUnitPrice(BigDecimal.ZERO);
+				excel.setUnitPrice(BigDecimal.valueOf(0.00));
 			}
 			excel.setAmount(BigDecimal.valueOf(excel.getUseQuantity()).multiply(excel.getUnitPrice()));
 			results.add(excel);
@@ -266,7 +266,7 @@ public class XmGoodsServiceImpl extends BaseServiceImpl<XmGoodsMapper, XmGoodsEn
 		//设置list集合数据
 		excelWriter.fill(results, fillConfig, writeSheet);
 		Map<String, Object> map = new HashMap<>();
-		map.put("amountSum", results.stream().map(XmGoodsExcel::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountSum", results.stream().map(XmGoodsExcel::getAmount).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
 		map.put("useQuantitySum", results.stream().mapToDouble(XmGoodsExcel::getUseQuantity).sum());
 
 		map.put("xmbh", Func.isNotEmpty(results) ? results.get(0).getXmbh() : "");

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

@@ -78,7 +78,7 @@ public class XmLeaseServiceImpl extends BaseServiceImpl<XmLeaseMapper, XmLeaseEn
 			}
 
 			if(BigDecimal.ZERO.compareTo(entity.getUnitPrice()) == 0){
-				entity.setUnitPrice(BigDecimal.ZERO);
+				entity.setUnitPrice(BigDecimal.valueOf(0.00));
 			}
 			if(entity.getQuantity()==null){
 				entity.setQuantity(0.0);
@@ -117,7 +117,7 @@ public class XmLeaseServiceImpl extends BaseServiceImpl<XmLeaseMapper, XmLeaseEn
 		excelWriter.fill(results, fillConfig, writeSheet);
 		Map<String, Object> map = new HashMap<>();
 		map.put("quantitySum", results.stream().mapToDouble(XmLeaseExcel::getQuantity).sum());
-		map.put("amountSum", results.stream().map(XmLeaseExcel::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountSum", results.stream().map(XmLeaseExcel::getAmount).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
 
 		map.put("year", yearAndMonth.substring(0, 4));
 		map.put("month", yearAndMonth.substring(4));
@@ -220,7 +220,7 @@ public class XmLeaseServiceImpl extends BaseServiceImpl<XmLeaseMapper, XmLeaseEn
 		excelWriter.fill(results, fillConfig, writeSheet);
 		Map<String, Object> map = new HashMap<>();
 		map.put("quantitySum", results.stream().mapToDouble(XmLeaseExcel::getQuantity).sum());
-		map.put("amountSum", results.stream().map(XmLeaseExcel::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+		map.put("amountSum", results.stream().map(XmLeaseExcel::getAmount).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
 
 		map.put("xmbh", Func.isNotEmpty(results) ? results.get(0).getXmbh() : "");
 		map.put("xmmc", Func.isNotEmpty(results) ? results.get(0).getXmmc() : "");

+ 9 - 10
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java

@@ -149,7 +149,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			}
  			if (xm.getXmyszemx() != null) {
 				List<JSONObject> list = JSONObject.parseArray(xm.getXmyszemx(), JSONObject.class);
-				BigDecimal total = list.stream().map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.UP);
+				BigDecimal total = list.stream().map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.valueOf(0.00), BigDecimal::add).setScale(2, RoundingMode.UP);
 				if (total.compareTo(BigDecimal.ZERO) <= 0) {
 					throw new ServiceException("请填写项目预算");
 				}
@@ -242,7 +242,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 
 			List<JSONObject> xmysmx = JSON.parseArray(xmVO.getXmyszemx(), JSONObject.class);
 			//预算总额
-			xmVO.setXmysze(xmysmx.stream().map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.UP));
+			xmVO.setXmysze(xmysmx.stream().map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.valueOf(0.00), BigDecimal::add).setScale(2, RoundingMode.UP));
 
 			//本年度预算
 			for (JSONObject o : xmysmx) {
@@ -260,8 +260,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			if (xmVO.getQzqygj() == null || xmVO.getQzqygj().compareTo(BigDecimal.ZERO) <= 0 || xmVO.getXmysze() == null || xmVO.getXmysze().compareTo(BigDecimal.ZERO) <= 0) {
 				xmVO.setZyswcl(BigDecimal.valueOf(0.00));
 			} else {
-//				xmVO.setZyswcl(xmVO.getQzqygj().divide(xmVO.getXmysze(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.UP));
-				xmVO.setZyswcl(xmVO.getQzqygj().multiply(BigDecimal.valueOf(100)).divide(xmVO.getXmysze(), 2, RoundingMode.HALF_UP));
+ 				xmVO.setZyswcl(xmVO.getQzqygj().multiply(BigDecimal.valueOf(100)).divide(xmVO.getXmysze(), 2, RoundingMode.HALF_UP));
 			}
 
 			//本年度已归集研发费用(万元)
@@ -272,7 +271,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			if (xmVO.getNdygjyffy() == null || xmVO.getNdygjyffy().compareTo(BigDecimal.ZERO) <= 0 || xmVO.getXmyszeCurrentYear() == null || xmVO.getXmyszeCurrentYear().compareTo(BigDecimal.ZERO) <= 0) {
 				xmVO.setNdygjjel(BigDecimal.ZERO);
 			} else {
-				xmVO.setNdygjjel(xmVO.getNdygjyffy().divide(xmVO.getXmyszeCurrentYear(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
+				xmVO.setNdygjjel(xmVO.getNdygjyffy().divide(xmVO.getXmyszeCurrentYear(), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
 			}
 		}
 		return page.setRecords(xmList);
@@ -340,11 +339,11 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			vo.setWtwbyjkffyRate(0.00);
 			vo.setQtfyRate(0.00);
 		} else {
-			vo.setRyrgfyRate(vo.getRyrgfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
-			vo.setZjtrfyRate(vo.getZjtrfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
-			vo.setZjfyycqdtfyRate(vo.getZjfyycqdtfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
-			vo.setWxzctxfyRate(vo.getWxzctxfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
-			vo.setSjfyRate(vo.getSjfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
+			vo.setRyrgfyRate(vo.getRyrgfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
+			vo.setZjtrfyRate(vo.getZjtrfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
+			vo.setZjfyycqdtfyRate(vo.getZjfyycqdtfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
+			vo.setWxzctxfyRate(vo.getWxzctxfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
+			vo.setSjfyRate(vo.getSjfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
 			vo.setZbtsysyfyRate(vo.getZbtsysyfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
 			vo.setWtwbyjkffyRate(vo.getWtwbyjkffy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
 			vo.setQtfyRate(vo.getQtfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());

+ 19 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/YsRyrgfyServiceImpl.java

@@ -104,6 +104,8 @@ public class YsRyrgfyServiceImpl extends BaseServiceImpl<YsRyrgfyMapper, YsRyrgf
 			YsRyrgfyExcel excel = (YsRyrgfyExcel) o;
 			YsRyrgfyEntity entity = new YsRyrgfyEntity();
 
+			judgeZzsc(xmVO, excel.getZzsc());
+
 			excel.setNumber(Func.isBlank(excel.getNumber()) ? null : excel.getNumber().trim());
 			excel.setIdCard(Func.isBlank(excel.getIdCard()) ? null : excel.getIdCard().trim());
 
@@ -176,6 +178,11 @@ public class YsRyrgfyServiceImpl extends BaseServiceImpl<YsRyrgfyMapper, YsRyrgf
 
 	@Override
 	public boolean saveRyrgfy(YsRyrgfyEntity ysRyrgfy) {
+		XmVO xmVO = xmMapper.selectByXmId(ysRyrgfy.getXmId());
+		if(Func.isNull(xmVO)){
+			throw new ServiceException("研发项目不存在");
+		}
+		judgeZzsc(xmVO, ysRyrgfy.getZzsc());
 		//花名册是否已添加
 		List<YsRyrgfyEntity> dbList = baseMapper.selectList(Wrappers.<YsRyrgfyEntity>lambdaQuery().eq(YsRyrgfyEntity::getXmId, ysRyrgfy.getXmId()));
 		List<Long> dbTechnicianIdList = dbList.stream().map(YsRyrgfyEntity::getTechnicianId).toList();
@@ -193,6 +200,11 @@ public class YsRyrgfyServiceImpl extends BaseServiceImpl<YsRyrgfyMapper, YsRyrgf
 
 	@Override
 	public boolean updateRyrgfy(YsRyrgfyEntity ysRyrgfy) {
+		XmVO xmVO = xmMapper.selectByXmId(ysRyrgfy.getXmId());
+		if(Func.isNull(xmVO)){
+			throw new ServiceException("研发项目不存在");
+		}
+		judgeZzsc(xmVO, ysRyrgfy.getZzsc());
 		List<YsRyrgfyEntity> dbList = baseMapper.selectList(Wrappers.<YsRyrgfyEntity>lambdaQuery().eq(YsRyrgfyEntity::getXmId, ysRyrgfy.getXmId()));
 		for (YsRyrgfyEntity entity : dbList) {
 			if (Func.equals(entity.getTechnicianId(), ysRyrgfy.getTechnicianId()) && !Func.equals(entity.getId(), ysRyrgfy.getId())) {
@@ -202,4 +214,11 @@ public class YsRyrgfyServiceImpl extends BaseServiceImpl<YsRyrgfyMapper, YsRyrgf
 		ysRyrgfy.setPjrgfy(ysRyrgfy.getPjrgfy().multiply(BigDecimal.valueOf(10000)));
 		return this.updateById(ysRyrgfy);
 	}
+
+	private void judgeZzsc(XmVO xmVO, Integer zzsc){
+		long betweenMonth = cn.hutool.core.date.DateUtil.betweenMonth(xmVO.getXmkssj(), xmVO.getXmjssj(), true);
+		if(betweenMonth < zzsc){
+			throw new ServiceException("工作时长不能大于研发项目【"+xmVO.getXmbh()+"】的周期【" + betweenMonth +"】个月");
+		}
+	}
 }

+ 17 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/YsWxzctxfyServiceImpl.java

@@ -67,6 +67,12 @@ public class YsWxzctxfyServiceImpl extends BaseServiceImpl<YsWxzctxfyMapper, YsW
 			throw new ServiceException("请选择科研项目");
 		}
 
+		XmVO xmVO = xmMapper.selectByXmId(entity.getXmId());
+		if (Func.isNull(xmVO)) {
+			throw new ServiceException("研发项目不存在");
+		}
+		judgeZzsc(xmVO, entity.getZzsc());
+
 		List<YsWxzctxfyEntity> dbList = baseMapper.selectList(Wrappers.<YsWxzctxfyEntity>lambdaQuery().eq(YsWxzctxfyEntity::getXmId, entity.getXmId()));
 		if (Func.isEmpty(dbList)) {
 			return this.saveOrUpdate(entity);
@@ -129,6 +135,9 @@ public class YsWxzctxfyServiceImpl extends BaseServiceImpl<YsWxzctxfyMapper, YsW
 			if (Func.isBlank(excel.getZcmc())) {
 				throw new ServiceException("序号[" + excel.getXh() + "]的资产名称为空");
 			}
+
+			judgeZzsc(xmVO, excel.getZzsc());
+
 			YsWxzctxfyEntity entity = new YsWxzctxfyEntity();
 			entity.setXmId(xmId);
 
@@ -180,7 +189,7 @@ public class YsWxzctxfyServiceImpl extends BaseServiceImpl<YsWxzctxfyMapper, YsW
  			if(asset.getYzje()!=null) {
 				asset.setYzje(asset.getYzje().divide(BigDecimal.valueOf(10000)));
 			} else {
-				asset.setYzje(BigDecimal.ZERO);
+				asset.setYzje(BigDecimal.valueOf(0.00));
  			}
 			obj.put("yzje", asset.getYzje());
 			obj.put("ysje", asset.getYzje().multiply(BigDecimal.valueOf(temp.getZzsc())));
@@ -208,5 +217,12 @@ public class YsWxzctxfyServiceImpl extends BaseServiceImpl<YsWxzctxfyMapper, YsW
 		}
 	}
 
+	private void judgeZzsc(XmVO xmVO, Integer zzsc){
+		long betweenMonth = cn.hutool.core.date.DateUtil.betweenMonth(xmVO.getXmkssj(), xmVO.getXmjssj(), true);
+		if(betweenMonth < zzsc){
+			throw new ServiceException("工作时长不能大于研发项目【"+xmVO.getXmbh()+"】的周期【" + betweenMonth +"】个月");
+		}
+	}
+
 
 }

+ 17 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/YsZjfyycqdtfyServiceImpl.java

@@ -68,6 +68,13 @@ public class YsZjfyycqdtfyServiceImpl extends BaseServiceImpl<YsZjfyycqdtfyMappe
 		if(entity.getXmId() == null){
 			throw new ServiceException("请选择科研项目");
 		}
+
+		XmVO xmVO = xmMapper.selectByXmId(entity.getXmId());
+		if(Func.isNull(xmVO)){
+			throw new ServiceException("研发项目不存在");
+		}
+		judgeZzsc(xmVO, entity.getZzsc());
+
 		AssetEntity dbAsset = assetMapper.selectById(entity.getAssetId());
 		if(Func.isNull(dbAsset)){
 			throw new ServiceException("资产不存在");
@@ -139,6 +146,9 @@ public class YsZjfyycqdtfyServiceImpl extends BaseServiceImpl<YsZjfyycqdtfyMappe
 			if(Func.isBlank(excel.getZcmc())){
 				throw new ServiceException("序号["+excel.getXh()+"]的资产名称为空");
 			}
+
+			judgeZzsc(xmVO, excel.getZzsc());
+
 			YsZjfyycqdtfyEntity entity = new YsZjfyycqdtfyEntity();
 			entity.setXmId(xmId);
 
@@ -223,4 +233,11 @@ public class YsZjfyycqdtfyServiceImpl extends BaseServiceImpl<YsZjfyycqdtfyMappe
 		}
     }
 
+	private void judgeZzsc(XmVO xmVO, Integer zzsc){
+		long betweenMonth = cn.hutool.core.date.DateUtil.betweenMonth(xmVO.getXmkssj(), xmVO.getXmjssj(), true);
+		if(betweenMonth < zzsc){
+			throw new ServiceException("工作时长不能大于研发项目【"+xmVO.getXmbh()+"】的周期【" + betweenMonth +"】个月");
+		}
+	}
+
 }