feat: 制修订流程结束之后回写企标计划的完成时间

This commit is contained in:
2024-06-13 16:35:59 +08:00
parent 93f1752376
commit fbd0c2549b
4 changed files with 121 additions and 5 deletions
@@ -19,6 +19,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
/**
@@ -33,9 +35,6 @@ public class ESRevisionController {
@Resource
private EsRevisionService revisionService;
@Resource
private IProcessHandleService processHandleService;
@Resource
private ActFlowCommonService actFlowCommonService;
@@ -142,4 +141,16 @@ 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();
}
}
@@ -32,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/**
* @author: Mzaxd
@@ -58,6 +59,8 @@ public class ProcessESRevisionEndListener implements ExecutionListener {
@Resource
private IBusProcessModelHisService busProcessModelHisService;
@Override
public void notify(DelegateExecution delegateExecution) {
// 获取流程实例Id
@@ -134,8 +137,9 @@ public class ProcessESRevisionEndListener implements ExecutionListener {
} else {
esp.setProjectStatus(ESPProjectStatus.COMPLETED.getValue());
}
// 更新企标计划状态
espService.updateById(esp);
// 软删除制修订计划
esRevisionService.removeById(data.getId());
// 更新所有时间
esRevisionService.updatePlanDateByProcessInstanceId(Collections.singletonList(processInstanceId));
}
}
@@ -30,4 +30,8 @@ public interface EsRevisionService extends IService<ProcessEsRevision> {
void transfer(String taskId, String userId);
Map<String, List<SignInfo>> getSignInfo(String processInstanceId);
void updatePlanDateByProcessInstanceId(List<String> processInstanceId);
void updateAllPlanDate();
}
@@ -1,5 +1,6 @@
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;
@@ -904,6 +905,102 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
sendMessageAPI.sendMessage(sendMessageDTO);
}
}
@Override
public void updatePlanDateByProcessInstanceId(List<String> processInstanceIdList) {
for (String processInstanceId : processInstanceIdList) {
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);
continue;
}
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();
}
// 获取计划
EnterpriseStandardPlan esp = espService.getById(espId);
if (esp == null) {
log.error("根据企标制计划ID未找到企标制计划数据,espId:{}", espId);
continue;
}
// 获取所有通过和已完成的审批记录
List<ProcessApprovalRecord> approvalRecords = parService.list(new LambdaQueryWrapper<ProcessApprovalRecord>()
.eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId)
.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.COMPLETE.getValue()));
// 按照任务名称分类并按照完成时间降序
Map<String, List<ProcessApprovalRecord>> approvalRecordMap = approvalRecords.stream()
.sorted(Comparator.comparing(ProcessApprovalRecord::getEndTime, Comparator.reverseOrder()))
.collect(Collectors.groupingBy(ProcessApprovalRecord::getNodeId));
// 设置不同的时间
// 提交草稿日期
if (approvalRecordMap.containsKey(OTHER_DRAFT_USER_UPLOAD)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(OTHER_DRAFT_USER_UPLOAD).get(0);
esp.setDraftSubmissionDate(approvalRecord.getEndTime());
} else if (approvalRecordMap.containsKey(MAIN_DRAFT_USER_DISTRIBUTE)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(MAIN_DRAFT_USER_DISTRIBUTE).get(0);
esp.setDraftSubmissionDate(approvalRecord.getEndTime());
}
// 草稿完成日期
if (approvalRecordMap.containsKey(MAIN_DRAFT_USER_COLLECT_FIRST)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(MAIN_DRAFT_USER_COLLECT_FIRST).get(0);
esp.setDraftCompletionDate(approvalRecord.getEndTime());
}
// 是否征求意见
if (approvalRecordMap.containsKey(CONTACT_USER_DISTRIBUTE)) {
esp.setSolicitationOpinionEnabled(YesOrNoEnum.YES.getValue());
} else {
esp.setSolicitationOpinionEnabled(YesOrNoEnum.NO.getValue());
}
// 征求意见稿完成日期
if (approvalRecordMap.containsKey(MAIN_DRAFT_USER_COLLECT_SECOND)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(MAIN_DRAFT_USER_COLLECT_SECOND).get(0);
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(CHIEF_ENGINEER_APPROVAL)) {
ProcessApprovalRecord approvalRecord = approvalRecordMap.get(CHIEF_ENGINEER_APPROVAL).get(0);
esp.setApprovalDate(approvalRecord.getEndTime());
}
// 发布日期
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());
}
espService.updateById(esp);
}
}
@Override
public void updateAllPlanDate() {
List<String> prcStatus = new ArrayList<>();
// 从流程主表找到所有已经完成的企标制修订流程
List<ProcessAll> processAlls = processAllService.list(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_REVISION.getValue())
.in(ProcessAll::getPrcStatus, FinishFlagEnum.COMPLETE.getValue())
);
List<String> prcIds = processAlls.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList());
this.updatePlanDateByProcessInstanceId(prcIds);
}
}