fix: 81954 年度计划--修订--归档节点需要校验入库的企标编号的唯一性

This commit is contained in:
2024-02-23 13:43:30 +08:00
parent c61e9aae81
commit f9d0d0ed39
3 changed files with 110 additions and 26 deletions
@@ -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<EnterpriseStandardPlan> 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<String> 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();
@@ -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<EnterpriseStandardPlan> 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<String> 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();
@@ -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<String> duplicateStandardNumbers = this.verifyBatchEsNumber(Collections.singletonList(StandardNumber));
return duplicateStandardNumbers.isEmpty();
}
/**
* 校验企标编号是否不重复
*
* @param StandardNumber
* @return
* @param StandardNumbers 需要校验的企标编号
* @return 返回重复的企标编号 没有重复则返回空集合
*/
public boolean verifyEnStandardNumber(String StandardNumber) {
public List<String> verifyBatchEsNumber(List<String> standardNumbers) {
// 判断是否和企标库中重复
LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
esWrapper.eq(LawsEnterpriseStandard::getStandardNumber, StandardNumber);
esWrapper.in(LawsEnterpriseStandard::getStandardNumber, standardNumbers);
esWrapper.eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getInteger());
List<String> numList = esService.list(esWrapper)
.stream().map(LawsEnterpriseStandard::getStandardNumber).collect(Collectors.toList());
// 判断是否和企标计划库中重复
LambdaQueryWrapper<EnterpriseStandardPlan> 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<ProcessEsInitChange> 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<String> duplicateStandardNumbers = new ArrayList<>();
for (String standardNumber : standardNumbers) {
if (numList.contains(standardNumber)) {
duplicateStandardNumbers.add(standardNumber);
}
}
return duplicateStandardNumbers;
}
/**
* 校验企标编号是否不重复
*
* @param plans 需要校验的企标计划
* @return 有问题的计划的原企标编号(去重过的)
*/
public List<String> verifyEsNumberByPlans(List<EnterpriseStandardPlan> plans) {
List<String> standardNumbers = plans.stream()
.map(EnterpriseStandardPlan::getNewEnStandardNo).collect(Collectors.toList());
// 判断是否和企标库中重复
LambdaQueryWrapper<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
esWrapper.in(LawsEnterpriseStandard::getStandardNumber, standardNumbers);
esWrapper.eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getInteger());
List<String> numList = esService.list(esWrapper)
.stream().map(LawsEnterpriseStandard::getStandardNumber).collect(Collectors.toList());
// 判断是否和企标计划库中重复
LambdaQueryWrapper<EnterpriseStandardPlan> 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<ProcessAll> processAllLambdaQueryWrapper = new LambdaQueryWrapper<>();
processAllLambdaQueryWrapper.eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_INIT_CHANGE.getValue());
processAllLambdaQueryWrapper.ne(ProcessAll::getPrcStatus, ProcessStatusEnum.WITHDRAWN.getValue());
List<ProcessAll> paList = processAllService.list(processAllLambdaQueryWrapper);
List<String> processInstanceIdList = new ArrayList<>();
if (paList != null && !paList.isEmpty()) {
processInstanceIdList = paList.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList());
}
LambdaQueryWrapper<ProcessEsInitChange> 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<String> 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