Browse Source

000000006

zhoulisky 6 months ago
parent
commit
5abade757b
42 changed files with 79 additions and 45 deletions
  1. BIN
      doc/xls导入模板/基础数据管理/企业会计科目设置.xlsx
  2. BIN
      doc/xls导入模板/基础数据管理/企业技术人员名单.xlsx
  3. BIN
      doc/xls导入模板/基础数据管理/企业科研资产清单.xlsx
  4. BIN
      doc/xls导入模板/研发费用管理/人员人工费用/每月研发人员工资.xlsx
  5. BIN
      doc/xls导入模板/研发费用管理/企业研发支出明细账.xlsx
  6. BIN
      doc/xls导入模板/研发费用管理/其他费用.xlsx
  7. BIN
      doc/xls导入模板/研发费用管理/委托外部研究开发费用.xlsx
  8. BIN
      doc/xls导入模板/研发费用管理/折旧费用与长期待摊费用/每月长期待摊费用分配表.xlsx
  9. BIN
      doc/xls导入模板/研发费用管理/直接投入费用/每月直接投入费用.xlsx
  10. BIN
      doc/xls导入模板/研发费用管理/直接投入费用/每月研发租赁资产费用明细.xls
  11. BIN
      doc/xls导入模板/研发费用管理/直接投入费用/每月领料燃料动力明细.xlsx
  12. BIN
      doc/xls导入模板/研发费用管理/设计费用、装备调试费用与试验费用.xlsx
  13. BIN
      doc/xls导入模板/研发资产管理/每月仪器设备明细.xlsx
  14. BIN
      doc/xls导入模板/研发资产管理/每月在用建筑物明细.xlsx
  15. BIN
      doc/xls导入模板/研发资产管理/每月无形资产明细.xlsx
  16. BIN
      doc/xls导入模板/研发项目管理/预算编制/人员人工费用.xls
  17. BIN
      doc/xls导入模板/研发项目管理/预算编制/其他费用.xls
  18. BIN
      doc/xls导入模板/研发项目管理/预算编制/委托外部研究开发费.xls
  19. BIN
      doc/xls导入模板/研发项目管理/预算编制/折旧费用与长期待摊费用.xls
  20. BIN
      doc/xls导入模板/研发项目管理/预算编制/无形资产摊销费用.xls
  21. BIN
      doc/xls导入模板/研发项目管理/预算编制/直接投入费用.xls
  22. BIN
      doc/xls导入模板/研发项目管理/预算编制/装备调试费用与试验费用.xls
  23. BIN
      doc/xls导入模板/研发项目管理/预算编制/设计费用.xls
  24. BIN
      doc/xls导入模板/科技人员管理/每月参研人员填报.xlsx
  25. BIN
      doc/xls导入模板/科研成果管理/专利.xlsx
  26. BIN
      doc/xls导入模板/科研成果管理/其他成果.xlsx
  27. BIN
      doc/xls导入模板/科研成果管理/技术标准.xlsx
  28. BIN
      doc/xls导入模板/科研成果管理/科研论文.xlsx
  29. BIN
      doc/xls导入模板/科研成果管理/软件著作权.xlsx
  30. 3 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/YsZjfyycqdtfyEntity.java
  31. 2 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/XmAssetHoursExcel.java
  32. 2 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/XmAssetHoursListener.java
  33. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/A107_1Mapper.xml
  34. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/SubjectMapper.xml
  35. 2 2
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmFixedAssetMapper.xml
  36. 3 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.xml
  37. 2 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/YsZjfyycqdtfyMapper.xml
  38. 10 9
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java
  39. 24 16
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmAssetHoursServiceImpl.java
  40. 10 7
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmBgrzServiceImpl.java
  41. 13 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmFixedAssetServiceImpl.java
  42. 6 4
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmTechnicianHoursServiceImpl.java

BIN
doc/xls导入模板/基础数据管理/企业会计科目设置.xlsx


BIN
doc/xls导入模板/基础数据管理/企业技术人员名单.xlsx


BIN
doc/xls导入模板/基础数据管理/企业科研资产清单.xlsx


BIN
doc/xls导入模板/研发费用管理/人员人工费用/每月研发人员工资.xlsx


BIN
doc/xls导入模板/研发费用管理/企业研发支出明细账.xlsx


BIN
doc/xls导入模板/研发费用管理/其他费用.xlsx


BIN
doc/xls导入模板/研发费用管理/委托外部研究开发费用.xlsx


BIN
doc/xls导入模板/研发费用管理/折旧费用与长期待摊费用/每月长期待摊费用分配表.xlsx


BIN
doc/xls导入模板/研发费用管理/直接投入费用/每月直接投入费用.xlsx


BIN
doc/xls导入模板/研发费用管理/直接投入费用/每月研发租赁资产费用明细.xls


BIN
doc/xls导入模板/研发费用管理/直接投入费用/每月领料燃料动力明细.xlsx


BIN
doc/xls导入模板/研发费用管理/设计费用、装备调试费用与试验费用.xlsx


BIN
doc/xls导入模板/研发资产管理/每月仪器设备明细.xlsx


BIN
doc/xls导入模板/研发资产管理/每月在用建筑物明细.xlsx


BIN
doc/xls导入模板/研发资产管理/每月无形资产明细.xlsx


BIN
doc/xls导入模板/研发项目管理/预算编制/人员人工费用.xls


BIN
doc/xls导入模板/研发项目管理/预算编制/其他费用.xls


BIN
doc/xls导入模板/研发项目管理/预算编制/委托外部研究开发费.xls


BIN
doc/xls导入模板/研发项目管理/预算编制/折旧费用与长期待摊费用.xls


BIN
doc/xls导入模板/研发项目管理/预算编制/无形资产摊销费用.xls


BIN
doc/xls导入模板/研发项目管理/预算编制/直接投入费用.xls


BIN
doc/xls导入模板/研发项目管理/预算编制/装备调试费用与试验费用.xls


BIN
doc/xls导入模板/研发项目管理/预算编制/设计费用.xls


BIN
doc/xls导入模板/科技人员管理/每月参研人员填报.xlsx


BIN
doc/xls导入模板/科研成果管理/专利.xlsx


BIN
doc/xls导入模板/科研成果管理/其他成果.xlsx


BIN
doc/xls导入模板/科研成果管理/技术标准.xlsx


BIN
doc/xls导入模板/科研成果管理/科研论文.xlsx


BIN
doc/xls导入模板/科研成果管理/软件著作权.xlsx


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

@@ -43,6 +43,9 @@ public class YsZjfyycqdtfyEntity extends TenantEntity {
 	@TableField(exist = false)
 	private String zcmc;
 
+	@TableField(exist = false)
+	private Integer assetStatus;
+
 	@Schema(description = "月折旧额/月摊销额(元)")
 	@TableField(exist = false)
  	private BigDecimal yzje;

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

@@ -38,6 +38,8 @@ public class XmAssetHoursExcel implements Serializable {
 	private String zclb;
 	private String yt;
 
+	private Double zgs;
+
 	private List<DailyAttendance> dailyAttendances = new ArrayList<>(); // 每日考勤数据
 	private Double monthlyHours;   // 使用工时/小时
 }

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

@@ -6,6 +6,7 @@ import com.alibaba.excel.read.listener.ReadListener;
 import lombok.Data;
 import org.sky.core.tool.utils.StringUtil;
 import org.sky.scientific.pojo.vo.DailyAttendance;
+import org.sky.scientific.utils.ValidationUtils;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -78,6 +79,7 @@ public class XmAssetHoursListener implements ReadListener<Map<Integer, String>>
 		record.setZcmc(data.get(4));
 		record.setZclb(data.get(5));
 		record.setYt(data.get(6));
+		record.setZgs(ValidationUtils.safeParseDouble(data.get(7)));
 
 		// 解析每日工时数据
  		for (int i = 0; i < dateHeaders.size(); i++) {

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

@@ -17,7 +17,7 @@
                 COALESCE(get_xm_info(xm.id,'XMJSSJ', #{year}) ,XMJSSJ) AS jssj
             FROM kd_xm xm
         ) xm
-        LEFT JOIN kd_107_1 tmp on tmp.xm_id = xm.xm_id and tmp.year_and_month = #{year}
+        LEFT JOIN kd_107_1 tmp on tmp.xm_id = xm.xm_id and tmp.year_and_month = #{year} and tmp.tenant_id = #{tenantId}
         WHERE xm.tenant_id = #{tenantId} and left(xm.jssj,4) >= #{year}
     </select>
 

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

@@ -47,7 +47,6 @@
         select max(code)
         from kd_subject
         where parent_id = #{parentId}
-          and (type = 1 or (type = 0 and tenant_id = #{tenantId}))
     </select>
 
     <delete id="deleteSubject">
@@ -71,5 +70,6 @@
         <if test="parentId != null">and parent_id = #{parentId}</if>
         <if test="menu.code!=null and menu.code !=''">and code like concat('%',#{menu.code},'%')</if>
         <if test="menu.name!=null and menu.name !=''">and name like concat('%',#{menu.name},'%')</if>
+        order by code asc
      </select>
 </mapper>

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

@@ -23,7 +23,7 @@
 
     <select id="selectXmFixedAssetByYearAndMonth"
             resultMap="ResultMap">
-        SELECT xa.*,asset.zcbm
+        SELECT xa.*,asset.zcbm, asset.status as 'asset.status'
         FROM kd_xm_fixed_asset xa
         inner JOIN kd_asset asset ON xa.zcbm = asset.zcbm and asset.year_and_month = xa.year_and_month
         LEFT JOIN
@@ -128,7 +128,7 @@
             xa.yfftv as yanfa_fen_tan_lv,
             xa.ftvqdyj
         FROM kd_xm_fixed_asset xa
-        LEFT JOIN kd_asset asset ON xa.zcbm = asset.zcbm and asset.year_and_month = xa.year_and_month
+        LEFT JOIN kd_asset asset ON xa.zcbm = asset.zcbm and asset.year_and_month = xa.year_and_month and asset.tenant_id = #{ew.tenantId}
         LEFT JOIN
         (
             SELECT

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

@@ -108,11 +108,11 @@
 
     <select id="selectHoursListByUnicodeAndYear" resultType="org.sky.scientific.pojo.vo.DailyAttendance">
         SELECT
-            LEFT(tmp.work_date,6) as workDate ,COUNT(DISTINCT work_date) as workHours ,sum(work_hours) total_hours
+            LEFT(tmp.work_date,6) as workDate ,
+            COUNT(DISTINCT work_date) as workHours
         from kd_xm_technician_hours tmp
-        where tmp.unicode = #{unicode} and LEFT(tmp.work_date,4)=#{year}
+        where tmp.unicode = #{unicode} and LEFT(tmp.work_date,4)=#{year} and work_hours > 0
         group by left(tmp.work_date,6)
-        having total_hours > 0
     </select>
 
     <resultMap id="TechnicianHoursMonthlyVOMap" type="org.sky.scientific.pojo.vo.TechnicianHoursMonthlyVO">

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

@@ -10,6 +10,7 @@
         <result column="asset_id" property="assetId"/>
         <result column="ZCBM" property="zcbm"/>
         <result column="ZCMC" property="zcmc"/>
+        <result column="assetStatus" property="assetStatus"/>
         <result column="ZZSC" property="zzsc"/>
         <result column="YZJE" property="yzje"/>
         <result column="CQDTFYMC" property="cqdtfymc"/>
@@ -47,7 +48,7 @@
     </select>
 
     <select id="selectByYearAndMonth" resultMap="ResultMap">
-        SELECT xa.*, s.YZJE,s.zcbm
+        SELECT xa.*, s.YZJE,s.zcbm, s.status as assetStatus
         FROM kd_ys_zjfyycqdtfy xa
         inner join kd_asset s on s.id = xa.asset_id
         INNER JOIN

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

@@ -161,16 +161,16 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 
 	public synchronized String generateUnicode() {
 		String maxUnicode = baseMapper.getMaxUnicode();
-		String unicode = null;
+		StringBuilder unicode = null;
 		if (Func.isNull(maxUnicode)) {
-			unicode = "00001";
+			unicode = new StringBuilder("00001");
 		} else {
-			unicode = String.valueOf(Integer.parseInt(maxUnicode) + 1);
+			unicode = new StringBuilder(String.valueOf(Integer.parseInt(maxUnicode) + 1));
 			while (unicode.length() < 5) {
-				unicode = "0" + unicode;
+				unicode.insert(0, "0");
 			}
 		}
-		return unicode;
+		return unicode.toString();
 	}
 
 	@SneakyThrows
@@ -222,9 +222,10 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 				technician.setDepartmentId(dbDepartment.getId());
 			}
 			String unicode = baseMapper.getUnicodeByNumberAndIdentityCard(technician.getNumber(), technician.getIdCard());
-			if (unicode == null) {
-				unicode = generateUnicode();
+			if (Func.notNull(unicode)) {
+				continue;
 			}
+			unicode = generateUnicode();
 			technician.setUnicode(unicode);
 			this.save(technician);
 		}
@@ -821,8 +822,8 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		}
 		for (XmTechnicianEntity excel : dataList) {
 			String unicode = baseMapper.getUnicodeByNumberAndIdentityCard(excel.getNumber(), excel.getIdCard());
-			if(Func.isBlank(unicode)){
-				throw new ServiceException("工号["+excel.getNumber()+"]/身份证["+excel.getIdCard()+"]不存在");
+			if (Func.isBlank(unicode)) {
+				throw new ServiceException("工号[" + excel.getNumber() + "]/身份证[" + excel.getIdCard() + "]不存在");
 			}
 			Long xmId = xmMapper.getXmIdByXmmcOrXmbh(null, null, excel.getXmbh());
 			if (Func.isNull(xmId)) {

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

@@ -99,6 +99,9 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 			if (null == dbAsset) {
 				throw new ServiceException("序号为[" + record.getSerialNumber() + "]的资产不存在");
 			}
+			//保存总工时
+			updateZgs(dbAsset.getId(), record.getZgs(), yearAndMonth);
+
 			List<XmAssetHoursEntity> byXmAndAssetList = dbList.stream().filter(e -> e.getXmId().equals(xmId) && e.getAssetId().equals(dbAsset.getId())).toList();
 			for (DailyAttendance dailyAttendance : record.getDailyAttendances()) {
 
@@ -158,6 +161,26 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 		return page.setRecords(list);
 	}
 
+	private void updateZgs(Long assetId, Double zgs, String yearAndMonth){
+		if (zgs != null) {
+			//不能大于当月工作天数(自然天数)X24小时
+			// 解析年份和月份
+			int year = Integer.parseInt(yearAndMonth.substring(0, 4));
+			int month = Integer.parseInt(yearAndMonth.substring(4));
+
+			// 获取YearMonth对象并得到天数
+			YearMonth yearMonth = YearMonth.of(year, month);
+			int days = yearMonth.lengthOfMonth();
+			if (zgs > days * 24) {
+				throw new ServiceException("总工时不能大于当月工作天数X24小时");
+			}
+			AssetEntity asset = new AssetEntity();
+			asset.setId(assetId);
+			asset.setZgs(zgs);
+			assetMapper.updateById(asset);
+		}
+	}
+
 	@Override
 	@Transactional
 	public boolean batchSubmitXmAssetHours(XmAssetHoursDto dto) {
@@ -177,22 +200,7 @@ public class XmAssetHoursServiceImpl extends BaseServiceImpl<XmAssetHoursMapper,
 			throw new ServiceException("资产不存在");
 		}
 
-		if (dto.getZgs() != null) {
-			//不能大于当月工作天数(自然天数)X24小时
-			// 解析年份和月份
-			int year = Integer.parseInt(dto.getYearAndMonth().substring(0, 4));
-			int month = Integer.parseInt(dto.getYearAndMonth().substring(4));
-
-			// 获取YearMonth对象并得到天数
-			YearMonth yearMonth = YearMonth.of(year, month);
-			int days = yearMonth.lengthOfMonth();
-			if (dto.getZgs() > days * 24) {
-				throw new ServiceException("总工时不能大于当月工作天数X24小时");
-			}
-
-			dbAsset.setZgs(dto.getZgs());
-			assetMapper.updateById(dbAsset);
-		}
+		updateZgs(dbAsset.getId(), dto.getZgs(), dto.getYearAndMonth());
 
 		List<XmAssetHoursEntity> dbList = baseMapper.selectByYearAndMonth(dto.getYearAndMonth(), dto.getXmId(), dto.getAssetId());
 

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

@@ -26,6 +26,7 @@ import org.sky.scientific.mapper.XmBgrzMapper;
 import org.sky.scientific.pojo.entity.XmBgrzEntity;
 import org.sky.scientific.pojo.vo.XmBgrzVO;
 import org.sky.scientific.service.IXmBgrzService;
+import org.sky.scientific.service.IXmService;
 import org.sky.scientific.utils.TemplateService;
 import org.sky.system.cache.DictCache;
 import org.springframework.stereotype.Service;
@@ -53,12 +54,14 @@ public class XmBgrzServiceImpl extends BaseServiceImpl<XmBgrzMapper, XmBgrzEntit
 	private final DepartmentMapper departmentMapper;
 	private final TechnicianMapper technicianMapper;
 	private final TemplateService templateService;
+	private final IXmService xmService;
 
 	@Override
 	public boolean saveBgrz(XmBgrzEntity xmBgrz) {
 		if (xmBgrz.getXmId() == null) {
 			throw new ServiceException("请选择需要变更的项目");
 		}
+		xmService.judgeXmIsOver(xmBgrz.getXmId(), true);
 		xmBgrz.setBghdz(StringUtil.trimAllWhitespace(xmBgrz.getBghdz()));
 		return this.save(xmBgrz);
 	}
@@ -79,33 +82,33 @@ public class XmBgrzServiceImpl extends BaseServiceImpl<XmBgrzMapper, XmBgrzEntit
 				vo.setBgqdzStr(vo.getBgqdz());
 				vo.setBghdz(technicianMapper.getNameById(Long.parseLong(vo.getBghdz())));
 				vo.setBghdzStr(vo.getBghdz());
-			}else if ( "STATUS".equalsIgnoreCase(vo.getZdmc())) {
+			} else if ("STATUS".equalsIgnoreCase(vo.getZdmc())) {
 				vo.setBgqdz(DictCache.getValue("project_state", vo.getBgqdz()));
 				vo.setBgqdzStr(vo.getBgqdz());
 				vo.setBghdz(DictCache.getValue("project_state", vo.getBghdz()));
 				vo.setBghdzStr(vo.getBghdz());
-			}else if ("XMYSZEMX".equalsIgnoreCase(vo.getZdmc())) {
-				if(Func.isNotBlank(vo.getBgqdz())){
+			} else if ("XMYSZEMX".equalsIgnoreCase(vo.getZdmc())) {
+				if (Func.isNotBlank(vo.getBgqdz())) {
 					List<JSONObject> arr = JSON.parseArray(vo.getBgqdz(), JSONObject.class);
 					List<String> desc = new ArrayList<>();
 					for (JSONObject tmp : arr) {
 						String year = tmp.getString("year");
 						String amount = tmp.getString("amount");
-						desc.add(year+"年,"+amount+"万元");
+						desc.add(year + "年," + amount + "万元");
 					}
 					vo.setBgqdzStr(String.join(";", desc));
 				}
-				if(Func.isNotBlank(vo.getBghdz())){
+				if (Func.isNotBlank(vo.getBghdz())) {
 					List<JSONObject> arr = JSON.parseArray(vo.getBghdz(), JSONObject.class);
 					List<String> desc = new ArrayList<>();
 					for (JSONObject tmp : arr) {
 						String year = tmp.getString("year");
 						String amount = tmp.getString("amount");
-						desc.add(year+"年,"+amount+"万元");
+						desc.add(year + "年," + amount + "万元");
 					}
 					vo.setBghdzStr(String.join(";", desc));
 				}
-			}else {
+			} else {
 				vo.setBgqdzStr(vo.getBgqdz());
 				vo.setBghdzStr(vo.getBghdz());
 			}

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

@@ -106,6 +106,9 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 					jtXmIdList.add(dbAsset.getXmId());
 					continue;
 				}
+				if(Func.equals(dbAsset.getAsset().getStatus(), AssetStatusEnum.已足额折旧.getCode())){
+					continue;
+				}
 				XmFixedAsset asset = new XmFixedAsset();
 				asset.setYearAndMonth(yearAndMonth);
 				asset.setXmId(dbAsset.getXmId());
@@ -129,6 +132,9 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 					jtXmIdList.add(ys.getXmId());
 					continue;
 				}
+				if(Func.equals(ys.getAssetStatus(), AssetStatusEnum.已足额折旧.getCode())){
+					continue;
+				}
 				XmFixedAsset asset = new XmFixedAsset();
 				asset.setYearAndMonth(yearAndMonth);
 				asset.setXmId(ys.getXmId());
@@ -190,6 +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() + "]的资产已足额折旧/摊销");
+				}
 			}
 			assetIdMap.put(assetkey, dbAsset);
 
@@ -227,10 +236,13 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		List<XmFixedAsset> thisMonthList = baseMapper.selectXmFixedAssetByYearAndMonth(xmAsset.getYearAndMonth(), zclb);
 
 		long count = thisMonthList.stream().filter(e -> Objects.equals(e.getXmId(), xmAsset.getXmId()) && Objects.equals(e.getZcbm(), xmAsset.getZcbm())).count();
-
 		if (count > 0) {
 			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("资产已足额折旧/摊销");
+		}
 		return this.save(xmAsset);
 	}
 

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

@@ -244,7 +244,7 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 			throw new ServiceException("未设置考勤数据");
 		}
 
-		//获取工时数据,具体项目、具体人员在某月的工时数据
+		//获取工时数据, 具体人员在某月的工时数据
 		List<XmTechnicianHours> dbList = baseMapper.selectByYearAndMonth(dto.getYearAndMonth(), null, dto.getUnicode());
 
 		//需要新增的,以便后续批量新增
@@ -268,7 +268,9 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 			if (primaryKey == null) {
 
 				//当 考勤时长 - 项目工时总和 - 新的工时 < 0,则提示“考勤时长不足”
-				if (attendanceHours - hoursTotal - dailyAttendance.getWorkHours() < 0) {
+				//当天已填总工时+新增的工时 > 考勤时长
+//				if (attendanceHours -   - dailyAttendance.getWorkHours() < 0) {
+				if (hoursTotal + dailyAttendance.getWorkHours() > attendanceHours) {
 					throw new ServiceException(dailyAttendance.getWorkDate() + "的考勤时长为" + attendanceHours + "小时,可填写的工时不能超过" + (attendanceHours - hoursTotal) + "小时,请核对数据");
 				}
 
@@ -281,8 +283,8 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 				entity.setCreateDept(Func.toLong(SecureUtil.getDeptId()));
 				insertList.add(entity);
 			} else {
-//当 			考勤时长 - 项目工时总和 + 旧工时 - 新的工时 < 0,则提示“考勤时长不足”
-				if (attendanceHours + tempList.get(0).getWorkHours() - hoursTotal - dailyAttendance.getWorkHours() < 0) {
+ 				//当天已填总工时-修改前的工时+修改后的工时 > 考勤时长
+ 				if (hoursTotal - tempList.get(0).getWorkHours() + dailyAttendance.getWorkHours() > attendanceHours) {
 					throw new ServiceException(dailyAttendance.getWorkDate() + "的考勤时长为" + attendanceHours + "小时,可填写的工时不能超过" + (attendanceHours + tempList.get(0).getWorkHours() - hoursTotal) + "小时,请核对数据");
 				}
 				entity.setId(primaryKey);