Browse Source

000000007

zhoulisky 6 months ago
parent
commit
400b1e1fa6
16 changed files with 130 additions and 97 deletions
  1. 14 14
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/AssetExcel.java
  2. 19 36
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/SalaryExcel.java
  3. 2 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/handle/CustomCellStyleHandler.java
  4. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmIntangibleAssetMapper.xml
  5. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.java
  6. 6 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.xml
  7. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/YsWxzctxfyMapper.xml
  8. 29 19
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AssetServiceImpl.java
  9. 4 6
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java
  10. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmAssetHoursServiceImpl.java
  11. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java
  12. 7 5
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmFixedAssetServiceImpl.java
  13. 11 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmIntangibleAssetServiceImpl.java
  14. 5 2
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmJtbServiceImpl.java
  15. 9 5
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java
  16. 19 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/YsZjfyycqdtfyServiceImpl.java

+ 14 - 14
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/AssetExcel.java

@@ -3,13 +3,13 @@ package org.sky.scientific.excel;
 
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.sky.core.tool.utils.DateUtil;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -33,11 +33,11 @@ public class AssetExcel implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	@ColumnWidth(20)
-	@ExcelProperty("资产编码")
+	@ExcelProperty(index = 1, value = "资产编码")
 	private String zcbm;
 
 	@ColumnWidth(20)
-	@ExcelProperty("资产名称")
+	@ExcelProperty(index = 2, value = "资产名称")
 	private String zcmc;
 
 	@ColumnWidth(20)
@@ -45,44 +45,44 @@ public class AssetExcel implements Serializable {
 	private String yearAndMonth;
 
 	@ColumnWidth(20)
-	@ExcelProperty("资产类别")
+	@ExcelProperty(index = 4, value = "资产类别")
 	private String zclb;
 
 	@ColumnWidth(20)
-	@ExcelProperty("功率")
+	@ExcelProperty(index = 3, value = "功率")
 	private String gl;
 
 	@ColumnWidth(20)
-	@ExcelProperty("用途")
+	@ExcelProperty(index = 5, value = "用途")
 	private String yt;
 
 	@ColumnWidth(20)
-	@ExcelProperty("开始日期")
-	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
+	@ExcelProperty(index = 6, value = "开始日期")
+	@DateTimeFormat(DateUtil.PATTERN_DATE)
 	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private Date kssj;
 
 	@ColumnWidth(20)
-	@ExcelProperty("使用寿命/月")
+	@ExcelProperty(index = 7, value = "使用寿命/月")
 	private Integer sysm;
 
 	@ColumnWidth(20)
-	@ExcelProperty("已使用月数")
+	@ExcelProperty(index = 8, value = "已使用月数")
 	private Integer ysysm;
 
 	@ColumnWidth(20)
-	@ExcelProperty("资产原值")
+	@ExcelProperty(index = 9, value = "资产原值")
 	private BigDecimal zcyz;
 
 	@ColumnWidth(20)
-	@ExcelProperty("净残值")
+	@ExcelProperty(index = 10, value = "净残值")
 	private Double jcz;
 
 	@ColumnWidth(20)
-	@ExcelProperty("月折旧额/月摊销额")
+	@ExcelProperty(index = 11, value = "月折旧额/月摊销额")
 	private BigDecimal yzje;
 
-	@ExcelProperty("状态")
+	@ExcelProperty(index = 12, value = "状态")
 	private String statusName;
 
 }

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

@@ -2,14 +2,11 @@
 package org.sky.scientific.excel;
 
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import com.alibaba.excel.annotation.write.style.ContentRowHeight;
-import com.alibaba.excel.annotation.write.style.HeadRowHeight;
-import java.io.Serializable;
 import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 
@@ -20,68 +17,54 @@ import java.math.BigDecimal;
  * @since 2025-06-19
  */
 @Data
-@ColumnWidth(25)
-@HeadRowHeight(20)
-@ContentRowHeight(18)
 public class SalaryExcel implements Serializable {
 
 	@Serial
 	private static final long serialVersionUID = 1L;
 
-	@ColumnWidth(20)
-	@ExcelProperty("序号")
+	@ExcelProperty(index = 0, value = "序号")
 	private String xh;
 
-	@ColumnWidth(40)
-	@ExcelProperty("工号")
+	@ExcelProperty(index = 2, value = "姓名")
+	private String name;
+
+	@ExcelProperty(index = 3, value = "工号")
 	private String number;
 
-	@ColumnWidth(50)
-	@ExcelProperty("身份证")
+ 	@ExcelProperty(index = 4, value = "身份证")
 	private String idCard;
 
-	@ColumnWidth(20)
-	@ExcelProperty("工资(元)")
+ 	@ExcelProperty(index = 6, value = "工资(元)")
 	private BigDecimal averageMonthlySalary;
 
-	@ColumnWidth(20)
-	@ExcelProperty("养老保险单位部分(元)")
+ 	@ExcelProperty(index = 7, value = "养老保险单位部分(元)")
 	private BigDecimal pensionInsurance;
 
-	@ColumnWidth(20)
-	@ExcelProperty("医疗保险单位部分(元)")
+ 	@ExcelProperty(index = 8, value = "医疗保险单位部分(元)")
 	private BigDecimal medicalInsurance;
 
-	@ColumnWidth(20)
-	@ExcelProperty("失业保险单位部分(元)")
+ 	@ExcelProperty(index = 9, value = "失业保险单位部分(元)")
 	private BigDecimal unemploymentInsurance;
 
-	@ColumnWidth(20)
-	@ExcelProperty("工伤保险单位部分(元)")
+ 	@ExcelProperty(index = 10, value = "工伤保险单位部分(元)")
 	private BigDecimal injuryInsurance;
 
-	@ColumnWidth(20)
-	@ExcelProperty("生育保险单位部分(元)")
+ 	@ExcelProperty(index = 11, value = "生育保险单位部分(元)")
 	private BigDecimal maternityInsurance;
 
-	@ColumnWidth(20)
-	@ExcelProperty("公积金单位部分(元)")
+ 	@ExcelProperty(index = 13, value = "公积金单位部分(元)")
 	private BigDecimal providentFund;
 
-	@ColumnWidth(20)
-	@ExcelProperty("奖金(元)")
+ 	@ExcelProperty(index = 14, value = "奖金(元)")
 	private BigDecimal bonus;
 
-	@ColumnWidth(20)
-	@ExcelProperty("福利费(元)")
+ 	@ExcelProperty(index = 15, value = "福利费(元)")
 	private BigDecimal benefit;
 
-	@ColumnWidth(20)
-	@ExcelProperty("补充养老保险(元)")
+ 	@ExcelProperty(index = 16, value = "补充养老保险(元)")
 	private BigDecimal pensionInsuranceBc;
 
-	@ColumnWidth(20)
-	@ExcelProperty("补充医疗保险(元)")
+ 	@ExcelProperty(index = 17, value = "补充医疗保险(元)")
 	private BigDecimal medicalInsuranceBc;
 
 }

+ 2 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/handle/CustomCellStyleHandler.java

@@ -17,6 +17,8 @@ public class CustomCellStyleHandler implements CellWriteHandler {
 		//必须这么获取,否则设置的样式不生效
 		CellStyle cellStyle = workbook.createCellStyle();
 
+ 		sheet.setColumnWidth(0, 5*256);
+
 		// 设置水平和垂直居中
 		cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 		cellStyle.setAlignment(HorizontalAlignment.CENTER);

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

@@ -23,7 +23,7 @@
 
     <select id="selectListByYearAndMonth"
             resultMap="ResultMap">
-        SELECT xa.*,asset.zcbm,t.name as user_name
+        SELECT xa.*,asset.zcbm,t.name as user_name,asset.status as 'asset.status'
         FROM kd_xm_intangible_asset xa
         inner JOIN kd_asset asset ON xa.ZCBM=asset.ZCBM and asset.year_and_month = #{yearAndMonth}
         LEFT JOIN kd_technician t on t.unicode=xa.user_unicode and t.year_and_month = #{yearAndMonth}

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

@@ -100,5 +100,5 @@ public interface XmMapper extends BaseMapper<XmEntity> {
 
 	Long countXmfzrByUnicodeAndYearMonth(@Param("unicode") String unicode, @Param("yearAndMonth") String yearAndMonth);
 
-	Integer getXmStatusByXmId(@Param("xmId") Long xmId);
+	JSONObject getXmStatusByXmId(@Param("xmId") Long xmId);
 }

+ 6 - 3
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.xml

@@ -179,8 +179,11 @@
         where id in <foreach item="xmId" collection="xmIdList" separator="," open="(" close=")" index="index">#{xmId}</foreach>
     </select>
 
-    <select id="getXmStatusByXmId" parameterType="java.lang.Long" resultType="java.lang.Integer">
-        SELECT COALESCE(get_xm_info(id,'STATUS', null),STATUS) FROM kd_xm where id = #{xmId}
+    <select id="getXmStatusByXmId" parameterType="java.lang.Long" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            COALESCE(get_xm_info(id,'STATUS', null),STATUS) as status,
+            COALESCE(get_xm_info(id,'XMJSSJ', null),XMJSSJ) as xmjssj
+        FROM kd_xm where id = #{xmId}
     </select>
 
     <select id="getXmIdByXmmcOrXmbh" resultType="java.lang.Long">
@@ -219,7 +222,7 @@
                 COALESCE(get_xm_info(xm.id,'XMJSSJ', #{ew.yearAndMonth}),XMJSSJ) AS XMJSSJ
             FROM kd_xm xm
             WHERE
-            xm.status = 0
+            xm.status = 1
             and #{ew.yearAndMonth} between DATE_FORMAT(XMKSSJ, '%Y') and DATE_FORMAT(COALESCE(get_xm_info(xm.id,'XMJSSJ', #{ew.yearAndMonth}),XMJSSJ),'%Y')
             <if test="ew.xmmc != null and ew.xmmc != ''">and COALESCE(get_xm_info(xm.id,'XMMC', #{ew.yearAndMonth}),XMMC) like concat('%',#{ew.xmmc},'%')</if>
             <if test="ew.xmbh!=null and ew.xmbh!=''">and xm.xmbh like concat('%',#{ew.xmbh},'%')</if>

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

@@ -39,7 +39,7 @@
     </select>
 
     <select id="selectByYearAndMonth" resultMap="ResultVoMap">
-        SELECT xa.*, s.YZJE,s.zcbm
+        SELECT xa.*, s.YZJE,s.zcbm,s.status as 'zcEntity.status'
         FROM kd_ys_wxzctxfy xa
         left join kd_asset s on s.id = XA.asset_id
         left join

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

@@ -87,13 +87,14 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 		//使用寿命-已使用月份数=0时,即已足额折旧
 //			仪器设置的算法:当前时间为2025年01月-2024年5月,差额为9个月,因为折旧从次月开始,所以已使用月数为8个月(即9-1=8),再将使用寿命-已使用月份数=0时,即已足额折旧。
 //			无形资产:当月即摊销,不需要-1
+//
+//		long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(DateUtil.parse(asset.getYearAndMonth(), DateUtil.PATTERN_YYYYMM), asset.getKssj(), true);
+////			这里
+//		if (!isFixedAsset(asset.getZclb())) {
+//			ysysm++;
+//		}
+		asset.setYsysm(getYsysm(asset.getYearAndMonth(), asset.getKssj(), asset.getZclb()));
 
-		long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(DateUtil.parse(asset.getYearAndMonth(), DateUtil.PATTERN_YYYYMM), asset.getKssj(), true);
-//			这里
-		if (!isFixedAsset(asset.getZclb())) {
-			ysysm++;
-		}
-		asset.setYsysm((int) ysysm);
 		asset.setStatus((asset.getSysm() - asset.getYsysm() <= 0) ? AssetStatusEnum.已足额折旧.getCode() : AssetStatusEnum.正常.getCode());
 		return this.save(asset);
 	}
@@ -107,13 +108,13 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 		List<String> idenfifierList = new ArrayList<>(dbAssetList.stream().map(tmp -> tmp.getZcbm() + ":" + tmp.getZcmc()).toList());
 
 		for (AssetExcel excel : data) {
-			AssetEntity zc = Objects.requireNonNull(BeanUtil.copyProperties(excel, AssetDTO.class));
+			AssetEntity asset = Objects.requireNonNull(BeanUtil.copyProperties(excel, AssetDTO.class));
 			String identifier = excel.getZcbm() + ":" + excel.getZcmc();
 			if (idenfifierList.contains(identifier)) {
 				throw new ServiceException("数据已存在,导入失败!");
 			}
 			idenfifierList.add(identifier);
-			zc.setYearAndMonth(yearAndMonth);
+			asset.setYearAndMonth(yearAndMonth);
 			//yearAndMonth 是否存在该物资
 			LambdaQueryWrapper<AssetEntity> queryWrapper = Wrappers.lambdaQuery();
 			queryWrapper.eq(AssetEntity::getZcbm, excel.getZcbm());
@@ -122,13 +123,13 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 //				throw new ServiceException("资产编号【" + excel.getZcbm() + "】已存在");
 				continue;
 			}
-
-			if (Func.notNull(zc.getJcz())) {
-				zc.setJcz(Math.min(zc.getJcz(), 1.0));
+			if (Func.notNull(asset.getJcz())) {
+				asset.setJcz(Math.min(asset.getJcz(), 1.0));
 			}
+			asset.setYsysm(getYsysm(yearAndMonth, asset.getKssj(), asset.getZclb()));
 			AssetStatusEnum assetStatusEnum = Arrays.stream(AssetStatusEnum.values()).filter(temp -> temp.getName().equalsIgnoreCase(excel.getStatusName())).findFirst().orElse(AssetStatusEnum.正常);
-			zc.setStatus(assetStatusEnum.getCode());
-			this.save(zc);
+			asset.setStatus(assetStatusEnum.getCode());
+			this.save(asset);
 		}
 	}
 
@@ -152,7 +153,7 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 			}
 			temp.setYearAndMonth(zc.getYearAndMonth());
 			if (Func.equals(temp.getStatus(), AssetStatusEnum.正常.getCode())) {
-				temp.setYsysm(Func.toInt(temp.getYsysm(), 0) + 1);
+				temp.setYsysm(getYsysm(temp.getYearAndMonth(), temp.getKssj(), temp.getZclb()));
 				//使用寿命-已使用月份数=0时,即已足额折旧
 				if (temp.getSysm() - temp.getYsysm() <= 0) {
 					temp.setStatus(AssetStatusEnum.已足额折旧.getCode());
@@ -324,6 +325,19 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 		return this.updateOtherMonthAsset(asset);
 	}
 
+	private Integer getYsysm(String yearAndMonth, Date kssj, String zclb){
+		Date month = DateUtil.parse(yearAndMonth, DateUtil.PATTERN_YYYYMM);
+		long ysysm = 0;
+		if(month.compareTo(kssj) >=0 || (cn.hutool.core.date.DateUtil.isSameMonth(month, kssj) && new Date().compareTo(kssj) >=0)){
+			//2025年01月-2024年5月 = 8个月
+			ysysm = cn.hutool.core.date.DateUtil.betweenMonth(month, kssj, true);
+			if (!Func.equals("仪器设备", zclb)) {
+				ysysm++;
+			}
+		}
+		return (int)ysysm;
+	}
+
 	public boolean updateOtherMonthAsset(AssetEntity asset) {
 		LambdaQueryWrapper<AssetEntity> queryWrapper = Wrappers.<AssetEntity>lambdaQuery()
 			.eq(AssetEntity::getZcbm, asset.getZcbm()).ge(AssetEntity::getYearAndMonth, asset.getYearAndMonth());
@@ -338,12 +352,8 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 			updateEntity.setZgs(null);
 
 			if (Func.equals(entity.getStatus(), AssetStatusEnum.正常.getCode()) || Func.equals(entity.getStatus(), AssetStatusEnum.停用.getCode())) {
-				long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(DateUtil.parse(entity.getYearAndMonth(), DateUtil.PATTERN_YYYYMM), asset.getKssj(), true);
-				if (!Func.equals("仪器设备", updateEntity.getZclb())) {
-					ysysm++;
-				}
-				updateEntity.setYsysm((int) ysysm);
 
+				updateEntity.setYsysm(getYsysm(entity.getYearAndMonth(), entity.getKssj(), entity.getZclb()));
 				//使用寿命-已使用月份数=0时,即已足额折旧
 				if (updateEntity.getSysm() - updateEntity.getYsysm() <= 0) {
 					updateEntity.setStatus(AssetStatusEnum.已足额折旧.getCode());

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

@@ -393,8 +393,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 	public boolean submitXmTechnicianMonthly(XmTechnicianEntity entity) {
 		xmService.judgeXmIsOver(entity.getXmId(), true);
 
-		int affectNum = 0;
-		entity.setId(null);
+ 		entity.setId(null);
 		entity.setYearAndMonth(entity.getYearAndMonth());
 		entity.setCreateUser(SecureUtil.getUserId());
 		entity.setUpdateUser(SecureUtil.getUserId());
@@ -403,12 +402,11 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 			eq(XmTechnicianEntity::getYearAndMonth, entity.getYearAndMonth()).
 			eq(XmTechnicianEntity::getUnicode, entity.getUnicode()).
 			eq(XmTechnicianEntity::getXmId, entity.getXmId());
-		if (xmTechnicianMapper.selectCount(wrapper) == 0) {
-			affectNum = xmTechnicianMapper.insert(entity);
-		} else {
+		if (xmTechnicianMapper.selectCount(wrapper) > 0) {
 			throw new ServiceException("科技人员已是项目在[" + entity.getYearAndMonth() + "]的参研人员,请勿重复新增");
 		}
-		return affectNum == 1;
+
+		return xmTechnicianMapper.insert(entity) > 0;
 	}
 
 	@Override

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

@@ -271,9 +271,9 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 			List<List<Object>> data = buildData(list, year, month);
 			// 导出Excel(包含合并单元格策略)
 			EasyExcel.write(os)
+				.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
 				.registerWriteHandler(new AssetWorkMergeStrategy(year, month))
 				.registerWriteHandler(new CustomCellStyleHandler())
-				.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
 				.autoCloseStream(true)
 				.sheet("每月仪器设备工时打卡")
 				.doWrite(data);

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

@@ -575,7 +575,7 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 					summary.setZbtsfyysyfyTotal(summary.getZbtsfyysyfyTotal().add(item.getAmount()));
 				} else if (Arrays.asList("53010107", "53010207").contains(item.getL3Code())) {
 					//委托外部研究开发费用
-					summary.setWwyfTotal(summary.getWwyfTotal().add(item.getAmount()));
+					summary.setWwyfTotal(summary.getWwyfTotal().add(item.getAmount()).multiply(BigDecimal.valueOf(0.8)));
 				} else if (Arrays.asList("53010108", "53010208").contains(item.getL3Code())) {
 					//7-1、其他费用
 					summary.setQtfyTotal(summary.getQtfyTotal().add(item.getAmount()));

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

@@ -106,7 +106,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 					jtXmIdList.add(dbAsset.getXmId());
 					continue;
 				}
-				if(Func.equals(dbAsset.getAsset().getStatus(), AssetStatusEnum.已足额折旧.getCode())){
+				if(!Func.equals(dbAsset.getAsset().getStatus(), AssetStatusEnum.正常.getCode())){
 					continue;
 				}
 				XmFixedAsset asset = new XmFixedAsset();
@@ -196,8 +196,9 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 				if (dbAsset == null) {
 					throw new ServiceException("序号为[" + excel.getXh() + "]的资产不存在");
 				}
-				if(Func.equals(dbAsset.getStatus(), AssetStatusEnum.已足额折旧.getCode())){
-					throw new ServiceException("序号为[" + excel.getXh() + "]的资产已足额折旧/摊销");
+				if(Func.equals(dbAsset.getStatus(), AssetStatusEnum.正常.getCode())){
+//					throw new ServiceException("序号为[" + excel.getXh() + "]的资产已足额折旧/摊销");
+					throw new ServiceException("序号为[" + excel.getXh() + "]的资产状态非正常");
 				}
 			}
 			assetIdMap.put(assetkey, dbAsset);
@@ -240,8 +241,9 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 			throw new ServiceException("资产已配置到项目中");
 		}
 		AssetEntity dbAsset = assetMapper.selectByYearAndMonthAndBmOrMc(xmAsset.getYearAndMonth(), xmAsset.getZcbm(), null);
-		if (Func.notNull(dbAsset) && Func.equals(dbAsset.getStatus(), AssetStatusEnum.已足额折旧.getCode())) {
-			throw new ServiceException("资产已足额折旧/摊销");
+		if (Func.notNull(dbAsset) && !Func.equals(dbAsset.getStatus(), AssetStatusEnum.正常.getCode())) {
+//			throw new ServiceException("资产已足额折旧/摊销");
+			throw new ServiceException("资产状态非正常");
 		}
 		return this.save(xmAsset);
 	}

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

@@ -109,6 +109,9 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 					jtXmIdList.add(dbAsset.getXmId());
 					continue;
 				}
+				if(!Func.equals(dbAsset.getAsset().getStatus(), AssetStatusEnum.正常.getCode())){
+					continue;
+				}
 				XmIntangibleAsset asset = new XmIntangibleAsset();
 				asset.setYearAndMonth(yearAndMonth);
 				asset.setXmId(dbAsset.getXmId());
@@ -123,7 +126,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 				throw new ServiceException("项目预算表中没有无形资产");
 			}
 			for (YsWxzctxfyVO ys : ysList) {
-				if (Func.isNotEmpty(c1.get(ys.getXmId())) && c1.get(ys.getXmId()).stream().anyMatch(item -> Func.equals(item.getZcbm(), ys.getZcbm()))) {
+				if (Func.isNotEmpty(c1.get(ys.getXmId())) && c1.get(ys.getXmId()).stream().anyMatch(item -> Func.equals(item.getZcbm(), ys.getZcEntity().getZcbm()))) {
 					continue;
 				}
 				if (jtXmIdList.contains(ys.getXmId())) {
@@ -133,6 +136,9 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 					jtXmIdList.add(ys.getXmId());
 					continue;
 				}
+				if(!Func.equals(ys.getZcEntity().getStatus(), AssetStatusEnum.正常.getCode())){
+					continue;
+				}
 				XmIntangibleAsset asset = new XmIntangibleAsset();
 				asset.setYearAndMonth(yearAndMonth);
 				asset.setXmId(ys.getXmId());
@@ -197,6 +203,10 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 			}
 			assetIdMap.put(assetkey, dbAsset);
 
+			if(!Func.equals(dbAsset.getStatus(), AssetStatusEnum.正常.getCode())){
+				throw new ServiceException("序号为[" + excel.getXh() + "]的资产状态非正常");
+			}
+
 			XmIntangibleAsset xmAsset = new XmIntangibleAsset();
 			xmAsset.setYearAndMonth(yearAndMonth);
 			xmAsset.setXmId(xmId);

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

@@ -73,8 +73,11 @@ public class XmJtbServiceImpl extends BaseServiceImpl<XmJtbMapper, XmJtbEntity>
 		if (Func.isNull(xmVO)) {
 			throw new ServiceException("研发项目不存在");
 		}
-		if (Func.notNull(xmJtb.getTbsj()) && !cn.hutool.core.date.DateUtil.isSameDay(xmVO.getXmjssj(), xmJtb.getTbsj())) {
-			throw new ServiceException("填报时间与项目结束时间不一致");
+
+		if (!Func.equals(xmJtb.getStatus(), XmStatusEnum.暂存.getCode())) {
+			if (Func.notNull(xmJtb.getTbsj()) && !cn.hutool.core.date.DateUtil.isSameDay(xmVO.getXmjssj(), xmJtb.getTbsj())) {
+				throw new ServiceException("填报时间与项目结束时间不一致");
+			}
 		}
 
 		if (xmJtb.getStatus() == XmStatusEnum.已结题.getCode()) {

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

@@ -82,10 +82,15 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 	 * @param xmId
 	 */
 	public boolean judgeXmIsOver(Long xmId, boolean isThrowEx) {
-		Integer status = baseMapper.getXmStatusByXmId(xmId);
-		if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+		JSONObject byXmId = baseMapper.getXmStatusByXmId(xmId);
+		if(Func.isNull(byXmId)){
+			return false;
+		}
+		Integer status = byXmId.getInteger("status");
+		Date xmjssj = byXmId.getDate("xmjssj");
+		if (Func.equals(status, XmStatusEnum.已结题.getCode()) || xmjssj.compareTo(new Date()) < 0) {
 			if(isThrowEx){
-				throw new ServiceException("项目已结题,不可操作");
+				throw new ServiceException("项目已结题/已到期,不可操作");
 			}else {
 				return true;
 			}
@@ -130,8 +135,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 		if (Func.isNull(xm)) {
 			throw new ServiceException("项目不存在");
 		}
-		Integer status = baseMapper.getXmStatusByXmId(xmId);
-		xm.setStatus(status);
+		xm.setStatus(baseMapper.getXmStatusByXmId(xmId).getInteger("status"));
 		xm.setXmfzrxm(Func.toStr(technicianMapper.getNameById(xm.getXmfzr()), ""));
 		xm.setXmsqdw(Func.toStr(departmentMapper.getFullNameById(xm.getXmsqdwid()), ""));
 		return BeanUtil.copyProperties(xm, XmVO.class);

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

@@ -19,6 +19,7 @@ import org.sky.core.mp.support.Query;
 import org.sky.core.tool.utils.BeanUtil;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.Func;
+import org.sky.scientific.e.AssetStatusEnum;
 import org.sky.scientific.excel.YsZjfyycqdtfyExcel;
 import org.sky.scientific.mapper.AssetMapper;
 import org.sky.scientific.mapper.XmMapper;
@@ -65,6 +66,13 @@ public class YsZjfyycqdtfyServiceImpl extends BaseServiceImpl<YsZjfyycqdtfyMappe
 		if(entity.getXmId() == null){
 			throw new ServiceException("请选择科研项目");
 		}
+		AssetEntity dbAsset = assetMapper.selectById(entity.getAssetId());
+		if(Func.isNull(dbAsset)){
+			throw new ServiceException("资产不存在");
+		}
+		if(!Func.equals(AssetStatusEnum.正常.getCode(),dbAsset.getStatus())){
+			throw new ServiceException("资产状态非正常");
+		}
 		List<YsZjfyycqdtfyEntity> dbList = baseMapper.selectList(Wrappers.<YsZjfyycqdtfyEntity>lambdaQuery().eq(YsZjfyycqdtfyEntity::getXmId, entity.getXmId()));
 		if(Func.isEmpty(dbList)){
 			return this.saveOrUpdate( entity);
@@ -116,7 +124,6 @@ public class YsZjfyycqdtfyServiceImpl extends BaseServiceImpl<YsZjfyycqdtfyMappe
 		List<YsZjfyycqdtfyEntity> insertList = new ArrayList<>();
 		int batchCount = 20;
 		for (YsZjfyycqdtfyExcel excel : dataList) {
-
 			if(Func.isBlank(excel.getZcmc())){
 				throw new ServiceException("序号["+excel.getXh()+"]的资产名称为空");
 			}
@@ -134,6 +141,17 @@ public class YsZjfyycqdtfyServiceImpl extends BaseServiceImpl<YsZjfyycqdtfyMappe
 				throw new ServiceException("序号["+excel.getXh()+"]的资产已在预算表中");
 			}
 
+			//todo 判断资产状态是否正常
+			Optional<Integer> any = dbAssetList.stream()
+				.filter(asset -> Func.equals(asset.getZcmc(), excel.getZcmc()))
+				.map(AssetEntity::getStatus).findAny();
+			if(any.isPresent()){
+				Integer assetStatus = any.get();
+				if(!Func.equals(assetStatus, AssetStatusEnum.正常.getCode())){
+					continue;
+				}
+			}
+
 			BeanUtil.copyProperties(excel, entity);
 			entity.setAssetId(list.get(0));
 			insertList.add(entity);