fix: 企标计划状态修复

This commit is contained in:
2024-09-11 16:27:39 +08:00
parent 3c7ec8ac84
commit a1e5c4bc75
5 changed files with 52 additions and 120 deletions
@@ -9,7 +9,6 @@ import com.jero.modules.activiti.process.common.entity.TransferVO;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO;
import com.jero.modules.activiti.process.esRevision.service.EsRevisionService;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -19,8 +18,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
/**
@@ -141,16 +138,4 @@ public class ESRevisionController {
return Result.OK(revisionService.getSignInfo(processInstanceId));
}
/**
* 更新所有已完成的企标计划的完成时间字段
*
*/
@AutoLog(value = "企标制修订流程-更新所有已完成的企标计划的完成时间字段")
@ApiOperation(value="企标制修订流程-更新所有已完成的企标计划的完成时间字段", notes="企标制修订流程-更新所有已完成的企标计划的完成时间字段")
@GetMapping(value = "/updateAllPlanDate")
public Result<?> updateAllPlanDate() {
revisionService.updateAllPlanDate();
return Result.OK();
}
}
@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.modules.activiti.process.common.enums.StandardStateEnum;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectStatus;
import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision;
import com.jero.modules.activiti.process.esRevision.entity.vo.ReviewMeetingDetailVO;
import com.jero.modules.activiti.process.esRevision.service.EsRevisionService;
@@ -29,7 +28,9 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author: Mzaxd
@@ -125,16 +126,7 @@ public class ProcessESRevisionEndListener implements ExecutionListener {
BeanCopyUtils.copyBeanList(reviewMeetingDetailVOS, EnterpriseStandardRmrEvaluateDetail.class);
rmrEvaluateDetails.forEach(r -> r.setReviewMeetingId(esRmr.getId()));
rmrDetailService.saveBatch(rmrEvaluateDetails);
// 企标计划改为已完成或者逾期完成
Date curDate = new Date();
if (curDate.after(esp.getPlanApprovalDate())) {
esp.setProjectStatus(ESPProjectStatus.OVERDUE_COMPLETED.getValue());
} else {
esp.setProjectStatus(ESPProjectStatus.COMPLETED.getValue());
}
// 更新企标计划状态
espService.updateById(esp);
// 更新所有时间
esRevisionService.updatePlanDateByProcessInstanceId(Collections.singletonList(processInstanceId));
}
}
@@ -1,5 +1,6 @@
package com.jero.modules.activiti.process.esRevision.service;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.esRevision.entity.SignInfo;
@@ -31,7 +32,7 @@ public interface EsRevisionService extends IService<ProcessEsRevision> {
Map<String, List<SignInfo>> getSignInfo(String processInstanceId);
void updatePlanDateByProcessInstanceId(List<String> processInstanceId);
void updatePlanDateByProcessInstanceId(List<ProcessAll> processAllList);
void updateAllPlanDate();
}
@@ -1,6 +1,5 @@
package com.jero.modules.activiti.process.esRevision.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -18,6 +17,7 @@ import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.common.DraftCommon;
import com.jero.modules.activiti.process.common.entity.CommonVO;
@@ -947,34 +947,23 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
}
@Override
public void updatePlanDateByProcessInstanceId(List<String> processInstanceIdList) {
public void updatePlanDateByProcessInstanceId(List<ProcessAll> processAllList) {
List<EnterpriseStandardPlan> espList = new ArrayList<>();
processInstanceIdList.forEach(processInstanceId -> {
String espId = "";
ProcessEsRevision revision = getOne(new LambdaQueryWrapper<ProcessEsRevision>()
.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId));
if (revision == null) {
// 通过草稿表寻找espId
List<ProcessDraft> draftList = prcDraftService.list(new LambdaQueryWrapper<ProcessDraft>()
.eq(ProcessDraft::getProcessInstanceId, processInstanceId)
.eq(ProcessDraft::getSaveSource, 3));
if (CollUtil.isEmpty(draftList)) {
log.error("根据流程实例ID未找到企标制修订流程草稿数据 processInstanceId{}", processInstanceId);
return;
}
ProcessDraft draft = draftList.get(0);
String infoJsonStr = draft.getInfoJsonStr();
// 解析json 获取 data下的espId
JSONObject jsonObject = JSON.parseObject(infoJsonStr);
JSONObject data = jsonObject.getJSONObject("data");
espId = (String) data.get("espId");
} else {
espId = revision.getEspId();
processAllList.forEach(processAll -> {
String processInstanceId = processAll.getProcessInstanceId();
String prcName = processAll.getPrcName();
String newStandardNo = "";
String[] parts = prcName.split("-");
if (parts.length > 0) {
newStandardNo = parts[0].trim() + "-" + parts[1].trim(); // 提取标准编号部分
}
// 获取计划
EnterpriseStandardPlan esp = espService.getById(espId);
LambdaQueryWrapper<EnterpriseStandardPlan> espQueryWrapper = new LambdaQueryWrapper<>();
espQueryWrapper.eq(EnterpriseStandardPlan::getNewEnStandardNo, newStandardNo);
List<EnterpriseStandardPlan> findEspList = espService.list(espQueryWrapper);
EnterpriseStandardPlan esp = findEspList.stream().findFirst().orElse(null);
if (esp == null) {
log.error("根据企标制计划ID未找到企标制计划数据,espId{}", espId);
log.error("根据企标制计划ID未找到企标制计划数据,新企标编号{}", newStandardNo);
return;
}
// 获取所有通过和已完成的审批记录
@@ -986,6 +975,8 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
.sorted(Comparator.comparing(ProcessApprovalRecord::getEndTime, Comparator.reverseOrder()))
.collect(Collectors.groupingBy(ProcessApprovalRecord::getNodeId));
// 设置不同的时间
Date planApprovalDate = esp.getPlanApprovalDate();
esp.setProjectStatus(ESPProjectStatus.IN_PROGRESS.getValue());
// 提交草稿日期
if (approvalRecordMap.containsKey(OTHER_DRAFT_USER_UPLOAD)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(OTHER_DRAFT_USER_UPLOAD).get(0);
@@ -1011,35 +1002,43 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
esp.setSolicitationDraftCompletionDate(approvalRecord.getEndTime());
}
// 评审日期
if (approvalRecordMap.containsKey(MAIN_DRAFT_USER_UPLOAD)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(MAIN_DRAFT_USER_UPLOAD).get(0);
esp.setReviewDate(approvalRecord.getEndTime());
if (approvalRecordMap.containsKey(RATER_RATE)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(RATER_RATE).get(0);
Date reviewDate = approvalRecord.getCreateTime();
esp.setReviewDate(reviewDate);
if (!reviewDate.after(planApprovalDate)) {
esp.setProjectStatus(ESPProjectStatus.REVIEW.getValue());
}
}
// 报批日期
if (approvalRecordMap.containsKey(CHIEF_ENGINEER_APPROVAL)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(CHIEF_ENGINEER_APPROVAL).get(0);
esp.setApprovalDate(approvalRecord.getEndTime());
if (approvalRecordMap.containsKey(MAIN_DRAFT_USER_UPLOAD)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(MAIN_DRAFT_USER_UPLOAD).get(0);
Date approvalDate = approvalRecord.getEndTime();
esp.setApprovalDate(approvalDate);
if (approvalDate.after(planApprovalDate)) {
esp.setProjectStatus(ESPProjectStatus.OVERDUE_COMPLETED.getValue());
} else {
esp.setProjectStatus(ESPProjectStatus.COMPLETED.getValue());
}
}
// 发布日期
if (approvalRecordMap.containsKey(MAIN_DRAFT_USER_RELEASE)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(MAIN_DRAFT_USER_RELEASE).get(0);
esp.setReleaseDate(approvalRecord.getEndTime());
} else {
esp.setReleaseDate(new Date());
}
espList.add(esp);
});
espService.updateBatchById(espList);
log.info("企标计划审批完成日期更新成功,共更新企标制计划{}条数据", espList.size());
log.info("企标计划时间更新成功,共更新企标制计划{}条数据", espList.size());
}
@Override
public void updateAllPlanDate() {
// 从流程主表找到所有企标制修订流程
List<ProcessAll> processAlls = processAllService.list(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_REVISION.getValue()));
List<String> prcIds = processAlls.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList());
this.updatePlanDateByProcessInstanceId(prcIds);
.eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_REVISION.getValue())
.ne(ProcessAll::getPrcStatus, ProcessStatusEnum.WITHDRAWN.getValue()));
this.updatePlanDateByProcessInstanceId(processAlls);
}
}
@@ -33,6 +33,7 @@ public class ESPlanProjectStatusJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("计划状态更新开始");
// 更新所有流程状态
esRevisionService.updateAllPlanDate();
// 每天执行定时任务 判断所有进行中的计划是否逾期 逾期则修改项目状态为逾期
@@ -56,67 +57,21 @@ public class ESPlanProjectStatusJob implements Job {
esp.setProjectStatus(ESPProjectStatus.NOT_STARTED.getValue());
});
espService.updateBatchById(cancelList);
List<EnterpriseStandardPlan> inProgressList = list.stream()
.filter(esp -> ESPProjectStatus.IN_PROGRESS.getValue().equals(esp.getProjectStatus()) ||
ESPProjectStatus.NOT_STARTED.getValue().equals(esp.getProjectStatus()))
.filter(esp -> !ESPChangeType.WORK_TERMINATE.getValue().equals(esp.getChangeStatus()) &&
!ESPChangeType.CANCEL.getValue().equals(esp.getChangeStatus()))
.collect(Collectors.toList());
List<EnterpriseStandardPlan> overdueList = list.stream()
.filter(esp -> ESPProjectStatus.OVERDUE.getValue().equals(esp.getProjectStatus()))
.collect(Collectors.toList());
List<EnterpriseStandardPlan> completeList = list.stream()
.filter(esp -> ESPProjectStatus.OVERDUE_COMPLETED.getValue().equals(esp.getProjectStatus()) ||
ESPProjectStatus.COMPLETED.getValue().equals(esp.getProjectStatus()))
// 将所有未开始的判断是否逾期
List<EnterpriseStandardPlan> notStartedList = list.stream()
.filter(esp -> ESPProjectStatus.NOT_STARTED.getValue().equals(esp.getProjectStatus()))
.collect(Collectors.toList());
Date curDate = new Date();
// 判断所有进行中的流程是否逾期
inProgressList.parallelStream().forEach(p -> {
if (null == p.getPlanApprovalDate()) {
return;
}
if (curDate.after(p.getPlanApprovalDate()) && null == p.getApprovalDate()) {
log.info("计划【" + p.getNewEnStandardName() + "】已逾期,计划完成日期:" + p.getPlanApprovalDate());
// 判断所有未开始的是否逾期
notStartedList.parallelStream().forEach(p -> {
Date planApprovalDate = p.getPlanApprovalDate();
if (curDate.after(planApprovalDate)) {
log.info("计划【" + p.getNewEnStandardName() + "】逾期,计划完成日期:" + p.getPlanApprovalDate());
p.setProjectStatus(ESPProjectStatus.OVERDUE.getValue());
}
if (null != p.getReviewDate() && p.getPlanApprovalDate().after(curDate)) {
log.info("计划【" + p.getNewEnStandardName() + "】评审,计划完成日期:" + p.getPlanApprovalDate());
p.setProjectStatus(ESPProjectStatus.REVIEW.getValue());
}
});
espService.updateBatchById(inProgressList);
// 判断所有逾期的流程是否还是逾期
overdueList.parallelStream().forEach(p -> {
if (null == p.getPlanApprovalDate()) {
return;
}
if (p.getApprovalDate() != null && p.getPlanApprovalDate().after(p.getApprovalDate())
|| (null == p.getApprovalDate() && curDate.before(p.getPlanApprovalDate()))) {
log.info("计划【" + p.getNewEnStandardName() + "】进行中,计划完成日期:" + p.getPlanApprovalDate());
p.setProjectStatus(ESPProjectStatus.IN_PROGRESS.getValue());
}
if (null != p.getReviewDate() && null != p.getPlanApprovalDate() && p.getPlanApprovalDate().after(curDate)) {
log.info("计划【" + p.getNewEnStandardName() + "】评审,计划完成日期:" + p.getPlanApprovalDate());
p.setProjectStatus(ESPProjectStatus.REVIEW.getValue());
}
});
espService.updateBatchById(overdueList);
// 判断所有已完成的计划是否逾期完成
completeList.parallelStream().forEach(p -> {
// 判断两个日期都不能为null
if (null == p.getApprovalDate() || null == p.getPlanApprovalDate()) {
return;
}
if (p.getApprovalDate().after(p.getPlanApprovalDate())) {
log.info("计划【" + p.getNewEnStandardName() + "】逾期完成,计划完成日期:" + p.getPlanApprovalDate());
p.setProjectStatus(ESPProjectStatus.OVERDUE_COMPLETED.getValue());
} else {
log.info("计划【" + p.getNewEnStandardName() + "】完成,计划完成日期:" + p.getPlanApprovalDate());
p.setProjectStatus(ESPProjectStatus.COMPLETED.getValue());
}
});
espService.updateBatchById(completeList);
espService.updateBatchById(notStartedList);
log.info("计划状态更新完成");
}
}