zhoulisky 4 months ago
parent
commit
7f72ebd7f9
23 changed files with 305 additions and 265 deletions
  1. 1 1
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/A107_2.java
  2. 22 22
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/SalaryExcel.java
  3. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/TechnicianMapper.xml
  4. 1 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.xml
  5. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.java
  6. 2 2
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.xml
  7. 48 33
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianMapper.xml
  8. 58 52
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/EnterpriseInfoServiceImpl.java
  9. 1 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/SalaryServiceImpl.java
  10. 75 75
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java
  11. 9 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmAssetHoursServiceImpl.java
  12. 9 6
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmBgrzServiceImpl.java
  13. 20 13
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java
  14. 3 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmDesignCostServiceImpl.java
  15. 3 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmDirectCostServiceImpl.java
  16. 7 7
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmFixedAssetServiceImpl.java
  17. 3 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmGoodsServiceImpl.java
  18. 8 9
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmIntangibleAssetServiceImpl.java
  19. 3 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmOtherCostServiceImpl.java
  20. 20 8
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java
  21. 7 6
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmTechnicianHoursServiceImpl.java
  22. 3 14
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmWwxmCostServiceImpl.java
  23. BIN
      kd-service/kd-scientific/src/main/resources/export-template/研发项目管理/预算编制/研发项目经费预算表.xls

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

@@ -32,7 +32,7 @@ public class A107_2 extends TenantEntity {
 	@Schema(description = "高新技术企业减免税金额")
 	private BigDecimal d45= BigDecimal.ZERO;
 	@Schema(description = "期末机构数")
-	private Integer d22;
+	private Integer d22=1;
 	@Schema(description = "机构研究开发人员")
 	private Integer d23;
 	@Schema(description = "其中:博士毕业")

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

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

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

@@ -180,7 +180,7 @@
             </foreach>
         </if>
         GROUP BY h.unicode
-        HAVING workDaysByYear > 183
+        HAVING workDaysByYear >= 183
     </select>
 
     <select id="getNameById" resultType="java.lang.String">

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

@@ -179,6 +179,7 @@
         SELECT
             xmbh,
             COALESCE(get_xm_info(id,'STATUS', null),STATUS) as status,
+            xmkssj,
             COALESCE(get_xm_info(id,'XMJSSJ', null),XMJSSJ) as xmjssj
         FROM kd_xm where id = #{xmId}
     </select>

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

@@ -84,5 +84,5 @@ public interface XmTechnicianHoursMapper extends BaseMapper<XmTechnicianHours> {
 	 */
 	int batchUpdateHours(List<XmTechnicianHours> updateList);
 
-    double sumHoursByXmAndUnicodeAndYearMonth(@Param("xmId") Long xmId, @Param("unicode") String unicode, @Param("yearAndMonth") String yearAndMonth);
+    double sumHoursByXmAndUnicodeAndYear(@Param("xmId") Long xmId, @Param("unicode") String unicode, @Param("year") String year);
 }

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

@@ -174,11 +174,11 @@
          WHERE LEFT(h.work_date, 6) = #{yearAndMonth}
     </select>
 
-    <select id="sumHoursByXmAndUnicodeAndYearMonth" resultType="java.lang.Double">
+    <select id="sumHoursByXmAndUnicodeAndYear" resultType="java.lang.Double">
         select
             ifnull(sum(work_hours),0 )
         from kd_xm_technician_hours
-        where xm_id = #{xmId} and unicode = #{unicode} and left(work_date,6) = #{yearAndMonth}
+        where xm_id = #{xmId} and unicode = #{unicode} and left(work_date,4) = #{year}
     </select>
 
     <update id="clearByXmUnicodeMonth">

+ 48 - 33
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianMapper.xml

@@ -227,45 +227,60 @@
         <result column="medical_insurance_bc" property="medicalInsuranceBc"/>
     </resultMap>
     <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
+            v.* ,
+            xm.XMBH, xm.XMMC
+        from rgfyfpb_view v
+        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 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,t.year_and_month
+            m.unicode,t.name, t.number,t.id_card, t.personnel_type
         FROM kd_xm_technician m
         LEFT JOIN
         (

+ 58 - 52
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/EnterpriseInfoServiceImpl.java

@@ -97,14 +97,14 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 			throw new ServiceException("上年度没有数据");
 		}
 
-		List<String> ignorePropList = Arrays.asList("id","yearAndMonth","currentYearIncome", "currentYearCost","previousYearIncome","previousYearCost","lastYearIncome","lastYearCost");
+		List<String> ignorePropList = Arrays.asList("id", "yearAndMonth", "currentYearIncome", "currentYearCost", "previousYearIncome", "previousYearCost", "lastYearIncome", "lastYearCost");
 
 		// 企业基础信息表
 		EnterpriseInfoEntity dbEntity = this.getOne(Wrappers.<EnterpriseInfoEntity>lambdaQuery()
 			.eq(EnterpriseInfoEntity::getYearAndMonth, enterpriseInfo.getYearAndMonth()));
 		if (Func.isNull(dbEntity)) {
 			//新增
-			EnterpriseInfoEntity entity = BeanUtil.copyProperties(previousYearData, EnterpriseInfoEntity.class,  ignorePropList.toArray(new String[0]));
+			EnterpriseInfoEntity entity = BeanUtil.copyProperties(previousYearData, EnterpriseInfoEntity.class, ignorePropList.toArray(new String[0]));
 			entity.setTenantId(SecureUtil.getTenantId());
 			entity.setYearAndMonth(enterpriseInfo.getYearAndMonth());
 			entity.setPreviousYearCost(previousYearData.getCurrentYearCost());
@@ -115,7 +115,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 			return this.save(entity);
 		} else {
 			//修改
-			BeanUtil.copyProperties(previousYearData, dbEntity,  ignorePropList.toArray(new String[0]));
+			BeanUtil.copyProperties(previousYearData, dbEntity, ignorePropList.toArray(new String[0]));
 			dbEntity.setPreviousYearCost(previousYearData.getCurrentYearCost());
 			dbEntity.setPreviousYearIncome(previousYearData.getCurrentYearIncome());
 			dbEntity.setLastYearCost(previousYearData.getPreviousYearCost());
@@ -179,29 +179,27 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 				}
 			}
 
-			vo.setWorkTime(BigDecimal.valueOf(workTime).setScale(2, RoundingMode.HALF_UP).doubleValue());
+			vo.setWorkTime(BigDecimal.valueOf(workTime).setScale(0, RoundingMode.HALF_UP).doubleValue());
 
 			//当列15等于基础研究时,列14=P088中对应研发项目的受托方类型的前5项的委外金额合计。当列15不等于基础研究时,列14等于0
 			if (Func.equals(vo.getYjlx(), "基础研究")) {
 				//对应研发项目的受托方类型的前5项的委外金额合计
 				vo.setWwfy(wwxmCostMapper.getAmountByXmAndYear(year, vo.getXmId()));
-
-				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);
-				} else {
-					FinanceCostSummary summary = summaryList.get(0);
-					vo.setCost(summary.getTotal());
-					vo.setCost1(summary.getTotal());
-				}
 			} else {
+				vo.setWwfy(BigDecimal.ZERO);
+			}
+
+			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);
-				vo.setWwfy(BigDecimal.ZERO);
+			} else {
+				FinanceCostSummary summary = summaryList.get(0);
+				vo.setCost(summary.getTotal());
+				vo.setCost1(summary.getTotal());
 			}
 			//其中:企业自主开展=用于科学原理的探索发现的经费总额-委托外单位开展
 			vo.setCost2(vo.getCost1().subtract(vo.getWwfy()));
@@ -340,10 +338,11 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		XmAssetQueryParam param = new XmAssetQueryParam();
 		param.setYearAndMonth(year + "12");
 		List<XmFixedAsset> yiqishebeiList = fixedAssetMapper.selectXmFixedAssetPageByYearAndMonth(p2, param, AssetCategoryEnum.仪器设备.getCode());
+		BigDecimal d27 = BigDecimal.ZERO;
 		for (XmFixedAsset asset : yiqishebeiList) {
-			vo.setD27(vo.getD7().add(asset.getAsset() != null ? asset.getAsset().getZcyz() : BigDecimal.ZERO));
+			d27 = d27.add(asset.getAsset() != null ? asset.getAsset().getZcyz() : BigDecimal.ZERO);
 		}
-		vo.setD27(vo.getD27().setScale(2, RoundingMode.HALF_UP));
+		vo.setD27(d27.multiply(BigDecimal.valueOf(0.001)).setScale(2, RoundingMode.HALF_UP));
 
 		//七、研究开发产出及相关情况
 		List<CgZlEntity> zlList = zlMapper.selectList(Wrappers.<CgZlEntity>lambdaQuery().eq(CgZlEntity::getTenantId, SecureUtil.getTenantId()));
@@ -355,12 +354,15 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 			Date shenqingRq = zl.getShenqingRq();
 			Date shouquanRq = zl.getShouquanRq();
 			if (Func.notNull(shenqingRq)) {
-				d29++;
 				if (Func.equals(year, DateUtil.format(shenqingRq, DateUtil.PATTERN_YYYY))) {
-					d30++;
+					d29++;
+					if (Func.equals(zl.getZllx(), "发明专利")) {
+						d30++;
+					}
+
 				}
 			}
-			if (Func.notNull(shouquanRq) && shouquanRq.before(dateMax) && shouquanRq.after(dateMin)) {
+			if (Func.notNull(shouquanRq) && Func.equals(year, DateUtil.format(shouquanRq, DateUtil.PATTERN_YYYY)) && Func.equals(zl.getFlzt(), "授权有效") && Func.equals(zl.getZllx(), "发明专利")) {
 				d32++;
 			}
 		}
@@ -381,18 +383,19 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		//八、其他相关情况
 		//当年企业研发准备金合计
 		List<XmEntity> xmList = xmMapper.selectList(Wrappers.emptyWrapper());
+		BigDecimal d59 = BigDecimal.ZERO;
 		for (XmEntity xm : xmList) {
 			String xmyszemx = xm.getXmyszemx();
 			if (Func.notNull(xmyszemx)) {
 				List<JSONObject> array = JSON.parseArray(xmyszemx, JSONObject.class);
 				double sum = array.stream().filter(item -> item.getInteger("year") == Integer.parseInt(year)).mapToDouble(item -> item.getDouble("amount")).sum();
 				System.out.println("sum:" + sum);
-				vo.setD59(vo.getD59().add(BigDecimal.valueOf(sum)));
-				System.out.println("d59:" + vo.getD59());
+				d59 = d59.add(BigDecimal.valueOf(sum));
+				System.out.println("d59:" + d59);
 			}
 		}
 		//预算的单位是万,这里要显示千元,故乘以10即可,即1万=10千元
-		vo.setD59(vo.getD59().multiply(new BigDecimal("10")).setScale(2, RoundingMode.HALF_UP));
+		vo.setD59(d59.multiply(BigDecimal.valueOf(10)).setScale(2, RoundingMode.HALF_UP));
 
 		return vo;
 	}
@@ -426,7 +429,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		for (XmFixedAsset fangwujianzhuwu : fangwujianzhuwuList) {
 			AssetEntity asset = fangwujianzhuwu.getAsset();
 			if (asset != null && Func.equals(DateUtil.format(asset.getKssj(), DateUtil.PATTERN_YYYY), year)) {
-				yiqishebeiTotal = fangwujianzhuwuTotal.add(asset.getZcyz());
+				fangwujianzhuwuTotal = fangwujianzhuwuTotal.add(asset.getZcyz());
 			}
 		}
 		vo.setD20(fangwujianzhuwuTotal.add(yiqishebeiTotal).multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
@@ -496,16 +499,16 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		List<XmWwxmCostVO> wwxmCostVOList = wwxmCostMapper.selectPageByYear(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), wwxmCostQuery);
 
 		//①委托境内研究机构
-		BigDecimal d15 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内研究机构")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+		BigDecimal d15 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内研究机构") && item.getPayAmount() != null).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 		vo.setD15(d15.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
 		//②委托境内高等学校
-		BigDecimal d16 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内高等学校")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+		BigDecimal d16 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内高等学校") && item.getPayAmount() != null).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 		vo.setD16(d16.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
 		//③委托境内企业
-		BigDecimal d17 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内企业")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+		BigDecimal d17 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内企业") && item.getPayAmount() != null).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 		vo.setD17(d17.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
 		//④委托境外机构
-		BigDecimal d18 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境外机构")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+		BigDecimal d18 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境外机构") && item.getPayAmount() != null).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 		vo.setD18(d18.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
 
 		vo.setD7(vo.getD8().add(vo.getD9()).add(vo.getD10()).add(vo.getD11()).add(vo.getD12()).add(vo.getD13()).add(vo.getD14()).add(vo.getD19()));
@@ -598,7 +601,9 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		//(六)其他相关费用
 		vo.setD28(Func.isNull(summary) ? BigDecimal.ZERO : summary.getQtxgfyhj_hjje());
 		//(七)经限额调整后的其他相关费用
-		vo.setD34(Func.isNull(summary) ? BigDecimal.ZERO : summary.getQtxgfyhj_adjust_hjje());
+		BigDecimal sum = vo.getD3().add(vo.getD7().add(vo.getD16().add(vo.getD19().add(vo.getD23())))).multiply(BigDecimal.valueOf(0.1)).divide(BigDecimal.valueOf(0.9), 4, RoundingMode.UP);
+		vo.setD34(BigDecimal.valueOf(Math.min(sum.doubleValue(), vo.getD28().doubleValue())));
+//		vo.setD34(Func.isNull(summary) ? BigDecimal.ZERO : summary.getQtxgfyhj_adjust_hjje());
 
 		//一、自主研发、合作研发、集中研发(3+7+16+19+23+34)
 		vo.setD2(vo.getD3().add(vo.getD7()).add(vo.getD16()).add(vo.getD19()).add(vo.getD23()).add(vo.getD28()).add(vo.getD34()));
@@ -850,11 +855,6 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 
 		vo.setD28_4(vo.getD28_1().add(vo.getD28_2()).add(vo.getD28_3()));
 
-		vo.setD15_1(vo.getD16_1().add(vo.getD25_1()));
-		vo.setD15_2(vo.getD16_2().add(vo.getD25_2()));
-		vo.setD15_3(vo.getD16_3().add(vo.getD25_3()));
-		vo.setD15_4(vo.getD15_1().add(vo.getD15_2()).add(vo.getD15_3()));
-
 		vo.setD16_1(vo.getD17_1().add(vo.getD18_1()).add(vo.getD19_1()).add(vo.getD20_1()).add(vo.getD21_1()).add(vo.getD22_1()).add(vo.getD23_1()).add(vo.getD24_1()));
 		vo.setD16_2(vo.getD17_2().add(vo.getD18_2()).add(vo.getD19_2()).add(vo.getD20_2()).add(vo.getD21_2()).add(vo.getD22_2()).add(vo.getD23_2()).add(vo.getD24_2()));
 		vo.setD16_3(vo.getD17_3().add(vo.getD18_3()).add(vo.getD19_3()).add(vo.getD20_3()).add(vo.getD21_3()).add(vo.getD22_3()).add(vo.getD23_3()).add(vo.getD24_3()));
@@ -865,6 +865,11 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		vo.setD25_3(vo.getD26_3().add(vo.getD28_3().multiply(BigDecimal.valueOf(0.8))));
 		vo.setD25_4(vo.getD25_1().add(vo.getD25_2()).add(vo.getD25_3()));
 
+		vo.setD15_1(vo.getD16_1().add(vo.getD25_1()));
+		vo.setD15_2(vo.getD16_2().add(vo.getD25_2()));
+		vo.setD15_3(vo.getD16_3().add(vo.getD25_3()));
+		vo.setD15_4(vo.getD15_1().add(vo.getD15_2()).add(vo.getD15_3()));
+
 		vo.setD2901(d29_1 == null ? BigDecimal.ZERO : d29_1);
 		vo.setD2902(d29_2 == null ? BigDecimal.ZERO : d29_2);
 		vo.setD2903(d29_3 == null ? BigDecimal.ZERO : d29_3);
@@ -872,7 +877,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		vo.setD2904(vo.getD2901().add(vo.getD2902()).add(vo.getD2903()));
 
 		//九、三年研发费用占销售(营业)收入的比例(15行第4列/29行第4列)
-		vo.setD30((vo.getD2904().compareTo(BigDecimal.ZERO) == 0) ? BigDecimal.ZERO : vo.getD15_4().divide(vo.getD2904()));
+		vo.setD30((vo.getD2904().compareTo(BigDecimal.ZERO) == 0) ? BigDecimal.ZERO : vo.getD15_4().divide(vo.getD2904(), 4, RoundingMode.UP));
 
 		vo.setD31(d31);
 		vo.setD32(d32);
@@ -956,13 +961,14 @@ 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().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)) {
 			d2 = (int) zlList.stream().filter(item -> Func.equals(item.getZllx(), "发明专利")).count();
 			d3 = (int) zlList.stream().filter(item -> Func.equals(item.getZllx(), "发明专利") && Func.equals(item.getSfgfzl(), "是")).count();
 			d9 = (int) zlList.stream().filter(item -> Func.equals(item.getZllx(), "实用新型专利")).count();
-			d10 = (int) zlList.stream().filter(item -> Func.equals(item.getZllx(), "外观专利")).count();
+			d10 = (int) zlList.stream().filter(item -> Func.equals(item.getZllx(), "外观设计专利")).count();
 		}
 		vo.setD2(d2);
 		vo.setD3(d3);
@@ -970,7 +976,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		vo.setD10(d10);
 
 		int d4 = 0, d5 = 0, d6 = 0, d7 = 0, d8 = 0;
-		List<CgQtEntity> qtList = qtMapper.selectList(Wrappers.<CgQtEntity>lambdaQuery().between(CgQtEntity::getShouquanRq, dateMin, dateMax));
+		List<CgQtEntity> qtList = qtMapper.selectList(Wrappers.<CgQtEntity>lambdaQuery().apply("DATE_FORMAT(SHOUQUAN_RQ,'%Y') = {0}", year));
 		if (Func.isNotEmpty(qtList)) {
 			d4 = (int) qtList.stream().filter(item -> Func.equals(item.getCmlx(), "植物新品种")).count();
 			d5 = (int) qtList.stream().filter(item -> Func.equals(item.getCmlx(), "国家级农作物品种")).count();
@@ -1167,16 +1173,16 @@ 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);
 
-		vo.setQj55(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && zl.getShenqingRq().before(dateMax) && zl.getShenqingRq().after(dateMin)).count());
-		vo.setQj56(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && zl.getShenqingRq().before(dateMax) && zl.getShenqingRq().after(dateMin) && Func.equals("发明专利", zl.getZllx())).count());
-		vo.setQj56_1(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && zl.getShenqingRq().before(dateMax) && zl.getShenqingRq().after(dateMin) && Func.equals("发明专利", zl.getZllx()) && Func.equals("国内", zl.getGb())).count());
-		vo.setQj55_1(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && zl.getShenqingRq().before(dateMax) && zl.getShenqingRq().after(dateMin) && Func.equals("境外(欧美日)", zl.getGb())).count());
-		vo.setQj55_2(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && zl.getShenqingRq().before(dateMax) && zl.getShenqingRq().after(dateMin) && Func.equals("PCT国际专利", zl.getGb())).count());
+		vo.setQj55(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && Func.equals(DateUtil.format(zl.getShenqingRq(), DateUtil.PATTERN_YYYY), year)).count());
+		vo.setQj56(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && Func.equals(DateUtil.format(zl.getShenqingRq(), DateUtil.PATTERN_YYYY), year) && Func.equals("发明专利", zl.getZllx())).count());
+		vo.setQj56_1(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && Func.equals(DateUtil.format(zl.getShenqingRq(), DateUtil.PATTERN_YYYY), year) && Func.equals("发明专利", zl.getZllx()) && Func.equals("国内", zl.getGb())).count());
+		vo.setQj55_1(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && Func.equals(DateUtil.format(zl.getShenqingRq(), DateUtil.PATTERN_YYYY), year) && Func.equals("境外(欧美日)", zl.getGb())).count());
+		vo.setQj55_2(zlList.stream().filter(zl -> Func.notNull(zl.getShenqingRq()) && Func.equals(DateUtil.format(zl.getShenqingRq(), DateUtil.PATTERN_YYYY), year) && Func.equals("PCT国际专利", zl.getGb())).count());
 
-		vo.setQj74(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && zl.getShouquanRq().before(dateMax) && zl.getShouquanRq().after(dateMin)).count());
-		vo.setQj57(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && zl.getShouquanRq().before(dateMax) && zl.getShouquanRq().after(dateMin) && Func.equals("发明专利", zl.getZllx())).count());
-		vo.setQj57_1(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && zl.getShouquanRq().before(dateMax) && zl.getShouquanRq().after(dateMin) && Func.equals("发明专利", zl.getZllx()) && Func.equals("国内", zl.getGb())).count());
-		vo.setQj75(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && zl.getShouquanRq().before(dateMax) && zl.getShouquanRq().after(dateMin) && Func.equals("境外(欧美日)", zl.getGb())).count());
+		vo.setQj74(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && Func.equals(DateUtil.format(zl.getShouquanRq(), DateUtil.PATTERN_YYYY), year)).count());
+		vo.setQj57(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && Func.equals(DateUtil.format(zl.getShouquanRq(), DateUtil.PATTERN_YYYY), year) && Func.equals("发明专利", zl.getZllx())).count());
+		vo.setQj57_1(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && Func.equals(DateUtil.format(zl.getShouquanRq(), DateUtil.PATTERN_YYYY), year) && Func.equals("发明专利", zl.getZllx()) && Func.equals("国内", zl.getGb())).count());
+		vo.setQj75(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && Func.equals(DateUtil.format(zl.getShouquanRq(), DateUtil.PATTERN_YYYY), year) && Func.equals("境外(欧美日)", zl.getGb())).count());
 
 		vo.setQj83(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && zl.getShouquanRq().before(dateMax) && Func.equals("授权有效", zl.getFlzt())).count());
 		vo.setQj83_1(zlList.stream().filter(zl -> Func.notNull(zl.getShouquanRq()) && zl.getShouquanRq().before(dateMax) && Func.equals("授权有效", zl.getFlzt()) && Arrays.asList("境外(除欧美日外)", "境外(欧美日)").contains(zl.getGb())).count());
@@ -1210,10 +1216,10 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		//累计形成国际标准
 		List<CgJsbzEntity> jsbzList = jsbzMapper.selectList(Wrappers.<CgJsbzEntity>lambdaQuery().eq(CgJsbzEntity::getTenantId, SecureUtil.getTenantId()));
 		vo.setQj98(jsbzList.stream().filter(item -> Func.equals(item.getBzlb(), "国际标准")).count());
-		vo.setQj98_1(jsbzList.stream().filter(item -> Func.notNull(item.getSsrq()) && Func.equals(item.getBzlb(), "国际标准") && Func.equals(item.getState(), "现行有效") && item.getSsrq().before(dateMax) && item.getSsrq().after(dateMin)).count());
+		vo.setQj98_1(jsbzList.stream().filter(item -> Func.notNull(item.getSsrq()) && Func.equals(item.getBzlb(), "国际标准") && Func.equals(item.getState(), "现行有效") && Func.equals(DateUtil.format(item.getSsrq(), DateUtil.PATTERN_YYYY), year)).count());
 		//累计形成国家或行业标准
 		vo.setQi27(jsbzList.stream().filter(item -> Func.equals(item.getBzlb(), "国家标准") || Func.equals(item.getBzlb(), "行业标准")).count());
-		vo.setQi27_1(jsbzList.stream().filter(item -> Func.notNull(item.getSsrq()) && Func.equals(item.getBzlb(), "国家标准") || Func.equals(item.getBzlb(), "行业标准") && Func.equals(item.getState(), "现行有效") && item.getSsrq() != null && item.getSsrq().before(dateMax) && item.getSsrq().after(dateMin)).count());
+		vo.setQi27_1(jsbzList.stream().filter(item -> Func.notNull(item.getSsrq()) && Func.equals(item.getBzlb(), "国家标准") || Func.equals(item.getBzlb(), "行业标准") && Func.equals(item.getState(), "现行有效") && item.getSsrq() != null && Func.equals(DateUtil.format(item.getSsrq(), DateUtil.PATTERN_YYYY), year)).count());
 		return vo;
 	}
 

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

@@ -263,6 +263,7 @@ public class SalaryServiceImpl extends BaseServiceImpl<SalaryMapper, SalaryEntit
 			if (StringUtil.isAllBlank(excel.getNumber(), excel.getIdCard())) {
 				throw new ServiceException("序号为[" + excel.getXh() + "]的工号和身份证不能都为空");
 			}
+
 			//根据工号或者身份证查询technicianId
 
 			String unicode = technicianMapper.getUnicodeByNumberAndIdentityCard(excel.getNumber(), excel.getIdCard());

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

@@ -77,22 +77,22 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		if (StringUtil.isBlank(technician.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
-		if (StringUtil.isAllBlank(technician.getNumber(),technician.getIdCard())) {
+		if (StringUtil.isAllBlank(technician.getNumber(), technician.getIdCard())) {
 			throw new ServiceException("工号和身份证号码不能同时为空");
 		}
 		technician.setNumber(Func.isBlank(technician.getNumber()) ? null : technician.getNumber().trim());
 		technician.setIdCard(Func.isBlank(technician.getIdCard()) ? null : technician.getIdCard().trim());
 		String unicode = baseMapper.getUnicodeByNumberAndIdentityCard(technician.getNumber(), technician.getIdCard());
-		if(Func.isBlank(unicode)){
+		if (Func.isBlank(unicode)) {
 			unicode = generateUnicode();
-		}else {
-			if(baseMapper.selectCount(Wrappers.<TechnicianEntity>lambdaQuery().eq(TechnicianEntity::getUnicode, unicode).eq(TechnicianEntity::getYearAndMonth, technician.getYearAndMonth())) > 0){
+		} else {
+			if (baseMapper.selectCount(Wrappers.<TechnicianEntity>lambdaQuery().eq(TechnicianEntity::getUnicode, unicode).eq(TechnicianEntity::getYearAndMonth, technician.getYearAndMonth())) > 0) {
 				StringBuilder sb = new StringBuilder();
-				if(Func.isNotBlank(technician.getNumber()) && Func.isBlank(technician.getIdCard())){
+				if (Func.isNotBlank(technician.getNumber()) && Func.isBlank(technician.getIdCard())) {
 					sb.append("工号已存在");
-				}else if(Func.isNotBlank(technician.getIdCard()) && Func.isBlank(technician.getNumber())){
+				} else if (Func.isNotBlank(technician.getIdCard()) && Func.isBlank(technician.getNumber())) {
 					sb.append("身份证号已存在");
-				}else {
+				} else {
 					sb.append("工号/身份证号已存在");
 				}
 				throw new ServiceException(sb.toString());
@@ -198,7 +198,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 			.headRowNumber(2) // 重要:设置表头行数(0-based)
 			.doRead();
 		List<Object> data = listener.getDataList();
- 		List<TechnicianEntity> dbTechnicianList = baseMapper.selectList(Wrappers.<TechnicianEntity>lambdaQuery().eq(TechnicianEntity::getYearAndMonth, yearAndMonth));
+		List<TechnicianEntity> dbTechnicianList = baseMapper.selectList(Wrappers.<TechnicianEntity>lambdaQuery().eq(TechnicianEntity::getYearAndMonth, yearAndMonth));
 		List<String> identifierList = new ArrayList<>(dbTechnicianList.stream().map(tmp -> tmp.getNumber() + ":" + tmp.getIdCard()).toList());
 
 		for (Object t : data) {
@@ -340,7 +340,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 			}
 			affectNum += insertXmTechnician(unicodeList, xm.getId(), yearAndMonth);
 		}
-		if(affectNum==0){
+		if (affectNum == 0) {
 			throw new ServiceException("项目预算表中无数据");
 		}
 	}
@@ -408,7 +408,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 	public boolean submitXmTechnicianMonthly(XmTechnicianEntity entity) {
 		xmService.judgeXmIsOver(entity.getXmId(), entity.getYearAndMonth(), true);
 
- 		entity.setId(null);
+		entity.setId(null);
 		entity.setYearAndMonth(entity.getYearAndMonth());
 		entity.setCreateUser(SecureUtil.getUserId());
 		entity.setUpdateUser(SecureUtil.getUserId());
@@ -434,7 +434,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 			throw new ServiceException("数据不存在");
 		}
 
-		xmService.judgeXmIsOver(dbXmTechnician.getXmId(), null,true);
+		xmService.judgeXmIsOver(dbXmTechnician.getXmId(), dbXmTechnician.getYearAndMonth(), true);
 
 		//每月研发人员工资
 		if (salaryMapper.selectCount(Wrappers.<SalaryEntity>lambdaQuery().eq(SalaryEntity::getYearAndMonth, dbXmTechnician.getYearAndMonth()).eq(SalaryEntity::getUnicode, dbXmTechnician.getUnicode())) > 0) {
@@ -548,64 +548,64 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		} 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.sumHoursByXmAndUnicodeAndYearMonth(vo.getXmId(), vo.getUnicode(), vo.getYearAndMonth()));
-				//3.根据unicode、yearAndMonth查询工资数据
-				List<SalaryEntity> salaryList = salaryMapper.selectList(Wrappers.<SalaryEntity>lambdaQuery().eq(SalaryEntity::getUnicode, vo.getUnicode()).eq(SalaryEntity::getYearAndMonth, vo.getYearAndMonth()));
-				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()));
-			}
+//			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 {
 			throw new ServiceException("参数yearAndMonth格式错误,yyyyMM或yyyy");
 		}
@@ -752,7 +752,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 				if (temp.getHoursList().stream().noneMatch(a -> Func.equals(a.getWorkDate(), year + month))) {
 					hours1.add(k, new BigDecimal(0));
 				}
-				map.put("month" + month, hours1.get(k-1));
+				map.put("month" + month, hours1.get(k - 1));
 			}
 			map.put("hoursByMonth", hours1.stream().reduce(BigDecimal.ZERO, BigDecimal::add));
 			resultList.add(map);
@@ -904,7 +904,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 			if (Func.isNull(xmId)) {
 				throw new ServiceException("项目不存在,请检查数据");
 			}
-			xmService.judgeXmIsOver(xmId, null,true);
+			xmService.judgeXmIsOver(xmId, yearAndMonth, true);
 
 			LambdaQueryWrapper<XmTechnicianEntity> wrapper = Wrappers.<XmTechnicianEntity>lambdaQuery().
 				eq(XmTechnicianEntity::getYearAndMonth, yearAndMonth).
@@ -924,15 +924,15 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		return true;
 	}
 
-	public static String getTechnicianNotExistTips(String number, String idCard){
+	public static String getTechnicianNotExistTips(String number, String idCard) {
 		StringBuilder builder = new StringBuilder();
-		if(Func.isNotBlank(number)){
+		if (Func.isNotBlank(number)) {
 			builder.append("工号[").append(number).append("]");
 		}
-		if(Func.isNotBlank(idCard)){
+		if (Func.isNotBlank(idCard)) {
 			builder.append("身份证[").append(idCard).append("]");
 		}
- 		return builder.append("不存在").toString();
+		return builder.append("不存在").toString();
 	}
 
 }

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

@@ -90,7 +90,6 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 			if (xmId == null) {
 				throw new ServiceException("序号为[" + record.getSerialNumber() + "]的研发项目不存在");
 			}
-			xmService.judgeXmIsOver(xmId, null,true);
 
 			if (StringUtil.isBlank(record.getZcbm())) {
 				throw new ServiceException("序号为[" + record.getSerialNumber() + "]的资产编码为空");
@@ -107,6 +106,8 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 			List<XmAssetHoursEntity> dbAssetHours = baseMapper.selectByYearAndMonth(yearAndMonth, null, dbAsset.getId());
 			for (DailyAttendance dailyAttendance : record.getDailyAttendances()) {
 
+				xmService.judgeXmIsOver(xmId, dailyAttendance.getWorkDate(), true);
+
 				Map<String, List<XmAssetHoursEntity>> mapByDate = dbAssetHours.stream().collect(Collectors.groupingBy(XmAssetHoursEntity::getWorkDate));
 				List<XmAssetHoursEntity> dbHourList = mapByDate.get(dailyAttendance.getWorkDate());
 				if(Func.isEmpty(dbHourList) ){
@@ -209,7 +210,7 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 		if (dto.getXmId() == null) {
 			throw new ServiceException("参数xmId不能为空");
 		}
-		xmService.judgeXmIsOver(dto.getXmId(), null,true);
+
 		if (dto.getAssetId() == null) {
 			throw new ServiceException("参数assetId不能为空");
 		}
@@ -231,6 +232,9 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 		List<XmAssetHoursEntity> dbAssetHours = baseMapper.selectByYearAndMonth(dto.getYearAndMonth(), null, dto.getAssetId());
 
 		for (DailyAttendance dailyAttendance : dto.getDailyHoursList()) {
+
+			xmService.judgeXmIsOver(dto.getXmId(), dailyAttendance.getWorkDate(),true);
+
 			Map<String, List<XmAssetHoursEntity>> mapByDate = dbAssetHours.stream().collect(Collectors.groupingBy(XmAssetHoursEntity::getWorkDate));
 			List<XmAssetHoursEntity> dbHourList = mapByDate.get(dailyAttendance.getWorkDate());
 			if(Func.isEmpty(dbHourList) ){
@@ -286,9 +290,11 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 		for (int i = 0; i < xmAndAssetIdList.size(); i++) {
 			JSONObject object = xmAndAssetIdList.getJSONObject(i);
 			Long xmId = object.getLong("xmId");
-			xmService.judgeXmIsOver(xmId, null,true);
+
 			Long assetId = object.getLong("assetId");
 			String yearAndMonth = dto.getString("yearAndMonth");
+
+			xmService.judgeXmIsOver(xmId, yearAndMonth,true);
 			baseMapper.clearXmAssetHours(yearAndMonth, xmId, assetId);
 		}
 		return true;

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

@@ -20,9 +20,11 @@ import org.sky.core.tool.utils.Charsets;
 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.e.XmStatusEnum;
 import org.sky.scientific.mapper.DepartmentMapper;
 import org.sky.scientific.mapper.TechnicianMapper;
 import org.sky.scientific.mapper.XmBgrzMapper;
+import org.sky.scientific.mapper.XmMapper;
 import org.sky.scientific.pojo.entity.XmBgrzEntity;
 import org.sky.scientific.pojo.vo.XmBgrzVO;
 import org.sky.scientific.service.IXmBgrzService;
@@ -35,10 +37,7 @@ import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -55,13 +54,18 @@ public class XmBgrzServiceImpl extends BaseServiceImpl<XmBgrzMapper, XmBgrzEntit
 	private final TechnicianMapper technicianMapper;
 	private final TemplateService templateService;
 	private final IXmService xmService;
+	private final XmMapper xmMapper;
 
 	@Override
 	public boolean saveBgrz(XmBgrzEntity xmBgrz) {
 		if (xmBgrz.getXmId() == null) {
 			throw new ServiceException("请选择需要变更的项目");
 		}
-		xmService.judgeXmIsOver(xmBgrz.getXmId(), null,true);
+		JSONObject byXmId = xmMapper.getXmStatusByXmId(xmBgrz.getXmId());
+		Integer status = byXmId.getInteger("status");
+		if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+			throw new ServiceException("项目已结题,不可操作");
+		}
 		xmBgrz.setBghdz(StringUtil.trimAllWhitespace(xmBgrz.getBghdz()));
 		return this.save(xmBgrz);
 	}
@@ -70,7 +74,6 @@ public class XmBgrzServiceImpl extends BaseServiceImpl<XmBgrzMapper, XmBgrzEntit
 	public IPage<XmBgrzVO> selectBgrzPage(XmBgrzEntity xmBgrz, IPage<XmBgrzVO> page) {
 		List<XmBgrzVO> voList = baseMapper.selectBgrzPage(page, xmBgrz);
 		for (XmBgrzVO vo : voList) {
-//			vo.setXmsqdw(departmentMapper.getFullNameById(vo.getXmsqdwid()));
 			if ("XMSQDWID".equalsIgnoreCase(vo.getZdmc())) {
 				// 项目申请单位
 				vo.setBgqdz(departmentMapper.getFullNameById(Long.parseLong(vo.getBgqdz())));

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

@@ -92,7 +92,7 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		if (Func.isNull(xmCostDetails.getXmId())) {
 			throw new ServiceException("参数xmId不能为空");
 		}
-		xmService.judgeXmIsOver(xmCostDetails.getXmId(), null,true);
+		xmService.judgeXmIsOver(xmCostDetails.getXmId(), DateUtil.format(xmCostDetails.getRecordDate(), DateUtil.PATTERN_YYYYMMDD),true);
 
 		if (Func.isEmpty(xmCostDetails.getId())) {
 			//新增
@@ -110,7 +110,7 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		for (Long id : ids) {
 			XmCostDetailsEntity entity = baseMapper.selectById(id);
 			if (Func.notNull(entity)) {
-				xmService.judgeXmIsOver(entity.getXmId(), null,true);
+				xmService.judgeXmIsOver(entity.getXmId(), DateUtil.format(entity.getRecordDate(), DateUtil.PATTERN_YYYYMMDD),true);
 			}
 		}
 		return baseMapper.physicalDeleteByIds(ids) > 0;
@@ -151,7 +151,7 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 			if (xmId == null) {
 				throw new ServiceException("研发项目编号[" + excel.getXmbh() + "]不存在,请检查模板数据");
 			}
-			xmService.judgeXmIsOver(xmId, null,true);
+			xmService.judgeXmIsOver(xmId, DateUtil.format(entity.getRecordDate(), DateUtil.PATTERN_YYYYMMDD),true);
 
 			entity.setXmId(xmId);
 
@@ -900,36 +900,31 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 			summary.setRyrgfy_zbh(summary.getRyrgfy_zbh().add(zbhSummary.getRyrgTotal()));
 			//费用化金额小计-人员人工费用
 			summary.setRyrgfy_fyh(summary.getRyrgfy_fyh().add(fyhSummary.getRyrgTotal()));
-			//金额合计-人员人工费用
-			summary.setRyrgfy_hjje(summary.getRyrgfy_hjje().add(summary.getRyrgfy_zbh()).add(summary.getRyrgfy_fyh()));
+
 
 			//资本化金额小计-直接投入费用
 			summary.setZjtrfy_zbh(summary.getZjtrfy_zbh().add(zbhSummary.getZjtrTotal()));
 			//费用化金额小计-直接投入费用
 			summary.setZjtrfy_fyh(summary.getZjtrfy_fyh().add(fyhSummary.getZjtrTotal()));
-			//金额合计-直接投入费用
-			summary.setZjtrfy_hjje(summary.getZjtrfy_hjje().add(summary.getZjtrfy_zbh()).add(summary.getZjtrfy_fyh()));
+
 
 			//资本化金额小计-折旧费用
 			summary.setZjfy_zbh(summary.getZjfy_zbh().add(zbhSummary.getZjfyTotal()));
 			//费用化金额小计-折旧费用
 			summary.setZjfy_fyh(summary.getZjfy_fyh().add(fyhSummary.getZjfyTotal()));
-			//金额合计-折旧费用
-			summary.setZjfy_hjje(summary.getZjfy_hjje().add(summary.getZjfy_zbh()).add(summary.getZjfy_fyh()));
+
 
 			//资本化金额小计-无形资产摊销
 			summary.setWxzctx_zbh(summary.getWxzctx_zbh().add(zbhSummary.getWxzctxTotal()));
 			//费用化金额小计-无形资产摊销
 			summary.setWxzctx_fyh(summary.getWxzctx_fyh().add(fyhSummary.getWxzctxTotal()));
-			//金额合计-无形资产摊销
-			summary.setWxzctx_hjje(summary.getWxzctx_hjje().add(summary.getWxzctx_zbh()).add(summary.getWxzctx_fyh()));
+
 
 			//资本化金额小计-新产品设计费等
 			summary.setXcpsjfd_zbh(summary.getXcpsjfd_zbh().add(zbhSummary.getXcpsjfd()));
 			//费用化金额小计-新产品设计费等
 			summary.setXcpsjfd_fyh(summary.getXcpsjfd_fyh().add(fyhSummary.getXcpsjfd()));
-			//金额合计-新产品设计费等
-			summary.setXcpsjfd_hjje(summary.getXcpsjfd_hjje().add(summary.getXcpsjfd_zbh()).add(summary.getXcpsjfd_fyh()));
+
 
 
 			//资本化金额小计-前五项小计
@@ -975,6 +970,18 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 			zbhSummary.setYxjjkcjehj(zbhSummary.getYxjjkcjehj().add(zbhSummary.getTotal()));
 		}
 
+		//金额合计-人员人工费用
+		summary.setRyrgfy_hjje(summary.getRyrgfy_hjje().add(summary.getRyrgfy_zbh()).add(summary.getRyrgfy_fyh()));
+		//金额合计-直接投入费用
+		summary.setZjtrfy_hjje(summary.getZjtrfy_hjje().add(summary.getZjtrfy_zbh()).add(summary.getZjtrfy_fyh()));
+		//金额合计-折旧费用
+		summary.setZjfy_hjje(summary.getZjfy_hjje().add(summary.getZjfy_zbh()).add(summary.getZjfy_fyh()));
+		//金额合计-无形资产摊销
+		summary.setWxzctx_hjje(summary.getWxzctx_hjje().add(summary.getWxzctx_zbh()).add(summary.getWxzctx_fyh()));
+		//金额合计-新产品设计费等
+		summary.setXcpsjfd_hjje(summary.getXcpsjfd_hjje().add(summary.getXcpsjfd_zbh()).add(summary.getXcpsjfd_fyh()));
+
+
 		summary.setTotal_hjje(summary.getTotal_zbh().add(summary.getTotal_fyh()));
 
 		//=IF(K20*0.1/0.9<L20,K20*0.1/0.9,L20)

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

@@ -90,7 +90,7 @@ public class XmDesignCostServiceImpl extends BaseServiceImpl<XmDesignCostMapper,
 				throw new ServiceException("序号[" + data.getXh() + "]的研发项目不存在,请检查模板数据");
 			}
 
-			xmService.judgeXmIsOver(xmId, null,true);
+			xmService.judgeXmIsOver(xmId, DateUtil.format(data.getRecordDate(), DateUtil.PATTERN_DATE),true);
 
 			XmDesignCostEntity entity = Objects.requireNonNull(BeanUtil.copyProperties(data, XmDesignCostEntity.class));
 			entity.setXmId(xmId);
@@ -108,7 +108,7 @@ public class XmDesignCostServiceImpl extends BaseServiceImpl<XmDesignCostMapper,
 		for (Long id : ids) {
 			XmDesignCostEntity entity = baseMapper.selectById(id);
 			if(Func.notNull(entity)){
-				xmService.judgeXmIsOver(entity.getXmId(), null,true);
+				xmService.judgeXmIsOver(entity.getXmId(), DateUtil.format(entity.getRecordDate(), DateUtil.PATTERN_DATE),true);
 			}
 		}
 		return baseMapper.physicalDeleteByIds(ids) > 0;
@@ -149,7 +149,7 @@ public class XmDesignCostServiceImpl extends BaseServiceImpl<XmDesignCostMapper,
 		if (judged != null) {
 			throw new ServiceException(judged);
 		}
-		xmService.judgeXmIsOver(xmDesignCost.getXmId(), null,true);
+		xmService.judgeXmIsOver(xmDesignCost.getXmId(), DateUtil.format(xmDesignCost.getRecordDate(), DateUtil.PATTERN_DATE),true);
 		return this.saveOrUpdate(xmDesignCost);
 	}
 

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

@@ -107,7 +107,7 @@ public class XmDirectCostServiceImpl extends BaseServiceImpl<XmDirectCostMapper,
 				if (xmId == null) {
 					throw new ServiceException("研发项目[" + excel.getXmbh() + "]不存在,请检查模板数据");
 				}
-				xmService.judgeXmIsOver(xmId, null,true);
+				xmService.judgeXmIsOver(xmId, yearAndMonth,true);
 				entity.setXmId(xmId);
 			}
 
@@ -128,7 +128,7 @@ public class XmDirectCostServiceImpl extends BaseServiceImpl<XmDirectCostMapper,
 		for (Long id : ids) {
 			XmDirectCostEntity entity = baseMapper.selectById(id);
 			if(Func.notNull(entity)){
-				xmService.judgeXmIsOver(entity.getXmId(), null,true);
+				xmService.judgeXmIsOver(entity.getXmId(), DateUtil.format(entity.getUseDate(), DateUtil.PATTERN_DATE),true);
 			}
 		}
 		return baseMapper.physicalDeleteByIds(ids) > 0;
@@ -139,7 +139,7 @@ public class XmDirectCostServiceImpl extends BaseServiceImpl<XmDirectCostMapper,
 		if (StringUtil.isBlank(xmDirectCost.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
-		xmService.judgeXmIsOver(xmDirectCost.getXmId(), null,true);
+		xmService.judgeXmIsOver(xmDirectCost.getXmId(), DateUtil.format(xmDirectCost.getUseDate(), DateUtil.PATTERN_DATE),true);
 		String judged = DateUtil.judgeDate(xmDirectCost.getUseDate(), xmDirectCost.getYearAndMonth());
 		if (judged != null) {
 			throw new ServiceException(judged);

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

@@ -102,7 +102,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 				if (jtXmIdList.contains(dbAsset.getXmId())) {
 					continue;
 				}
-				if (xmService.judgeXmIsOver(dbAsset.getXmId(), null,false)) {
+				if (xmService.judgeXmIsOver(dbAsset.getXmId(), yearAndMonth,false)) {
 					jtXmIdList.add(dbAsset.getXmId());
 					continue;
 				}
@@ -139,7 +139,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 				if (jtXmIdList.contains(ys.getXmId())) {
 					continue;
 				}
-				if (xmService.judgeXmIsOver(ys.getXmId(), null,false)) {
+				if (xmService.judgeXmIsOver(ys.getXmId(), yearAndMonth,false)) {
 					jtXmIdList.add(ys.getXmId());
 					continue;
 				}
@@ -166,7 +166,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 			}
 		}
 		if (CollectionUtil.isEmpty(insertList)) {
-			throw new ServiceException("数据已全部引用");
+			throw new ServiceException("无数据可引用");
 		}
 		return this.saveBatch(insertList);
 	}
@@ -201,7 +201,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 					throw new ServiceException("序号为[" + excel.getXh() + "]的项目不存在");
 				}
 
-				xmService.judgeXmIsOver(xmId, null,true);
+				xmService.judgeXmIsOver(xmId, yearAndMonth,true);
 			}
 
 			xmIdMap.put(xmkey, xmId);
@@ -217,7 +217,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 				if (dbAsset == null) {
 					throw new ServiceException("资产[" + excel.getZcbm() + "]不存在");
 				}
-				if (Func.equals(dbAsset.getStatus(), AssetStatusEnum.正常.getCode())) {
+				if (!Func.equals(dbAsset.getStatus(), AssetStatusEnum.正常.getCode())) {
 					throw new ServiceException("资产[" + excel.getZcbm() + "]的状态非正常");
 				}
 			}
@@ -253,7 +253,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 	public boolean physicalDeleteByIds(List<Long> ids) {
 		for (Long id : ids) {
 			XmFixedAsset fixedAsset = baseMapper.selectById(id);
-			xmService.judgeXmIsOver(fixedAsset.getXmId(), null, true);
+			xmService.judgeXmIsOver(fixedAsset.getXmId(), fixedAsset.getYearAndMonth(), true);
 		}
 		return baseMapper.physicalDeleteByIds(ids);
 	}
@@ -264,7 +264,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 
-		xmService.judgeXmIsOver(xmAsset.getXmId(), null,true);
+		xmService.judgeXmIsOver(xmAsset.getXmId(), xmAsset.getYearAndMonth(),true);
 		//获取本月数据
 		List<XmFixedAsset> thisMonthList = baseMapper.selectXmFixedAssetByYearAndMonth(xmAsset.getYearAndMonth(), xmAsset.getType());
 

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

@@ -125,7 +125,7 @@ public class XmGoodsServiceImpl extends BaseServiceImpl<XmGoodsMapper, XmGoodsEn
 				if (xmId == null) {
 					throw new ServiceException("研发项目[" + excel.getXmbh() + "]不存在,请检查模板数据");
 				}
-				xmService.judgeXmIsOver(xmId, null,true);
+				xmService.judgeXmIsOver(xmId, yearAndMonth,true);
 				entity.setXmId(xmId);
 			}
 			entity.setYearAndMonth(yearAndMonth);
@@ -140,7 +140,7 @@ public class XmGoodsServiceImpl extends BaseServiceImpl<XmGoodsMapper, XmGoodsEn
 		for (Long id : ids) {
 			XmGoodsEntity entity = baseMapper.selectById(id);
 			if (Func.notNull(entity)) {
-				xmService.judgeXmIsOver(entity.getXmId(), null,true);
+				xmService.judgeXmIsOver(entity.getXmId(), entity.getYearAndMonth(),true);
 			}
 		}
 		return baseMapper.physicalDeleteByIds(ids) > 0;
@@ -152,7 +152,7 @@ public class XmGoodsServiceImpl extends BaseServiceImpl<XmGoodsMapper, XmGoodsEn
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 
-		xmService.judgeXmIsOver(xmGoods.getXmId(), null,true);
+		xmService.judgeXmIsOver(xmGoods.getXmId(), xmGoods.getYearAndMonth(),true);
 
 		if (Func.notNull(xmGoods.getUseQuantity()) && Func.notNull(xmGoods.getUnitPrice())) {
 			xmGoods.setAmount(xmGoods.getUnitPrice().multiply(BigDecimal.valueOf(xmGoods.getUseQuantity())));

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

@@ -89,8 +89,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 		Date lastDate = DateUtil.minusMonths(DateUtil.parse(yearAndMonth, DateUtil.PATTERN_YYYYMM), 1);
 		//获取上个月数据
 		List<XmIntangibleAsset> lastMonthList = baseMapper.selectListByYearAndMonth(DateUtil.format(lastDate, DateUtil.PATTERN_YYYYMM));
-//		Map<Long, List<String>> map = lastMonthList.stream().collect(Collectors.groupingBy(XmIntangibleAsset::getXmId, Collectors.mapping(XmIntangibleAsset::getZcbm, Collectors.toList())));
-		Map<Long, List<XmIntangibleAsset>> c1 = thisMonthList.stream().collect(Collectors.groupingBy(XmIntangibleAsset::getXmId));
+ 		Map<Long, List<XmIntangibleAsset>> c1 = thisMonthList.stream().collect(Collectors.groupingBy(XmIntangibleAsset::getXmId));
 		//已结题项目列表
 		List<Long> jtXmIdList = new ArrayList<>();
 		//待新增的数据
@@ -105,7 +104,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 				if (jtXmIdList.contains(dbAsset.getXmId())) {
 					continue;
 				}
-				if (xmService.judgeXmIsOver(dbAsset.getXmId(), null, false)) {
+				if (xmService.judgeXmIsOver(dbAsset.getXmId(), yearAndMonth, false)) {
 					jtXmIdList.add(dbAsset.getXmId());
 					continue;
 				}
@@ -132,7 +131,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 				if (jtXmIdList.contains(ys.getXmId())) {
 					continue;
 				}
-				if (xmService.judgeXmIsOver(ys.getXmId(), null,false)) {
+				if (xmService.judgeXmIsOver(ys.getXmId(), yearAndMonth,false)) {
 					jtXmIdList.add(ys.getXmId());
 					continue;
 				}
@@ -147,7 +146,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 			}
 		}
 		if (CollectionUtil.isEmpty(insertList)) {
-			throw new ServiceException("数据已全部引用");
+			throw new ServiceException("无数据可引用");
 		}
 		return this.saveBatch(insertList);
 
@@ -182,7 +181,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 				if (xmId == null) {
 					throw new ServiceException("序号为[" + excel.getXh() + "]的项目不存在");
 				}
-				xmService.judgeXmIsOver(xmId, null,true);
+				xmService.judgeXmIsOver(xmId, yearAndMonth,true);
 			}
 			xmIdMap.put(xmkey, xmId);
 
@@ -228,7 +227,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 	public boolean physicalDeleteByIds(List<Long> ids) {
 		for (Long id : ids) {
 			XmIntangibleAsset intangibleAsset = baseMapper.selectById(id);
-			xmService.judgeXmIsOver(intangibleAsset.getXmId(), null,true);
+			xmService.judgeXmIsOver(intangibleAsset.getXmId(), intangibleAsset.getYearAndMonth(),true);
 		}
 		return baseMapper.physicalDeleteByIds(ids);
 	}
@@ -238,7 +237,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 		if (StringUtil.isBlank(xmAsset.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
-		xmService.judgeXmIsOver(xmAsset.getXmId(), null,true);
+		xmService.judgeXmIsOver(xmAsset.getXmId(), xmAsset.getYearAndMonth(),true);
 
 		//获取本月数据
 		List<XmIntangibleAsset> thisMonthList = baseMapper.selectListByYearAndMonth(xmAsset.getYearAndMonth());
@@ -256,7 +255,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 		if (null == xmAsset.getId()) {
 			throw new ServiceException("参数id不能为空");
 		}
-		xmService.judgeXmIsOver(xmAsset.getId(), null,true);
+		xmService.judgeXmIsOver(xmAsset.getId(), xmAsset.getYearAndMonth(),true);
 		return this.updateById(xmAsset);
 	}
 

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

@@ -104,7 +104,7 @@ public class XmOtherCostServiceImpl extends BaseServiceImpl<XmOtherCostMapper, X
 				throw new ServiceException("序号[" + data.getXh() + "]的研发项目不存在,请检查模板数据");
 			}
 
-			xmService.judgeXmIsOver(xmId, null,true);
+			xmService.judgeXmIsOver(xmId, DateUtil.format(data.getRecordDate(), DateUtil.PATTERN_DATE),true);
 
 			entity.setXmId(xmId);
 			entity.setYearAndMonth(yearAndMonth);
@@ -123,7 +123,7 @@ public class XmOtherCostServiceImpl extends BaseServiceImpl<XmOtherCostMapper, X
 		if (Func.isNull(entity.getXmId())) {
 			throw new ServiceException("参数xmId不能为空");
 		}
-		xmService.judgeXmIsOver(entity.getXmId(), null,true);
+		xmService.judgeXmIsOver(entity.getXmId(), DateUtil.format(entity.getRecordDate(), DateUtil.PATTERN_DATE),true);
 
 		String judged = DateUtil.judgeDate(entity.getRecordDate(), entity.getYearAndMonth());
 		if (judged != null) {
@@ -138,7 +138,7 @@ public class XmOtherCostServiceImpl extends BaseServiceImpl<XmOtherCostMapper, X
 		for (Long id : ids) {
 			XmOtherCostEntity entity = baseMapper.selectById(id);
 			if (Func.notNull(entity)) {
-				xmService.judgeXmIsOver(entity.getXmId(), null,true);
+				xmService.judgeXmIsOver(entity.getXmId(), DateUtil.format(entity.getRecordDate(), DateUtil.PATTERN_DATE),true);
 			}
 		}
 		return baseMapper.physicalDeleteByIds(ids);

+ 20 - 8
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java

@@ -99,13 +99,12 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			if (dateStr.length() == 8) {
 				selDate = DateUtil.parse(dateStr, DateUtil.PATTERN_YYYYMMDD);
 			} else if (dateStr.length() == 6) {
-
-//				selDate = DateUtil.parse(DateUtil.PATTERN_YYYYMM);
+				selDate = DateUtil.parse(dateStr, DateUtil.PATTERN_YYYYMM);
 			}
 		}
 		Integer status = byXmId.getInteger("status");
-		Date xmjssj = byXmId.getDate("xmjssj");
-		if (Func.equals(status, XmStatusEnum.已结题.getCode()) || xmjssj.compareTo(selDate) < 0) {
+ 		Date xmjssj = byXmId.getDate("xmjssj");
+ 		if (Func.equals(status, XmStatusEnum.已结题.getCode()) || xmjssj.compareTo(selDate) < 0) {
 			if (isThrowEx) {
 				String xmbh = byXmId.getString("xmbh");
 				throw new ServiceException("项目【" + xmbh + "】已结题/已结束,不可操作");
@@ -148,8 +147,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			if (Func.isNotEmpty(validate)) {
 				throw new ServiceException(String.join("\n", validate));
 			}
-			judgeXmIsOver(xm.getId(), null, true);
-			if (xm.getXmyszemx() != null) {
+ 			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);
 				if (total.compareTo(BigDecimal.ZERO) <= 0) {
@@ -332,7 +330,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 		XmYszbVO vo = baseMapper.selectYszb(xmId);
 
 		vo.setTotal(vo.getRyrgfy().add(vo.getZjtrfy()).add(vo.getZjfyycqdtfy()).add(vo.getWxzctxfy()).add(vo.getSjfy()).add(vo.getZbtsysyfy()).add(vo.getWtwbyjkffy()).add(vo.getQtfy()));
-		if (BigDecimal.ZERO.compareTo(vo.getTotal()) <= 0) {
+		if (vo.getTotal().compareTo(BigDecimal.ZERO) <= 0) {
 			vo.setRyrgfyRate(0.00);
 			vo.setZjtrfyRate(0.00);
 			vo.setZjfyycqdtfyRate(0.00);
@@ -352,7 +350,12 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			vo.setQtfyRate(vo.getQtfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
 		}
 
-		vo.setTotalRate(1.00);
+ 		BigDecimal totalRate = BigDecimal.ZERO;
+		if(StringUtil.isNotBlank(vo.getXmyszemx())){
+			BigDecimal temp =  JSONObject.parseArray(vo.getXmyszemx(), JSONObject.class).stream().map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.UP);
+			totalRate = vo.getTotal().divide(BigDecimal.valueOf(10000L)).divide(temp,4, RoundingMode.UP).multiply(BigDecimal.valueOf(100)) ;
+		}
+		vo.setTotalRate(Math.min(totalRate.doubleValue(), 100.0));
 		vo.setXmsqdw(departmentMapper.getFullNameById(vo.getXmsqdwid()));
 		return vo;
 	}
@@ -372,6 +375,15 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 		vo.setQtfy(vo.getQtfy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
 		vo.setTotal(vo.getTotal().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
 
+		vo.setRyrgfyRate(vo.getRyrgfyRate()*100.00);
+		vo.setZjtrfyRate(vo.getZjtrfyRate()*100.00);
+		vo.setZjfyycqdtfyRate(vo.getZjfyycqdtfyRate()*100.00);
+		vo.setWxzctxfyRate(vo.getWxzctxfyRate()*100.00);
+		vo.setSjfyRate(vo.getSjfyRate()*100.00);
+		vo.setZbtsysyfyRate(vo.getZbtsysyfyRate()*100.00);
+		vo.setWtwbyjkffyRate(vo.getWtwbyjkffyRate()*100.00);
+		vo.setQtfyRate(vo.getQtfyRate()*100.00);
+
 		vo.setXmkssjStr(Func.notNull(vo.getXmkssj()) ? DateUtil.format(vo.getXmkssj(), "yyyy年MM月dd日") : null);
 		vo.setXmjssjStr(Func.notNull(vo.getXmjssj()) ? DateUtil.format(vo.getXmjssj(), "yyyy年MM月dd日") : null);
 

+ 7 - 6
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmTechnicianHoursServiceImpl.java

@@ -235,7 +235,7 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 			throw new ServiceException("参数unicode不能为空");
 		}
 
-		xmService.judgeXmIsOver(dto.getXmId(), null,true);
+
 
 		//获取考勤数据,具体人员在某个月的考勤明细
 		List<DailyAttendance> dailyAttendanceList = attendanceMapper.selectDailyAttendanceByUnicodeAndMonth(dto.getUnicode(), dto.getYearAndMonth());
@@ -252,6 +252,9 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 		List<XmTechnicianHours> updateList = new ArrayList<>();
 
 		for (DailyAttendance dailyAttendance : dto.getDailyAttendances()) {
+
+			xmService.judgeXmIsOver(dto.getXmId(), dailyAttendance.getWorkDate(),true);
+
 			//查询一天的考勤时长
 			double attendanceHours = dailyAttendanceList.stream().filter(e -> Objects.equals(e.getWorkDate(), dailyAttendance.getWorkDate())).mapToDouble(DailyAttendance::getWorkHours).sum();
 			if (attendanceHours <= 0) {
@@ -315,8 +318,7 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 		for (int i = 0; i < xmAndUnicodeList.size(); i++) {
 			JSONObject object = xmAndUnicodeList.getJSONObject(i);
 			Long xmId = object.getLong("xmId");
-			xmService.judgeXmIsOver(xmId, null,true);
-			String unicode = object.getString("unicode");
+ 			String unicode = object.getString("unicode");
 			String yearAndMonth = dto.getString("yearAndMonth");
 			baseMapper.clearByXmUnicodeMonth(yearAndMonth, xmId, unicode);
 		}
@@ -332,8 +334,7 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 		for (int i = 0; i < xmAndUnicodeList.size(); i++) {
 			JSONObject object = xmAndUnicodeList.getJSONObject(i);
 			Long xmId = object.getLong("xmId");
-			xmService.judgeXmIsOver(xmId, null,true);
-			String unicode = object.getString("unicode");
+ 			String unicode = object.getString("unicode");
 			String yearAndMonth = dto.getString("yearAndMonth");
 			baseMapper.deleteByXmUnicodeMonth(yearAndMonth, xmId, unicode);
 		}
@@ -578,7 +579,7 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 		//过滤掉已结题项目
 		List<Long> jtXmIdList = new ArrayList<>();
 		for (XmTechnicianEntity entity : list) {
-			if (xmService.judgeXmIsOver(entity.getXmId(), null,false)) {
+			if (xmService.judgeXmIsOver(entity.getXmId(), yearAndMonth,false)) {
 				jtXmIdList.add(entity.getXmId());
 			}
 		}

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

@@ -61,10 +61,7 @@ public class XmWwxmCostServiceImpl extends BaseServiceImpl<XmWwxmCostMapper, XmW
 		if (judged != null) {
 			throw new ServiceException(judged);
 		}
-		XmWwxmEntity wwxm = wwxmMapper.selectById(cost.getWwId());
-		if (Func.notNull(wwxm)) {
-			xmService.judgeXmIsOver(wwxm.getXmId(), null,true);
-		}
+
 		boolean result = false;
 		if (Func.isNull(cost.getId())) {
 			result = this.save(cost);
@@ -95,7 +92,8 @@ public class XmWwxmCostServiceImpl extends BaseServiceImpl<XmWwxmCostMapper, XmW
 			if (xmId == null) {
 				throw new ServiceException("序号为[" + data.getSerialNumber() + "]的项目不存在");
 			}
-			xmService.judgeXmIsOver(xmId, null,true);
+
+			xmService.judgeXmIsOver(xmId, yearAndMonth,true);
 
 			LambdaQueryWrapper<XmWwxmEntity> eq = Wrappers.<XmWwxmEntity>lambdaQuery()
 				.eq(XmWwxmEntity::getXmId, xmId)
@@ -125,15 +123,6 @@ public class XmWwxmCostServiceImpl extends BaseServiceImpl<XmWwxmCostMapper, XmW
 	@Override
 	@Transactional
 	public boolean physicalDeleteByIds(List<Long> ids) {
-		for (Long id : ids) {
-			XmWwxmCost cost = baseMapper.selectById(id);
-			if (Func.notNull(cost)) {
-				XmWwxmEntity wwxm = wwxmMapper.selectById(cost.getWwId());
-				if (Func.notNull(wwxm)) {
-					xmService.judgeXmIsOver(wwxm.getXmId(), null,true);
-				}
-			}
-		}
 		return baseMapper.physicalDeleteByIds(ids);
 	}
 

BIN
kd-service/kd-scientific/src/main/resources/export-template/研发项目管理/预算编制/研发项目经费预算表.xls