Browse Source

代码注释补充 和调整针对项目计划上传

master
gjh 2 months ago
parent
commit
f500bc4c33
  1. 2
      huzhou/src/main/java/com/easy/admin/common/constant/CommonConstant.java
  2. 136
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java
  3. 8
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

2
huzhou/src/main/java/com/easy/admin/common/constant/CommonConstant.java

@ -5,7 +5,7 @@ package com.easy.admin.common.constant;
* @author: jeecg-boot
*/
public interface CommonConstant {
String REDIS_KEY_PROJECT_BOARD_INFO = "hz_project_board_Info";
String REDIS_KEY_PROJECT_BOARD_INFO = "hz_prod_project_board_info";
long REDIS_EXPIRE_TIME = 60*6;
/**

136
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java

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

8
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

@ -444,6 +444,14 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
item.setChildren(null);
}
});
// 填充当且项目所处节点
for (HuzhouProjectinfoOV record : records) {
String projectId = record.getId();
String currentPointName = planinfoMapper.getCurrentPointName(projectId);
if (StringUtils.isNotBlank(currentPointName)){
record.setCurrentPointName(currentPointName);
}
}
return projectAndChildInfoPageList;
}

Loading…
Cancel
Save