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 6963b7e..2ee5981 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 @@ -994,33 +994,81 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl excelList = SerializationUtils.clone((ArrayList) hashMap.get("arr")); + if (planInfoList.size() == 34) { + log.info("修改2000以上的项目计划采用不同的模板,并只修改未开始的节点!"); + + List excelList = SerializationUtils.clone((ArrayList) hashMap.get("arr")); + // 过滤掉 taskLevel 小于 1.7 的数据,并保留 taskLevel 等于 "1.10" 的记录 + List filteredList = excelList.stream() + .filter(item -> { + String taskLevelStr = item.getTaskLevel(); + try { + // 检查是否是需要保留的特殊值 + if ("1.10".equals(taskLevelStr)) { + return true; + } + + // 将taskLevel转换为BigDecimal进行比较 + BigDecimal taskLevel = new BigDecimal(taskLevelStr); + return taskLevel.compareTo(new BigDecimal("1.7")) >= 0; // 注意这里直接使用字符串"1.7"构造BigDecimal以避免浮点数精度问题 + } catch (NumberFormatException e) { + // 如果转换失败,可以选择处理异常或忽略这条记录 + throw new RuntimeException("无法将 taskLevel 转换为数字: " + taskLevelStr, e); + } + }) + .collect(Collectors.toList()); + excelList = filteredList; + excelList.forEach(item -> {log.info("需要新增:{}-->{}",item.getTaskLevel(),item.getTaskName());}); + // 保存历史后删除 + List nowPlanInfoFromDb = getListByProjectId(projectid); + planinfoHistoryService.savePlanInfoToHistory(nowPlanInfoFromDb); + + // 集中核验的之后的计划都删除 + removeByProjectIdMoreThanTaskLevel(projectid); + // 特殊群里:删除1.10的未完成计划 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid); + queryWrapper.eq(HuzhouPlaninfo::getTaskLevel,"1.10"); + queryWrapper.in(HuzhouPlaninfo::getIsfinish, "0"); + this.remove(queryWrapper); + // 将之前的分组id修改为最新的分组id + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(HuzhouPlaninfo::getProjectId,projectid); + wrapper.set(HuzhouPlaninfo::getGroupId,planInfoList.get(0).getGroupId()); + update(null,wrapper); + + saveBatch(excelList); + }else { + // 4.深克隆备份Excel重点计划以供后续做差集操作 + List excelList = SerializationUtils.clone((ArrayList) hashMap.get("arr")); + + // 5.新增要求:未完成的项目则可以修改 + // 这里按照之前逻辑将 处于审批和未完成的计划过滤掉 + filterIsAllowModifyPlaninfo(projectid, planInfoList); + + //修改项目计划会重新修改项目阶段类型 + projectinfoService.modifyStageById(projectid,"4"); + // 6.将原有计划信息保存到历史记录中 + List nowPlanInfoFromDb = getListByProjectId(projectid); + planinfoHistoryService.savePlanInfoToHistory(nowPlanInfoFromDb); + + // 7.获取审批中和已完成的计划列表进行更新操作 + updatePlanForShenPiAndFinished(planInfoList, excelList, nowPlanInfoFromDb); + + // 8.删除 现存数据库中 未开始 已完成 和审批中且taskLevel >= 1.7的项目 + removeByProjectIdMoreThanTaskLevel(projectid); + // 将之前的分组id修改为最新的分组id + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(HuzhouPlaninfo::getProjectId,projectid); + wrapper.set(HuzhouPlaninfo::getGroupId,planInfoList.get(0).getGroupId()); + update(null,wrapper); + + // 9.筛选掉项目立项阶段 + planInfoList.removeIf(item -> "项目立项阶段".equals(item.getTaskName())); + // 10.批量新增 + saveBatch(planInfoList); + } - // 5.新增要求:未完成的项目则可以修改 - // 这里按照之前逻辑将 处于审批和未完成的计划过滤掉 - filterIsAllowModifyPlaninfo(projectid, planInfoList); - //修改项目计划会重新修改项目阶段类型 - projectinfoService.modifyStageById(projectid,"4"); - // 6.将原有计划信息保存到历史记录中 - List nowPlanInfoFromDb = getListByProjectId(projectid); - planinfoHistoryService.savePlanInfoToHistory(nowPlanInfoFromDb); - - // 7.获取审批中和已完成的计划列表进行更新操作 - updatePlanForShenPiAndFinished(planInfoList, excelList, nowPlanInfoFromDb); - - // 8.删除 现存数据库中 未开始 已完成 和审批中且taskLevel >= 1.7的项目 - removeByProjectIdMoreThanTaskLevel(projectid); - // 将之前的分组id修改为最新的分组id - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(HuzhouPlaninfo::getProjectId,projectid); - wrapper.set(HuzhouPlaninfo::getGroupId,planInfoList.get(0).getGroupId()); - update(null,wrapper); - - // 9.筛选掉项目立项阶段 - planInfoList.removeIf(item -> "项目立项阶段".equals(item.getTaskName())); - // 10.批量新增 - saveBatch(planInfoList); //创建流程 WorkFlow workFlow = workflowService.createFlow("createPlaninfo",projectid);