From f9d0d0ed3905798021ed2b669ec7fadc0ad30c4f Mon Sep 17 00:00:00 2001 From: caihaohan Date: Fri, 23 Feb 2024 13:43:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=2081954=20=E5=B9=B4=E5=BA=A6=E8=AE=A1?= =?UTF-8?q?=E5=88=92--=E4=BF=AE=E8=AE=A2--=E5=BD=92=E6=A1=A3=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E9=9C=80=E8=A6=81=E6=A0=A1=E9=AA=8C=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E7=9A=84=E4=BC=81=E6=A0=87=E7=BC=96=E5=8F=B7=E7=9A=84=E5=94=AF?= =?UTF-8?q?=E4=B8=80=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProcessESAnnualInitEndListener.java | 36 ++++++--- .../ProcessESAnnualReportEndListener.java | 25 ++++--- .../util/EnterpriseStandardUtil.java | 75 +++++++++++++++++-- 3 files changed, 110 insertions(+), 26 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/listener/ProcessESAnnualInitEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/listener/ProcessESAnnualInitEndListener.java index c5a4c0d6..c00f4dab 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/listener/ProcessESAnnualInitEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/listener/ProcessESAnnualInitEndListener.java @@ -1,27 +1,33 @@ package com.jero.modules.activiti.process.esAnnualInit.listener; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.common.exception.JeroBootException; +import com.jero.modules.activiti.entity.ProcessAll; +import com.jero.modules.activiti.enums.ProcessStatusEnum; +import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit; import com.jero.modules.activiti.process.esAnnualInit.service.impl.ProcessEsAnnualInitServiceImpl; +import com.jero.modules.activiti.process.esInitChange.entity.ProcessEsInitChange; import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPRevisionType; import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision; import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO; import com.jero.modules.activiti.process.esRevision.service.EsRevisionService; +import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.laws.common.constant.FieldCommon; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan; import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService; import com.jero.modules.laws.enterprise.util.BeanCopyUtils; import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil; +import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.delegate.DelegateExecution; import org.activiti.engine.delegate.ExecutionListener; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * @author: Mzaxd @@ -43,6 +49,9 @@ public class ProcessESAnnualInitEndListener implements ExecutionListener { @Resource private EnterpriseStandardUtil esUtil; + @Resource + private ProcessAllService processAllService; + /** * 流程结束之后需要把数据存入企标计划数据库 * @@ -77,6 +86,20 @@ public class ProcessESAnnualInitEndListener implements ExecutionListener { // 获取当前年份 Calendar date = Calendar.getInstance(); String curYearNumber = String.valueOf(date.get(Calendar.YEAR)); + List needValidList = new ArrayList<>(); + for (EnterpriseStandardPlan esp : enterpriseStandardPlans) { + // 修订只改年代号 + if (esp.getApplicationCategory().equals(ESPRevisionType.MODIFY.getValue())) { + newStandardNumber = esUtil.changeStandardNumberYearNumber(esp.getOriginEnStandardNo(), curYearNumber); + esp.setNewEnStandardNo(newStandardNumber); + needValidList.add(esp); + } + } + List duplicateStandardNumbers = esUtil.verifyEsNumberByPlans(needValidList); + if (duplicateStandardNumbers != null && !duplicateStandardNumbers.isEmpty()) { + throw new JeroBootException("原企标编号" + String.join(",", duplicateStandardNumbers) + "修订后,与已存在的企标编号重复,请删除后重新提交"); + } + // 判断修订的新标准号是否有效 for (EnterpriseStandardPlan esp : enterpriseStandardPlans) { // 制定生成新企标编号 if (esp.getApplicationCategory().equals(ESPRevisionType.ENACT.getValue())) { @@ -87,11 +110,6 @@ public class ProcessESAnnualInitEndListener implements ExecutionListener { newStandardNumber = esUtil.generateStandardNumber(map); esp.setNewEnStandardNo(newStandardNumber); } - // 修订只改年代号 - if (esp.getApplicationCategory().equals(ESPRevisionType.MODIFY.getValue())) { - newStandardNumber = esUtil.changeStandardNumberYearNumber(esp.getOriginEnStandardNo(), curYearNumber); - esp.setNewEnStandardNo(newStandardNumber); - } espService.save(esp); log.info("数据存入企标计划数据库"); ESRevisionDataVO revisionDataVO = new ESRevisionDataVO(); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/listener/ProcessESAnnualReportEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/listener/ProcessESAnnualReportEndListener.java index e6a3741a..c4e4f80c 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/listener/ProcessESAnnualReportEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/listener/ProcessESAnnualReportEndListener.java @@ -1,6 +1,7 @@ package com.jero.modules.activiti.process.esAnnualReport.listener; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.exception.JeroBootException; import com.jero.modules.activiti.process.esAnnualReport.entity.ProcessEsAnnualReport; import com.jero.modules.activiti.process.esAnnualReport.service.impl.ProcessEsAnnualReportServiceImpl; import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPRevisionType; @@ -18,10 +19,7 @@ import org.activiti.engine.delegate.ExecutionListener; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author: Mzaxd @@ -73,6 +71,20 @@ public class ProcessESAnnualReportEndListener implements ExecutionListener { // 获取当前年份 Calendar date = Calendar.getInstance(); String curYearNumber = String.valueOf(date.get(Calendar.YEAR)); + List needValidList = new ArrayList<>(); + for (EnterpriseStandardPlan esp : enterpriseStandardPlans) { + // 修订只改年代号 + if (esp.getApplicationCategory().equals(ESPRevisionType.MODIFY.getValue())) { + newStandardNumber = esUtil.changeStandardNumberYearNumber(esp.getOriginEnStandardNo(), curYearNumber); + esp.setNewEnStandardNo(newStandardNumber); + needValidList.add(esp); + } + } + List duplicateStandardNumbers = esUtil.verifyEsNumberByPlans(needValidList); + if (duplicateStandardNumbers != null && !duplicateStandardNumbers.isEmpty()) { + throw new JeroBootException("原企标编号" + String.join(",", duplicateStandardNumbers) + "修订后,与已存在的企标编号重复,请删除后重新提交"); + } + // 判断修订的新标准号是否有效 for (EnterpriseStandardPlan esp : enterpriseStandardPlans) { // 制定生成新企标编号 if (esp.getApplicationCategory().equals(ESPRevisionType.ENACT.getValue())) { @@ -83,11 +95,6 @@ public class ProcessESAnnualReportEndListener implements ExecutionListener { newStandardNumber = esUtil.generateStandardNumber(map); esp.setNewEnStandardNo(newStandardNumber); } - // 修订只改年代号 - if (esp.getApplicationCategory().equals(ESPRevisionType.MODIFY.getValue())) { - newStandardNumber = esUtil.changeStandardNumberYearNumber(esp.getOriginEnStandardNo(), curYearNumber); - esp.setNewEnStandardNo(newStandardNumber); - } espService.save(esp); log.info("数据存入企标计划数据库"); ESRevisionDataVO revisionDataVO = new ESRevisionDataVO(); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/util/EnterpriseStandardUtil.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/util/EnterpriseStandardUtil.java index 2292c5c2..7ad62390 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/util/EnterpriseStandardUtil.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/util/EnterpriseStandardUtil.java @@ -10,6 +10,7 @@ import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.enums.ProcessStatusEnum; import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.process.esInitChange.entity.ProcessEsInitChange; +import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPRevisionType; import com.jero.modules.activiti.process.esInitChange.service.ProcessEsInitChangeService; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.laws.common.constant.FieldCommon; @@ -118,7 +119,7 @@ public class EnterpriseStandardUtil { * 改变企标编号的年代号 * * @param oldStandardNumber 老企标编号 - * @param newYearNumber 新年代号 + * @param newYearNumber 新年代号 * @return 新企标编号 */ public String changeStandardNumberYearNumber(String oldStandardNumber, String newYearNumber) { @@ -255,22 +256,27 @@ public class EnterpriseStandardUtil { } } + public boolean verifyEnStandardNumber(String StandardNumber) { + List duplicateStandardNumbers = this.verifyBatchEsNumber(Collections.singletonList(StandardNumber)); + return duplicateStandardNumbers.isEmpty(); + } + /** * 校验企标编号是否不重复 * - * @param StandardNumber - * @return + * @param StandardNumbers 需要校验的企标编号 + * @return 返回重复的企标编号 没有重复则返回空集合 */ - public boolean verifyEnStandardNumber(String StandardNumber) { + public List verifyBatchEsNumber(List standardNumbers) { // 判断是否和企标库中重复 LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); - esWrapper.eq(LawsEnterpriseStandard::getStandardNumber, StandardNumber); + esWrapper.in(LawsEnterpriseStandard::getStandardNumber, standardNumbers); esWrapper.eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getInteger()); List numList = esService.list(esWrapper) .stream().map(LawsEnterpriseStandard::getStandardNumber).collect(Collectors.toList()); // 判断是否和企标计划库中重复 LambdaQueryWrapper planWrapper = new LambdaQueryWrapper<>(); - planWrapper.eq(EnterpriseStandardPlan::getNewEnStandardNo, StandardNumber); + planWrapper.in(EnterpriseStandardPlan::getNewEnStandardNo, standardNumbers); planWrapper.eq(EnterpriseStandardPlan::getDelFlag, YesOrNoEnum.NO.getInteger()); numList.addAll(espService.list(planWrapper) .stream().map(EnterpriseStandardPlan::getNewEnStandardNo).collect(Collectors.toList())); @@ -285,12 +291,65 @@ public class EnterpriseStandardUtil { processInstanceIdList = paList.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList()); } LambdaQueryWrapper initChangeWrapper = new LambdaQueryWrapper<>(); - initChangeWrapper.eq(ProcessEsInitChange::getNewEnStandardNo, StandardNumber); + initChangeWrapper.in(ProcessEsInitChange::getNewEnStandardNo, standardNumbers); initChangeWrapper.eq(ProcessEsInitChange::getDelFlag, YesOrNoEnum.NO.getValue()); initChangeWrapper.in(ProcessEsInitChange::getProcessInstanceId, processInstanceIdList); numList.addAll(initChangeService.list(initChangeWrapper) .stream().map(ProcessEsInitChange::getNewEnStandardNo).collect(Collectors.toList())); - return !numList.contains(StandardNumber); + List duplicateStandardNumbers = new ArrayList<>(); + for (String standardNumber : standardNumbers) { + if (numList.contains(standardNumber)) { + duplicateStandardNumbers.add(standardNumber); + } + } + return duplicateStandardNumbers; + } + + /** + * 校验企标编号是否不重复 + * + * @param plans 需要校验的企标计划 + * @return 有问题的计划的原企标编号(去重过的) + */ + public List verifyEsNumberByPlans(List plans) { + List standardNumbers = plans.stream() + .map(EnterpriseStandardPlan::getNewEnStandardNo).collect(Collectors.toList()); + // 判断是否和企标库中重复 + LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); + esWrapper.in(LawsEnterpriseStandard::getStandardNumber, standardNumbers); + esWrapper.eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getInteger()); + List numList = esService.list(esWrapper) + .stream().map(LawsEnterpriseStandard::getStandardNumber).collect(Collectors.toList()); + // 判断是否和企标计划库中重复 + LambdaQueryWrapper planWrapper = new LambdaQueryWrapper<>(); + planWrapper.in(EnterpriseStandardPlan::getNewEnStandardNo, standardNumbers); + planWrapper.eq(EnterpriseStandardPlan::getDelFlag, YesOrNoEnum.NO.getInteger()); + numList.addAll(espService.list(planWrapper) + .stream().map(EnterpriseStandardPlan::getNewEnStandardNo).collect(Collectors.toList())); + // 判断是否和立项流程中重复 + // 已经撤回的立项流程不需要判断重复 + LambdaQueryWrapper processAllLambdaQueryWrapper = new LambdaQueryWrapper<>(); + processAllLambdaQueryWrapper.eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_INIT_CHANGE.getValue()); + processAllLambdaQueryWrapper.ne(ProcessAll::getPrcStatus, ProcessStatusEnum.WITHDRAWN.getValue()); + List paList = processAllService.list(processAllLambdaQueryWrapper); + List processInstanceIdList = new ArrayList<>(); + if (paList != null && !paList.isEmpty()) { + processInstanceIdList = paList.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList()); + } + LambdaQueryWrapper initChangeWrapper = new LambdaQueryWrapper<>(); + initChangeWrapper.in(ProcessEsInitChange::getNewEnStandardNo, standardNumbers); + initChangeWrapper.eq(ProcessEsInitChange::getDelFlag, YesOrNoEnum.NO.getValue()); + initChangeWrapper.in(ProcessEsInitChange::getProcessInstanceId, processInstanceIdList); + numList.addAll(initChangeService.list(initChangeWrapper) + .stream().map(ProcessEsInitChange::getNewEnStandardNo).collect(Collectors.toList())); + List duplicateStandardNumbers = new ArrayList<>(); + for (EnterpriseStandardPlan esp : plans) { + if (numList.contains(esp.getNewEnStandardNo())) { + duplicateStandardNumbers.add(esp.getOriginEnStandardNo()); + } + } + duplicateStandardNumbers = duplicateStandardNumbers.stream().distinct().collect(Collectors.toList()); + return duplicateStandardNumbers; } // 判断是否是空Excel