From 080d2de2a4512650c733c4878db57355b592889b Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Mon, 31 Mar 2025 16:57:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A1=E5=88=92=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=A8=A1=E6=9D=BF=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/HuzhouPlaninfoServiceImpl.java | 100 +++++++++++++----- 1 file changed, 74 insertions(+), 26 deletions(-) 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);