zhoulisky 7 months ago
parent
commit
2e2968740c

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

@@ -102,4 +102,7 @@ public class XmEntity extends TenantEntity {
 
 	@Schema(description = "其他资料")
 	private String qtzl;
+
+	@Schema(description = "状态,0:暂存,1:开展中,2:已结题,3:项目暂停,4:项目终止")
+	private Integer status;
 }

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

@@ -212,12 +212,12 @@ public class AssetController extends KdController {
 	@Operation(summary = "科研仪器设备工时登记表-导出")
 	public void exportXmAssetHours(HttpServletResponse response, XmAssetHoursDto dto) {
 		List<XmAssetHoursVO> list = hoursService.selectXmAssetHoursPage(dto, Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE))).getRecords();
-		if(Func.isEmpty(list)){
-			ExportUtil.processWithNoData(response);
-		}else {
+//		if(Func.isEmpty(list)){
+//			ExportUtil.processWithNoData(response);
+//		}else {
 			ExportUtil.processWithData(response, "每月仪器设备工时打卡.xls");
 			hoursService.exportXmAssetHours(response.getOutputStream(), list, dto.getYearAndMonth());
-		}
+//		}
 	}
 
 	@GetMapping("/kyyqsbzjfyfpb")

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

@@ -13,7 +13,6 @@ import org.sky.core.boot.ctrl.KdController;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
 import org.sky.core.tool.api.R;
-import org.sky.core.tool.utils.Func;
 import org.sky.scientific.pojo.dto.AttendanceDto;
 import org.sky.scientific.pojo.vo.AttendanceVO;
 import org.sky.scientific.service.IAttendanceService;
@@ -67,12 +66,12 @@ public class AttendanceController extends KdController {
 	@Operation(summary = "每月考勤信息-导出")
 	public void exportAttendance(@RequestBody AttendanceDto dto, HttpServletResponse response) {
 		List<AttendanceVO> list = service.selectAttendancePage(dto, Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE))).getRecords();
-		if (Func.isEmpty(list)) {
-			ExportUtil.processWithNoData(response);
-		} else {
+//		if (Func.isEmpty(list)) {
+//			ExportUtil.processWithNoData(response);
+//		} else {
 			ExportUtil.processWithData(response, "每月考勤信息.xls");
 			service.exportAttendance(response.getOutputStream(), list, dto.getYearAndMonth());
-		}
+//		}
 	}
 
 	@PostMapping("/remove")

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

@@ -111,7 +111,7 @@ public class XmController extends KdController {
 
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
-	@Operation(summary = "项目立项", description = "传入xm")
+	@Operation(summary = "项目立项", description = "传入xm,暂存时status=0,确认立项时status=1")
 	public R<JSONObject> save(@Valid @RequestBody XmDTO xm) {
 		Long xmId = service.approval(xm);
 		JSONObject result = new JSONObject();

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

@@ -12,7 +12,6 @@ import org.sky.core.boot.ctrl.KdController;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
 import org.sky.core.tool.api.R;
-import org.sky.core.tool.utils.Func;
 import org.sky.scientific.pojo.dto.HoursSyncDto;
 import org.sky.scientific.pojo.dto.TechnicianDTO;
 import org.sky.scientific.pojo.vo.TechnicianHoursMonthlyVO;
@@ -89,12 +88,12 @@ public class XmTechnicianHoursController extends KdController {
 	@Operation(summary = "导出")
 	public void export(HttpServletResponse response, @RequestBody XmTechnicianHoursVO param) throws IOException {
 		List<XmTechnicianHoursVO> list = service.selectPage(param, Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE))).getRecords();
-		if (Func.isEmpty(list)) {
-			ExportUtil.processWithNoData(response);
-		} else {
+//		if (Func.isEmpty(list)) {
+//			ExportUtil.processWithNoData(response);
+//		} else {
 			ExportUtil.processWithData(response, "每月研发工时打卡.xls");
 			service.export(response.getOutputStream(), list, param.getYearAndMonth());
-		}
+//		}
 	}
 
 	@GetMapping("/list/print")

+ 2 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/e/XmStatusEnum.java

@@ -7,9 +7,10 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum XmStatusEnum {
 
-//	1:开展中,2:已结题,3:项目暂停,4:项目终止
+//	0:暂存,1:开展中,2:已结题,3:项目暂停,4:项目终止
 
 
+	暂存("暂存", 0),
 	开展中("开展中", 1),
 	已结题("已结题", 2),
 	项目暂停("项目暂停", 3),

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

@@ -84,6 +84,7 @@
         INNER JOIN (
             SELECT ZCBM,MAX(year_and_month) as max_month
             FROM kd_asset
+            where status !=2 and status!=4
             GROUP BY ZCBM
         ) tm ON t.ZCBM = tm.ZCBM AND t.year_and_month = tm.max_month
         ORDER BY t.ZCBM, t.year_and_month DESC

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

@@ -61,6 +61,7 @@
             COALESCE(get_xm_info(xm.id,'XMJSSJ', #{ew.yearAndMonth}),XMJSSJ) AS XMJSSJ
         FROM kd_xm xm
         WHERE DATE_FORMAT(XMKSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth}
+        and xm.status != 0
     </select>
 
     <select id="selectXmListByYear" resultMap="ResultMap">
@@ -246,7 +247,9 @@
                 xm.XMKSSJ,
                 COALESCE(get_xm_info(xm.id,'XMJSSJ', #{ew.yearAndMonth}),XMJSSJ) AS XMJSSJ
             FROM kd_xm xm
-            WHERE #{ew.yearAndMonth} between DATE_FORMAT(XMKSSJ, '%Y') and DATE_FORMAT(COALESCE(get_xm_info(xm.id,'XMJSSJ', #{ew.yearAndMonth}),XMJSSJ),'%Y')
+            WHERE
+            xm.status = 0
+            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>
      </select>

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

@@ -193,16 +193,16 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 		if (hoursMapper.countByZcbmAfterMonth(asset.getZcbm(), yearAndMonth) > 0) {
 			throw new ServiceException("无法删除,每月仪器设备工时打卡中引用了【" + asset.getZcbm() + "】");
 		}
-  		if (fixedAssetMapper.selectCount(Wrappers.<XmFixedAsset>lambdaQuery().eq(XmFixedAsset::getZcbm, asset.getZcbm()).ge(XmFixedAsset::getYearAndMonth, yearAndMonth)) > 0) {
+		if (fixedAssetMapper.selectCount(Wrappers.<XmFixedAsset>lambdaQuery().eq(XmFixedAsset::getZcbm, asset.getZcbm()).ge(XmFixedAsset::getYearAndMonth, yearAndMonth)) > 0) {
 			throw new ServiceException("无法删除,每月仪器设备明细/每月在用建筑物明细中引用了【" + asset.getZcbm() + "】");
 		}
- 		if (intangibleAssetMapper.selectCount(Wrappers.<XmIntangibleAsset>lambdaQuery().eq(XmIntangibleAsset::getZcbm, asset.getZcbm()).ge(XmIntangibleAsset::getYearAndMonth, yearAndMonth)) > 0) {
+		if (intangibleAssetMapper.selectCount(Wrappers.<XmIntangibleAsset>lambdaQuery().eq(XmIntangibleAsset::getZcbm, asset.getZcbm()).ge(XmIntangibleAsset::getYearAndMonth, yearAndMonth)) > 0) {
 			throw new ServiceException("无法删除,每月无形资产明细中引用了【" + asset.getZcbm() + "】");
 		}
- 		if(ysWxzctxfyMapper.countByZcbmAfterMonth(asset.getZcbm(), yearAndMonth) > 0){
+		if (ysWxzctxfyMapper.countByZcbmAfterMonth(asset.getZcbm(), yearAndMonth) > 0) {
 			throw new ServiceException("无法删除,研发项目预算-无形资产摊销费用中引用了【" + asset.getZcbm() + "】");
 		}
- 		if(ysZjfyycqdtfyMapper.countByZcbmAfterMonth(asset.getZcbm(), yearAndMonth) > 0){
+		if (ysZjfyycqdtfyMapper.countByZcbmAfterMonth(asset.getZcbm(), yearAndMonth) > 0) {
 			throw new ServiceException("无法删除,研发项目预算-折旧费用与长期待摊费用中引用了【" + asset.getZcbm() + "】");
 		}
 	}
@@ -323,20 +323,20 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 		}
 //		正常状态、停用状态,可修改资产数据。其他情况不能修改。假设在修改资产时,正好出现使用寿命-已使用月份数=0时,即已足额折旧状态时,就显示为已足额折旧状态了,不可以再次修改了。
 //		修改资产时,系统需要二次确认。
-		if (Func.equals(dbAsset.getStatus(), AssetStatusEnum.正常.getCode()) || Func.equals(dbAsset.getStatus(), AssetStatusEnum.停用.getCode())) {
-//			仪器设置的算法:当前时间为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(), false);
-//			这里
-			if (!Func.equals("仪器设备", asset.getZclb())) {
-				ysysm++;
-			}
-			asset.setYsysm((int) ysysm);
-		}
-		//使用寿命-已使用月份数=0时,即已足额折旧
-		if (asset.getSysm() - asset.getYsysm() <= 0) {
-			asset.setStatus(AssetStatusEnum.已足额折旧.getCode());
-		}
+//		if (Func.equals(dbAsset.getStatus(), AssetStatusEnum.正常.getCode()) || Func.equals(dbAsset.getStatus(), AssetStatusEnum.停用.getCode())) {
+////			仪器设置的算法:当前时间为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(), false);
+////			这里
+//			if (!Func.equals("仪器设备", asset.getZclb())) {
+//				ysysm++;
+//			}
+//			asset.setYsysm((int) ysysm);
+//		}
+//		//使用寿命-已使用月份数=0时,即已足额折旧
+//		if (asset.getSysm() - asset.getYsysm() <= 0) {
+//			asset.setStatus(AssetStatusEnum.已足额折旧.getCode());
+//		}
 		return this.updateOtherMonthAsset(asset);
 	}
 
@@ -353,16 +353,17 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 			updateEntity.setTenantId(null);
 			updateEntity.setZgs(null);
 
-			long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(DateUtil.parse(entity.getYearAndMonth(), DateUtil.PATTERN_YYYYMM), updateEntity.getKssj(), false);
-//			这里
-			if (!Func.equals("仪器设备", updateEntity.getZclb())) {
-				ysysm++;
-			}
-			updateEntity.setYsysm((int) ysysm);
+			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), updateEntity.getKssj(), false);
+				if (!Func.equals("仪器设备", updateEntity.getZclb())) {
+					ysysm++;
+				}
+				updateEntity.setYsysm((int) ysysm);
 
-			//使用寿命-已使用月份数=0时,即已足额折旧
-			if (updateEntity.getSysm() - updateEntity.getYsysm() <= 0) {
-				updateEntity.setStatus(AssetStatusEnum.已足额折旧.getCode());
+				//使用寿命-已使用月份数=0时,即已足额折旧
+				if (updateEntity.getSysm() - updateEntity.getYsysm() <= 0) {
+					updateEntity.setStatus(AssetStatusEnum.已足额折旧.getCode());
+				}
 			}
 
 			LambdaUpdateWrapper<AssetEntity> updateWrapper = Wrappers.<AssetEntity>lambdaUpdate().eq(AssetEntity::getZcbm, entity.getZcbm()).eq(AssetEntity::getYearAndMonth, entity.getYearAndMonth());
@@ -418,7 +419,8 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 //			}
 //		}
 
-		return baseMapper.updateStatus(asset.getId(), asset.getStatus()) == 1;
+//		return baseMapper.updateStatus(asset.getId(), asset.getStatus()) == 1;
+		return updateOtherMonthAsset(asset);
 	}
 
 	@Override
@@ -432,21 +434,22 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 //		}
 
 		asset.setStatus(AssetStatusEnum.正常.getCode());
-		if (Func.isNull(asset.getYsysm())) {
-			//使用寿命-已使用月份数=0时,即已足额折旧
-//			仪器设置的算法:当前时间为2025年01月-2024年5月,差额为9个月,因为折旧从次月开始,所以已使用月数为8个月(即9-1=8),再将使用寿命-已使用月份数=0时,即已足额折旧。
-//			无形资产:当月即摊销,不需要-1
-			long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(cn.hutool.core.date.DateUtil.date(), asset.getKssj(), false);
-//			这里
-			if (!isFixedAsset(asset.getZclb())) {
-				ysysm++;
-			}
-			asset.setYsysm((int) ysysm);
-		}
-		if (asset.getSysm() - asset.getYsysm() <= 0) {
-			asset.setStatus(AssetStatusEnum.已足额折旧.getCode());
-		}
-		return this.updateById(asset);
+//		if (Func.isNull(asset.getYsysm())) {
+//			//使用寿命-已使用月份数=0时,即已足额折旧
+////			仪器设置的算法:当前时间为2025年01月-2024年5月,差额为9个月,因为折旧从次月开始,所以已使用月数为8个月(即9-1=8),再将使用寿命-已使用月份数=0时,即已足额折旧。
+////			无形资产:当月即摊销,不需要-1
+//			long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(cn.hutool.core.date.DateUtil.date(), asset.getKssj(), false);
+////			这里
+//			if (!isFixedAsset(asset.getZclb())) {
+//				ysysm++;
+//			}
+//			asset.setYsysm((int) ysysm);
+//		}
+//		if (asset.getSysm() - asset.getYsysm() <= 0) {
+//			asset.setStatus(AssetStatusEnum.已足额折旧.getCode());
+//		}
+//		return this.updateById(asset);
+		return updateOtherMonthAsset(asset);
 	}
 
 	@Override

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

@@ -72,6 +72,7 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 			if (dailyAttendanceList==null) {
 				dailyAttendanceList = new ArrayList<>();
 			}
+			vo.setMonthlyDays(Func.toDouble(dailyAttendanceList.stream().filter(daily -> Func.notNull(daily.getWorkHours()) && daily.getWorkHours() > 0).count()));
 			for (int i = 0; i < daysInMonth; i++) {
 				String everyDay = startDate.plusDays(i).format(DateTimeFormatter.ofPattern(DateUtil.PATTERN_YYYYMMDD));
 				//过滤某天的出勤数据
@@ -90,8 +91,8 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 			if (Func.isNull(one) || Func.isNull(one.getWorkHours())) {
 				throw new ServiceException("企业未设置考勤时长");
 			}
-			Double workHours = one.getWorkHours();
-			vo.setMonthlyDays(vo.getMonthlyHours() / workHours);
+//			Double workHours = one.getWorkHours();
+
 			vo.setDailyAttendances(dailyAttendanceList);
 		}
 		return page.setRecords(list);

+ 4 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java

@@ -151,6 +151,10 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 
 	@Override
 	public boolean updateXm(XmUpdateDto dto) {
+		XmVO dbXm = baseMapper.selectByXmId(dto.getXmId());
+		if(XmStatusEnum.暂存.getCode() != dbXm.getStatus()){
+			throw new ServiceException("只有项目状态为暂存时才能修改项目信息");
+		}
 		return baseMapper.updateXm(dto);
 	}