diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/controller/ESRevisionController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/controller/ESRevisionController.java index 8aa27d3e..10a523b5 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/controller/ESRevisionController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/controller/ESRevisionController.java @@ -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(); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/ProcessESRevisionEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/ProcessESRevisionEndListener.java index e493897c..dac182e9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/ProcessESRevisionEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/ProcessESRevisionEndListener.java @@ -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)); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/EsRevisionService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/EsRevisionService.java index adb66239..c0d4c84c 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/EsRevisionService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/EsRevisionService.java @@ -30,4 +30,8 @@ public interface EsRevisionService extends IService { void transfer(String taskId, String userId); Map> getSignInfo(String processInstanceId); + + void updatePlanDateByProcessInstanceId(List processInstanceId); + + void updateAllPlanDate(); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java index dbdc7d10..30ea877a 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java @@ -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 processInstanceIdList) { + for (String processInstanceId : processInstanceIdList) { + String espId = ""; + ProcessEsRevision revision = getOne(new LambdaQueryWrapper() + .eq(ProcessEsRevision::getProcessInstanceId, processInstanceId)); + if (revision == null) { + // 通过草稿表寻找espId + List draftList = prcDraftService.list(new LambdaQueryWrapper() + .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 approvalRecords = parService.list(new LambdaQueryWrapper() + .eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId) + .eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.COMPLETE.getValue())); + // 按照任务名称分类并按照完成时间降序 + Map> 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 prcStatus = new ArrayList<>(); + // 从流程主表找到所有已经完成的企标制修订流程 + List processAlls = processAllService.list(new LambdaQueryWrapper() + .eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_REVISION.getValue()) + .in(ProcessAll::getPrcStatus, FinishFlagEnum.COMPLETE.getValue()) + ); + List prcIds = processAlls.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList()); + this.updatePlanDateByProcessInstanceId(prcIds); + } }