diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java index 1d5bd76..f671370 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java @@ -31,6 +31,7 @@ import org.activiti.engine.TaskService; import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; +import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; @@ -535,7 +536,11 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid); - queryWrapper.eq(HuzhouPlaninfo::getIsfinish,"0"); + // 使用 apply 方法加入自定义 SQL 语句进行 taskLevel 的数值比较 + //queryWrapper.apply("CAST(task_level AS DECIMAL) >= 2"); + queryWrapper.apply("CAST(task_level AS DECIMAL(10,2)) >= 2"); + // 添加 isfinish 条件,要求 isfinish 的值为 "0", "1", 或 "2" + queryWrapper.in(HuzhouPlaninfo::getIsfinish, "0", "1", "2"); this.remove(queryWrapper); } @@ -837,20 +842,61 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl hashMap = getPlanInfoListFromFile(multipartFile, projectid); //res是true 表示项目计划文件没有问题,如果是false说明文件有问题,需要抛出异常 boolean res = (boolean) hashMap.get("res"); - if(!res){ - throw new EasyException((String)hashMap.get("msg")); + if (!res) { + throw new EasyException((String) hashMap.get("msg")); } - ArrayList huzhouPlaninfoArrayList = (ArrayList) hashMap.get("arr"); - String isAllow = IsAllowModifyPlaninfo(projectid,huzhouPlaninfoArrayList); - if(!"1".equals(isAllow)){ - throw new EasyException(isAllow); + // List excelList =(ArrayList) hashMap.get("arr"); + List huzhouPlaninfoArrayList = (ArrayList) hashMap.get("arr"); + List excelList = SerializationUtils.clone((ArrayList) hashMap.get("arr")); + String isAllow = IsAllowModifyPlaninfo(projectid, huzhouPlaninfoArrayList); + if (!"1".equals(isAllow)) { + throw new EasyException(isAllow); } //修改项目计划会重新修改项目阶段类型 projectinfoService.modifyStageById(projectid,"4"); //保存历史记录 List planinfoHistory = getListByProjectId(projectid); planinfoHistoryService.savePlanInfoToHistory(planinfoHistory); - //删除未开始的项目计划,保零六已完成或审批中的 + // 获取审批中和已完成的计划列表进行更新操作 + // 计算差集 + Set keysFromHuzhouPlaninfoArrayList = huzhouPlaninfoArrayList.stream() + .map(item ->item.getProjectId() + "-" + item.getTaskLevel()) + .collect(Collectors.toSet()); + + List tmpDifList = planinfoHistory.stream() + .filter(item -> !keysFromHuzhouPlaninfoArrayList.contains(item.getProjectId() + "-" + item.getTaskLevel())) + .filter(item -> { + try { + // 过滤条件:只保留 taskLevel 大于 2 的记录 + BigDecimal taskLevel = new BigDecimal(item.getTaskLevel()); + return taskLevel.compareTo(BigDecimal.valueOf(2)) >= 0; + } catch (NumberFormatException e) { + // 如果转换失败,可以选择处理异常或忽略这条记录 + throw new EasyException("无法将 taskLevel 转换为数字: " + item.getTaskLevel()); + } + }) + .collect(Collectors.toList()); + + // isFinish为0表示未开始,1审批中,2表示已完成 scheduledStartTime scheduledEndTime + Map excelMap = excelList.stream() + .collect(Collectors.toMap( + item -> item.getTaskLevel(), + item -> item + )); + // 遍历 tmpDifList,并根据 projectId 和 taskLevel 查找对应的 excelItem + tmpDifList.forEach(tmpItem -> { + String key = tmpItem.getTaskLevel(); + Optional.ofNullable(excelMap.get(key)).ifPresent(excelItem -> { + tmpItem.setScheduledEndTime(excelItem.getScheduledEndTime()); + tmpItem.setScheduledStartTime(excelItem.getScheduledStartTime()); + }); + }); + + huzhouPlaninfoArrayList.addAll(tmpDifList); + for (HuzhouPlaninfo huzhouPlaninfo : huzhouPlaninfoArrayList) { + log.info("修改后的计划信息为{}",huzhouPlaninfo.getTaskLevel()); + } + //删除未开始 已完成 和审批中且taskLevel>2的项目 removeByProjectId(projectid); //将之前的分组id修改为最新的分组id LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); @@ -859,6 +905,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl contractList) throws IOException { - // 判断是否为二次上传,是则清楚原有记录 + // 判断是否为二次上传,是则清除原有记录 if (CollectionUtil.isNotEmpty(contractList)){ - hasOldContractInfo(contractList); + hasOldContractInfo(contractList,planinfoid); } //立项审批和合同签订 金额输入 @@ -379,19 +379,20 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl contractList) { + private void hasOldContractInfo(List contractList,String planinfoid) { // 获取合同信息集合中的第一个元素即可判断是否为二次提交 - HuzhouContractinfo contractinfo = contractList.get(0); + //HuzhouContractinfo contractinfo = contractList.get(0); + HuzhouPlaninfo planinfo = planinfoService.getById(planinfoid); LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); - qw.eq(HuzhouContractinfo::getProjectId,contractinfo.getProjectId()) - .eq(HuzhouContractinfo::getTaskName,contractinfo.getTaskName()) + qw.eq(HuzhouContractinfo::getProjectId,planinfo.getProjectId()) + .eq(HuzhouContractinfo::getTaskName,planinfo.getTaskName()) .eq(HuzhouContractinfo::getFlag,"实际"); List tmp = contractinfoService.list(qw); if (tmp.size()>0){ // 清除原有合同信息(实际) LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper<>(); - deleteWrapper.eq(HuzhouContractinfo::getProjectId, contractinfo.getProjectId()) - .eq(HuzhouContractinfo::getTaskName, contractinfo.getTaskName()) + deleteWrapper.eq(HuzhouContractinfo::getProjectId, planinfo.getProjectId()) + .eq(HuzhouContractinfo::getTaskName, planinfo.getTaskName()) .eq(HuzhouContractinfo::getFlag,"实际"); boolean success = contractinfoService.remove(deleteWrapper); if(success){ @@ -607,7 +608,8 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl qw = new LambdaQueryWrapper<>(); qw.eq(HuzhouContractinfo::getProjectId, contractList.get(0).getProjectId()) - .eq(HuzhouContractinfo::getFlag, taskName.equals("合同签订") ? "计划" : "实际"); + .eq(HuzhouContractinfo::getFlag, taskName.equals("合同签订") ? "计划" : "实际") + .eq(HuzhouContractinfo::getFlag, taskName); // 3.查询数据库中符合条件的合同信息 List dbList = contractinfoService.list(qw); // 4.先删除原有数据再新增