From c4ec997deaa0431caf9d22cba4af6d9748aa8478 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Sun, 25 Feb 2024 11:13:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=2081855=20=E4=BC=81=E6=A0=87=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E5=8F=98=E6=9B=B4--=E5=90=88=E5=B9=B6--=E5=88=B6?= =?UTF-8?q?=E4=BF=AE=E8=AE=A2=E6=B5=81=E7=A8=8B=E6=B2=A1=E6=9C=89=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8F=91=E8=B5=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProcessESInitChangeEndListener.java | 100 +++++++++++------- 1 file changed, 61 insertions(+), 39 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/listener/ProcessESInitChangeEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/listener/ProcessESInitChangeEndListener.java index 937150cc..5f8686a7 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/listener/ProcessESInitChangeEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/listener/ProcessESInitChangeEndListener.java @@ -28,6 +28,7 @@ import org.activiti.engine.delegate.ExecutionListener; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -82,7 +83,7 @@ public class ProcessESInitChangeEndListener implements ExecutionListener { processEsInitChange.setChangeStatus(ESPChangeType.ADD.getValue()); if (ESPProjectType.MODIFY.getValue().equals(projectType)) { processEsInitChange.setApplicationCategory(ESPProjectType.MODIFY.getValue()); - if (!esUtil.verifyEnStandardNumber(processEsInitChanges.get(0).getNewEnStandardNo())) { + if (!this.verifyEnStandardNumberInitChangeLast(processEsInitChanges.get(0).getNewEnStandardNo())) { throw new JeroBootException(ResultCommon.NEW_EN_STANDARD_NUMBER_CONFLICT); } } else { @@ -98,44 +99,8 @@ public class ProcessESInitChangeEndListener implements ExecutionListener { EnterpriseStandardPlan esp = enterpriseStandardPlans.get(0); esRevisionService.autoStartProcess(getRevisionDataVO(esp)); } else { - // 如果是变更流程且不是完成时间变更,则需要撤回制修订流程 - if (!ESPProjectType.COMPLETE_TIME_CHANGE.getValue().equals(projectType)) { - List espIdList = processEsInitChanges.stream().map(ProcessEsInitChange::getEspId).collect(Collectors.toList()); - // 未开始的企标计划不需要强制撤回 - espService.listByIds(espIdList).forEach(esp -> { - if (esp.getProjectStatus().equals(ESPProjectStatus.NOT_STARTED.getValue())) { - espIdList.remove(esp.getId()); - } - }); - if (espIdList.isEmpty()) { - return; - } - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.in(ProcessEsRevision::getEspId, espIdList); - lambdaQueryWrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue()); - List enactList = revisionService.list(lambdaQueryWrapper); - if (enactList == null || enactList.isEmpty()) { - return; - } - List revisionProcessInstanceIdList = enactList.stream().map(ProcessEsRevision::getProcessInstanceId) - .collect(Collectors.toList()); - // 根据流程主表筛选出未完成的流程 - LambdaQueryWrapper paWrapper = new LambdaQueryWrapper<>(); - paWrapper.in(ProcessAll::getProcessInstanceId, revisionProcessInstanceIdList); - paWrapper.eq(ProcessAll::getPrcStatus, ProcessStatusEnum.INCOMPLETE.getValue()); - List list = processAllService.list(paWrapper); - Map validProcessAllMap = list.stream() - .collect(Collectors.toMap(ProcessAll::getProcessInstanceId, e -> e)); - - // 根据流程表 - for (ProcessEsRevision esRevision : enactList) { - if (!validProcessAllMap.containsKey(esRevision.getProcessInstanceId())) { - continue; - } - processAllService.forcedWithdrawal(esRevision.getProcessInstanceId()); - processAllService.updateDraftStatusByProjectId(esRevision.getId()); - } - } + // 如果是变更流程且不是完成时间变更,则需要撤回制修订流程 + this.judgeForcedWithdrawal(projectType, processEsInitChanges); // 将Id设为企标计划的Id for (ProcessEsInitChange processEsInitChange : processEsInitChanges) { @@ -199,6 +164,52 @@ public class ProcessESInitChangeEndListener implements ExecutionListener { log.info("数据存入企标计划数据库"); } + /** + * 如果是变更流程且不是完成时间变更,则需要撤回制修订流程 + * @param projectType 变更类型 + * @param processEsInitChanges 流程业务数据 + */ + public void judgeForcedWithdrawal(String projectType, List processEsInitChanges) { + // 如果是变更流程且不是完成时间变更,则需要撤回制修订流程 + if (!ESPProjectType.COMPLETE_TIME_CHANGE.getValue().equals(projectType)) { + List espIdList = processEsInitChanges.stream().map(ProcessEsInitChange::getEspId).collect(Collectors.toList()); + // 未开始的企标计划不需要强制撤回 + espService.listByIds(espIdList).forEach(esp -> { + if (esp.getProjectStatus().equals(ESPProjectStatus.NOT_STARTED.getValue())) { + espIdList.remove(esp.getId()); + } + }); + if (espIdList.isEmpty()) { + return; + } + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(ProcessEsRevision::getEspId, espIdList); + lambdaQueryWrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue()); + List enactList = revisionService.list(lambdaQueryWrapper); + if (enactList == null || enactList.isEmpty()) { + return; + } + List revisionProcessInstanceIdList = enactList.stream().map(ProcessEsRevision::getProcessInstanceId) + .collect(Collectors.toList()); + // 根据流程主表筛选出未完成的流程 + LambdaQueryWrapper paWrapper = new LambdaQueryWrapper<>(); + paWrapper.in(ProcessAll::getProcessInstanceId, revisionProcessInstanceIdList); + paWrapper.eq(ProcessAll::getPrcStatus, ProcessStatusEnum.INCOMPLETE.getValue()); + List list = processAllService.list(paWrapper); + Map validProcessAllMap = list.stream() + .collect(Collectors.toMap(ProcessAll::getProcessInstanceId, e -> e)); + + // 根据流程表 + for (ProcessEsRevision esRevision : enactList) { + if (!validProcessAllMap.containsKey(esRevision.getProcessInstanceId())) { + continue; + } + processAllService.forcedWithdrawal(esRevision.getProcessInstanceId()); + processAllService.updateDraftStatusByProjectId(esRevision.getId()); + } + } + } + public ESRevisionDataVO getRevisionDataVO(EnterpriseStandardPlan esp) { ESRevisionDataVO revisionDataVO = new ESRevisionDataVO(); ProcessEsRevision revision = new ProcessEsRevision(); @@ -206,4 +217,15 @@ public class ProcessESInitChangeEndListener implements ExecutionListener { revisionDataVO.setData(revision); return revisionDataVO; } + + + /** + * 立项变更流程修订最后一个节点提交的时候需要判断是否已经有另外一个重复的企标编号了, 但此时需要排除掉自己 + */ + public boolean verifyEnStandardNumberInitChangeLast(String StandardNumber) { + List duplicateStandardNumbers = esUtil.verifyBatchEsNumber(Collections.singletonList(StandardNumber)); + if (duplicateStandardNumbers == null || duplicateStandardNumbers.isEmpty()) { + return true; + } else return duplicateStandardNumbers.size() == 1; + } }