|
@ -656,7 +656,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
// 使用 apply 方法加入自定义 SQL 语句进行 taskLevel 的数值比较
|
|
|
// 使用 apply 方法加入自定义 SQL 语句进行 taskLevel 的数值比较
|
|
|
//queryWrapper.apply("CAST(task_level AS DECIMAL) >= 2");
|
|
|
//queryWrapper.apply("CAST(task_level AS DECIMAL) >= 2");
|
|
|
queryWrapper.apply("CAST(task_level AS DECIMAL(10,2)) >= 1.7"); |
|
|
queryWrapper.apply("CAST(task_level AS DECIMAL(10,2)) >= 1.7"); |
|
|
// 添加 isfinish 条件,要求 isfinish 的值为 "0", "1", 或 "2"
|
|
|
// 删除所有状态为 0、1、2 的计划信息
|
|
|
queryWrapper.in(HuzhouPlaninfo::getIsfinish, "0", "1", "2"); |
|
|
queryWrapper.in(HuzhouPlaninfo::getIsfinish, "0", "1", "2"); |
|
|
this.remove(queryWrapper); |
|
|
this.remove(queryWrapper); |
|
|
} |
|
|
} |
|
@ -689,30 +689,28 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public String IsAllowModifyPlaninfo(String projectid,List<HuzhouPlaninfo> newPlaninfo) { |
|
|
public String IsAllowModifyPlaninfo(String projectid, List<HuzhouPlaninfo> newPlanInfos) { |
|
|
//如果审批中或已完成的内容,不在修改的内容中newPlaninfo,就会报错
|
|
|
//如果审批中或已完成的内容,不在修改的内容中newPlaninfo,就会报错
|
|
|
List<HuzhouPlaninfo> planinfoHistoryList = this.getFinishOrApprovalListByProjectId(projectid); |
|
|
// 删除已完成的内容或者审批中的内容
|
|
|
if(planinfoHistoryList.size()>0){ |
|
|
List<HuzhouPlaninfo> planInfoDbList = this.getFinishOrApprovalListByProjectId(projectid); |
|
|
for (HuzhouPlaninfo his:planinfoHistoryList){ |
|
|
List<HuzhouPlaninfo> toRemove = new ArrayList<>(); |
|
|
boolean isexist=false; |
|
|
if (planInfoDbList.size() > 0) { |
|
|
String hisTaskLevel = his.getTaskLevel(); |
|
|
for (HuzhouPlaninfo now : planInfoDbList) { |
|
|
String hisTaskName = his.getTaskName(); |
|
|
|
|
|
for(int i =0;i<newPlaninfo.size();i++){ |
|
|
|
|
|
// for (HuzhouPlaninfo now:huzhouPlaninfoArrayList){
|
|
|
|
|
|
HuzhouPlaninfo now = newPlaninfo.get(i); |
|
|
|
|
|
String nowTaskName = now.getTaskName(); |
|
|
|
|
|
String nowTaskLevel = now.getTaskLevel(); |
|
|
String nowTaskLevel = now.getTaskLevel(); |
|
|
if(hisTaskLevel.equals(nowTaskLevel)&&hisTaskName.equals(nowTaskName)){ |
|
|
String nowTaskName = now.getTaskName(); |
|
|
isexist=true; |
|
|
for (HuzhouPlaninfo newPlanInfo : newPlanInfos) { |
|
|
newPlaninfo.remove(now); |
|
|
String newTaskName = newPlanInfo.getTaskName(); |
|
|
break; |
|
|
String newTaskLevel = newPlanInfo.getTaskLevel(); |
|
|
} |
|
|
if (nowTaskLevel.equals(newTaskLevel) && nowTaskName.equals(newTaskName)) { |
|
|
|
|
|
toRemove.add(newPlanInfo); |
|
|
|
|
|
log.info("需要删除的任务阶段名称:{}",newTaskName); |
|
|
} |
|
|
} |
|
|
if(!isexist){ |
|
|
|
|
|
return "任务级别:"+hisTaskLevel+",任务名称:"+hisTaskName+"已完成,无法修改!"; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
// 删除掉已完成或者审批中的信息
|
|
|
|
|
|
newPlanInfos.removeAll(toRemove); |
|
|
|
|
|
newPlanInfos.forEach(item -> log.info("待上传的计划信息-->newPlanInfo:" + item.getTaskName())); |
|
|
return "1"; |
|
|
return "1"; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -937,9 +935,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
List<HuzhouPlaninfo> excelList = SerializationUtils.clone((ArrayList<HuzhouPlaninfo>) hashMap.get("arr")); |
|
|
List<HuzhouPlaninfo> excelList = SerializationUtils.clone((ArrayList<HuzhouPlaninfo>) hashMap.get("arr")); |
|
|
// 未完成的项目则可以修改
|
|
|
// 未完成的项目则可以修改
|
|
|
String isAllow = IsAllowModifyPlaninfo(projectid, huzhouPlaninfoArrayList); |
|
|
String isAllow = IsAllowModifyPlaninfo(projectid, huzhouPlaninfoArrayList); |
|
|
if (!"1".equals(isAllow)) { |
|
|
|
|
|
throw new EasyException(isAllow); |
|
|
|
|
|
} |
|
|
|
|
|
//修改项目计划会重新修改项目阶段类型
|
|
|
//修改项目计划会重新修改项目阶段类型
|
|
|
projectinfoService.modifyStageById(projectid,"4"); |
|
|
projectinfoService.modifyStageById(projectid,"4"); |
|
|
//保存历史记录
|
|
|
//保存历史记录
|
|
@ -951,10 +947,10 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
//删除未开始 已完成 和审批中且taskLevel >= 1.7的项目
|
|
|
//删除未开始 已完成 和审批中且taskLevel >= 1.7的项目
|
|
|
removeByProjectIdMoreThanTaskLevel(projectid); |
|
|
removeByProjectIdMoreThanTaskLevel(projectid); |
|
|
//将之前的分组id修改为最新的分组id
|
|
|
//将之前的分组id修改为最新的分组id
|
|
|
LambdaUpdateWrapper<HuzhouPlaninfo> wrapper = new LambdaUpdateWrapper<>(); |
|
|
LambdaUpdateWrapper<HuzhouPlaninfo> updateWrapper = new LambdaUpdateWrapper<>(); |
|
|
wrapper.eq(HuzhouPlaninfo::getProjectId,projectid); |
|
|
updateWrapper.eq(HuzhouPlaninfo::getProjectId,projectid); |
|
|
wrapper.set(HuzhouPlaninfo::getGroupId,huzhouPlaninfoArrayList.get(0).getGroupId()); |
|
|
updateWrapper.set(HuzhouPlaninfo::getGroupId,huzhouPlaninfoArrayList.get(0).getGroupId()); |
|
|
update(null,wrapper); |
|
|
update(null,updateWrapper); |
|
|
// 筛选掉项目立项阶段
|
|
|
// 筛选掉项目立项阶段
|
|
|
huzhouPlaninfoArrayList.removeIf(item -> "项目立项阶段".equals(item.getTaskName())); |
|
|
huzhouPlaninfoArrayList.removeIf(item -> "项目立项阶段".equals(item.getTaskName())); |
|
|
saveBatch(huzhouPlaninfoArrayList); |
|
|
saveBatch(huzhouPlaninfoArrayList); |
|
@ -978,7 +974,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
@Override |
|
|
@Override |
|
|
public void modifyPlaninfo(MultipartFile multipartFile, String projectid) throws Exception { |
|
|
public void modifyPlaninfo(MultipartFile multipartFile, String projectid) throws Exception { |
|
|
|
|
|
|
|
|
//增加文件修改条件:集中核验完成之后到立项审批才允许修改计划
|
|
|
//1.新增计划修改条件:集中核验完成之后到立项审批才允许修改计划
|
|
|
checkCurrentTaskLevel(projectid); |
|
|
checkCurrentTaskLevel(projectid); |
|
|
// 解析项目计划文件
|
|
|
// 解析项目计划文件
|
|
|
HashMap<String, Object> hashMap = getPlanInfoListFromFile(multipartFile, projectid); |
|
|
HashMap<String, Object> hashMap = getPlanInfoListFromFile(multipartFile, projectid); |
|
@ -987,37 +983,40 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
if (!res) { |
|
|
if (!res) { |
|
|
throw new EasyException((String) hashMap.get("msg")); |
|
|
throw new EasyException((String) hashMap.get("msg")); |
|
|
} |
|
|
} |
|
|
List<HuzhouPlaninfo> huzhouPlaninfoArrayList = (ArrayList<HuzhouPlaninfo>) hashMap.get("arr"); |
|
|
// 2.获取项目计划文件没有问题的计划列表
|
|
|
// 校验最后日期不能晚于25年底
|
|
|
List<HuzhouPlaninfo> planInfoList = (ArrayList<HuzhouPlaninfo>) hashMap.get("arr"); |
|
|
checkExcelPlanLastLevelTime(huzhouPlaninfoArrayList); |
|
|
|
|
|
|
|
|
// 3.校验最后日期不能晚于25年底
|
|
|
|
|
|
checkExcelPlanLastLevelTime(planInfoList); |
|
|
log.info("示范项目验收时间校验正确"); |
|
|
log.info("示范项目验收时间校验正确"); |
|
|
|
|
|
|
|
|
// 深克隆备份Excel重点计划以供后续做差集操作
|
|
|
// 4.深克隆备份Excel重点计划以供后续做差集操作
|
|
|
List<HuzhouPlaninfo> excelList = SerializationUtils.clone((ArrayList<HuzhouPlaninfo>) hashMap.get("arr")); |
|
|
List<HuzhouPlaninfo> excelList = SerializationUtils.clone((ArrayList<HuzhouPlaninfo>) hashMap.get("arr")); |
|
|
// 未完成的项目则可以修改
|
|
|
|
|
|
String isAllow = IsAllowModifyPlaninfo(projectid, huzhouPlaninfoArrayList); |
|
|
// 5.新增要求:未完成的项目则可以修改
|
|
|
if (!"1".equals(isAllow)) { |
|
|
// 这里按照之前逻辑将 处于审批和未完成的计划过滤掉
|
|
|
throw new EasyException(isAllow); |
|
|
String isAllow = IsAllowModifyPlaninfo(projectid, planInfoList); |
|
|
} |
|
|
|
|
|
//修改项目计划会重新修改项目阶段类型
|
|
|
//修改项目计划会重新修改项目阶段类型
|
|
|
projectinfoService.modifyStageById(projectid,"4"); |
|
|
projectinfoService.modifyStageById(projectid,"4"); |
|
|
//保存历史记录
|
|
|
// 6.将原有计划信息保存到历史记录中
|
|
|
List<HuzhouPlaninfo> planinfoHistory = getListByProjectId(projectid); |
|
|
List<HuzhouPlaninfo> nowPlanInfoFromDb = getListByProjectId(projectid); |
|
|
planinfoHistoryService.savePlanInfoToHistory(planinfoHistory); |
|
|
planinfoHistoryService.savePlanInfoToHistory(nowPlanInfoFromDb); |
|
|
// 获取审批中和已完成的计划列表进行更新操作
|
|
|
|
|
|
updatePlanForShenPiAndFinished(huzhouPlaninfoArrayList, excelList, planinfoHistory); |
|
|
|
|
|
|
|
|
|
|
|
//删除未开始 已完成 和审批中且taskLevel >= 1.7的项目
|
|
|
// 7.获取审批中和已完成的计划列表进行更新操作
|
|
|
|
|
|
updatePlanForShenPiAndFinished(planInfoList, excelList, nowPlanInfoFromDb); |
|
|
|
|
|
|
|
|
|
|
|
// 8.删除 现存数据库中 未开始 已完成 和审批中且taskLevel >= 1.7的项目
|
|
|
removeByProjectIdMoreThanTaskLevel(projectid); |
|
|
removeByProjectIdMoreThanTaskLevel(projectid); |
|
|
// 将之前的分组id修改为最新的分组id
|
|
|
// 将之前的分组id修改为最新的分组id
|
|
|
LambdaUpdateWrapper<HuzhouPlaninfo> wrapper = new LambdaUpdateWrapper<>(); |
|
|
LambdaUpdateWrapper<HuzhouPlaninfo> wrapper = new LambdaUpdateWrapper<>(); |
|
|
wrapper.eq(HuzhouPlaninfo::getProjectId,projectid); |
|
|
wrapper.eq(HuzhouPlaninfo::getProjectId,projectid); |
|
|
wrapper.set(HuzhouPlaninfo::getGroupId,huzhouPlaninfoArrayList.get(0).getGroupId()); |
|
|
wrapper.set(HuzhouPlaninfo::getGroupId,planInfoList.get(0).getGroupId()); |
|
|
update(null,wrapper); |
|
|
update(null,wrapper); |
|
|
// 筛选掉项目立项阶段
|
|
|
|
|
|
huzhouPlaninfoArrayList.removeIf(item -> "项目立项阶段".equals(item.getTaskName())); |
|
|
// 9.筛选掉项目立项阶段
|
|
|
//批量新增
|
|
|
planInfoList.removeIf(item -> "项目立项阶段".equals(item.getTaskName())); |
|
|
saveBatch(huzhouPlaninfoArrayList); |
|
|
// 10.批量新增
|
|
|
|
|
|
saveBatch(planInfoList); |
|
|
|
|
|
|
|
|
//创建流程
|
|
|
//创建流程
|
|
|
WorkFlow workFlow = workflowService.createFlow("createPlaninfo",projectid); |
|
|
WorkFlow workFlow = workflowService.createFlow("createPlaninfo",projectid); |
|
@ -1094,17 +1093,28 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void updatePlanForShenPiAndFinished(List<HuzhouPlaninfo> huzhouPlaninfoArrayList, List<HuzhouPlaninfo> excelList, List<HuzhouPlaninfo> planinfoHistory) { |
|
|
/** |
|
|
// 计算差集
|
|
|
* 针对 已经审批和完成的项目计划的进行修改 对应的开始时间和结束时间 |
|
|
Set<String> keysFromHuzhouPlaninfoArrayList = huzhouPlaninfoArrayList.stream() |
|
|
* isFinish为0表示未开始,1审批中,2表示已完成 |
|
|
|
|
|
* @param planInfoList 过滤掉 已完成和审批中的计划集合 |
|
|
|
|
|
* @param excelList 用户上传的excel中计划的信息 |
|
|
|
|
|
* @param nowPlanInfoFromDb 数据库中现存计划信息 |
|
|
|
|
|
*/ |
|
|
|
|
|
private void updatePlanForShenPiAndFinished(List<HuzhouPlaninfo> planInfoList, List<HuzhouPlaninfo> excelList, List<HuzhouPlaninfo> nowPlanInfoFromDb) { |
|
|
|
|
|
// **计算差集** 总-未完成 从而获取 :原先计划中已完成+审批中的计划集合
|
|
|
|
|
|
|
|
|
|
|
|
// 1.存储未完成的计划信息集合
|
|
|
|
|
|
Set<String> keysFromPlanInfoList = planInfoList.stream() |
|
|
.map(item ->item.getProjectId() + "-" + item.getTaskLevel()) |
|
|
.map(item ->item.getProjectId() + "-" + item.getTaskLevel()) |
|
|
.collect(Collectors.toSet()); |
|
|
.collect(Collectors.toSet()); |
|
|
|
|
|
|
|
|
List<HuzhouPlaninfo> tmpDifList = planinfoHistory.stream() |
|
|
// 2.获取原先计划中已完成+审批中的计划集合
|
|
|
.filter(item -> !keysFromHuzhouPlaninfoArrayList.contains(item.getProjectId() + "-" + item.getTaskLevel())) |
|
|
List<HuzhouPlaninfo> tmpDifList = nowPlanInfoFromDb.stream() |
|
|
|
|
|
// 过滤掉未完成的计划信息集合,得到 原先计划中已完成+审批中的计划集合 并且 taskLevel大于1.6(集中核验阶段)
|
|
|
|
|
|
.filter(item -> !keysFromPlanInfoList.contains(item.getProjectId() + "-" + item.getTaskLevel())) |
|
|
.filter(item -> { |
|
|
.filter(item -> { |
|
|
try { |
|
|
try { |
|
|
// 过滤条件:只保留 taskLevel 大于 2 的记录
|
|
|
// 过滤条件:只保留 taskLevel 大于 1.6的记录
|
|
|
BigDecimal taskLevel = new BigDecimal(item.getTaskLevel()); |
|
|
BigDecimal taskLevel = new BigDecimal(item.getTaskLevel()); |
|
|
return taskLevel.compareTo(BigDecimal.valueOf(1.6)) > 0; |
|
|
return taskLevel.compareTo(BigDecimal.valueOf(1.6)) > 0; |
|
|
} catch (NumberFormatException e) { |
|
|
} catch (NumberFormatException e) { |
|
@ -1114,13 +1124,13 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
}) |
|
|
}) |
|
|
.collect(Collectors.toList()); |
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
// isFinish为0表示未开始,1审批中,2表示已完成 scheduledStartTime scheduledEndTime
|
|
|
// 3.获取到用户上传的excel中计划的信息
|
|
|
Map<String, HuzhouPlaninfo> excelMap = excelList.stream() |
|
|
Map<String, HuzhouPlaninfo> excelMap = excelList.stream() |
|
|
.collect(Collectors.toMap( |
|
|
.collect(Collectors.toMap( |
|
|
item -> item.getTaskLevel(), |
|
|
item -> item.getTaskLevel(), |
|
|
item -> item |
|
|
item -> item |
|
|
)); |
|
|
)); |
|
|
// 遍历 tmpDifList,并根据 projectId 和 taskLevel 查找对应的 excelItem
|
|
|
// 4.遍历 tmpDifList,封装对应的scheduledStartTime scheduledEndTime
|
|
|
tmpDifList.forEach(tmpItem -> { |
|
|
tmpDifList.forEach(tmpItem -> { |
|
|
String key = tmpItem.getTaskLevel(); |
|
|
String key = tmpItem.getTaskLevel(); |
|
|
Optional.ofNullable(excelMap.get(key)).ifPresent(excelItem -> { |
|
|
Optional.ofNullable(excelMap.get(key)).ifPresent(excelItem -> { |
|
@ -1128,10 +1138,10 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper, |
|
|
tmpItem.setScheduledStartTime(excelItem.getScheduledStartTime()); |
|
|
tmpItem.setScheduledStartTime(excelItem.getScheduledStartTime()); |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
|
|
|
// 5.将修改过后已完成和审批中的项目加护添加到 planInfoList中 最后一起新增
|
|
|
huzhouPlaninfoArrayList.addAll(tmpDifList); |
|
|
planInfoList.addAll(tmpDifList); |
|
|
for (HuzhouPlaninfo huzhouPlaninfo : huzhouPlaninfoArrayList) { |
|
|
for (HuzhouPlaninfo huzhouPlaninfo : planInfoList) { |
|
|
log.info("修改后的计划信息为{}",huzhouPlaninfo.getTaskLevel()); |
|
|
log.info("修改后的计划信息为{}-->{}",huzhouPlaninfo.getTaskName(),huzhouPlaninfo.getTaskLevel()); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|