From 11557c27b8d250733476f91ed1aff2899da99141 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Mon, 15 Jul 2024 15:17:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20scc=E6=B5=81=E7=A8=8B=E6=89=80=E6=9C=89?= =?UTF-8?q?=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ocessStandardComplianceCheckConstants.java | 2 + ...essStandardComplianceCheckServiceImpl.java | 83 ++++++++++++++++++- 2 files changed, 82 insertions(+), 3 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/common/ProcessStandardComplianceCheckConstants.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/common/ProcessStandardComplianceCheckConstants.java index 22eb5849..3e137df1 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/common/ProcessStandardComplianceCheckConstants.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/common/ProcessStandardComplianceCheckConstants.java @@ -24,6 +24,8 @@ public class ProcessStandardComplianceCheckConstants { public static final String SENIOR_MANAGER = "seniorManager"; /** 未分配数量 */ public static final String UNALLOCATED_QUANTITY = "unallocatedQuantity"; + /** 主表Id */ + public static final String CHECK_ID = "checkId"; /** * 法规工程师发起 diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/service/impl/ProcessStandardComplianceCheckServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/service/impl/ProcessStandardComplianceCheckServiceImpl.java index a02f7879..68ccfedd 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/service/impl/ProcessStandardComplianceCheckServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/service/impl/ProcessStandardComplianceCheckServiceImpl.java @@ -2,6 +2,7 @@ package com.jero.modules.activiti.process.standardComplianceCheck.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.constant.enums.YesOrNoEnum; @@ -40,6 +41,7 @@ import org.activiti.engine.TaskService; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; +import org.apache.commons.beanutils.BeanUtils; import org.apache.http.entity.ContentType; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ImportParams; @@ -50,7 +52,9 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import static com.jero.modules.activiti.common.ActivitiCommon.DISTRIBUTE; @@ -156,6 +160,8 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl detailInfoList = businessInfoDTO.getDetailInfoList(); detailInfoList.forEach(detail -> { @@ -194,7 +200,18 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl handleData = this.getHandleData(taskId); + List detailInfoList = handleData.getBusinessInfoDTO().getDetailInfoList(); + List ids = detailInfoList.stream().map(ProcessStandardComplianceCheckDetail::getId).collect(Collectors.toList()); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(ProcessStandardComplianceCheckDetail::getId, ids); + updateWrapper.set(ProcessStandardComplianceCheckDetail::getDesignEngineer, null); + updateWrapper.set(ProcessStandardComplianceCheckDetail::getProcessInstanceId, null); + sccDetailService.update(updateWrapper); runtimeService.setVariable(processInstanceId, PASS, false); break; case MAIN_CHECK_USER_APPROVAL: @@ -246,10 +263,38 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl distributeDetailList = detailInfoList.stream() + .filter(e -> StrUtil.isNotBlank(e.getDesignEngineer())) + .collect(Collectors.toList()); + List ids = distributeDetailList.stream().map(ProcessStandardComplianceCheckDetail::getId).collect(Collectors.toList()); // 分发需要设置未分发数据条数 - unallocatedQuantity = (int) detailInfoList.stream().filter(e -> StrUtil.isBlank(e.getDesignEngineer())).count(); + unallocatedQuantity = distributeDetailList.size(); // 去重找到所有设计师 - List designEngineerList = detailInfoList.stream().map(ProcessStandardComplianceCheckDetail::getDesignEngineer).distinct().collect(Collectors.toList()); + List designEngineerList = distributeDetailList.stream() + .map(ProcessStandardComplianceCheckDetail::getDesignEngineer) + .distinct() + .flatMap(engineer -> Arrays.stream(engineer.split(","))) + .collect(Collectors.toList()); + // 分发给多个人的需要复制数据并保存 + List needAddDetailInfoList = new ArrayList<>(); + distributeDetailList.forEach(detail -> { + String[] engineers = detail.getDesignEngineer().split(","); + for (String engineer : engineers) { + ProcessStandardComplianceCheckDetail newDetail = new ProcessStandardComplianceCheckDetail(); + try { + BeanUtils.copyProperties(detail, newDetail); + } catch (IllegalAccessException | InvocationTargetException e) { + log.error("BeanUtils.copyProperties error", e); + throw new JeroBootException(e); + } + newDetail.setDesignEngineer(engineer); + needAddDetailInfoList.add(newDetail); + } + }); + // 先删后增 + sccDetailService.removeByIds(ids); + sccDetailService.saveBatch(needAddDetailInfoList); runtimeService.setVariable(processInstanceId, DESIGNER_LIST, designEngineerList); } else { // 不分发直接设置后续审批节点的人员变量 @@ -309,6 +354,30 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl StrUtil.isBlank(detail.getProcessInstanceId())).collect(Collectors.toList()); + // TODO 根据条款号/条款标题/条款内容/车型去重并删除重复的数据 + // 定义一个比较器,用于根据指定的属性判断两个对象是否相等(即认为它们是重复的) + Comparator comparator = Comparator.comparing(ProcessStandardComplianceCheckDetail::getTermNumber) + .thenComparing(ProcessStandardComplianceCheckDetail::getTermTitle) + .thenComparing(ProcessStandardComplianceCheckDetail::getTermContent) + .thenComparing(ProcessStandardComplianceCheckDetail::getModel); + + Map counts = detailList.stream() + .filter(Objects::nonNull) // 确保非空处理 + .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); + // 筛选出出现超过一次(即重复的)的条目 + List duplicates = counts.entrySet().stream() + .filter(entry -> entry.getValue() > 1) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + + // 从重复的条目中提取ID + List duplicateIds = duplicates.stream() + .map(ProcessStandardComplianceCheckDetail::getId) + .distinct() + .collect(Collectors.toList()); + processSccVO.setDetailInfoList(detailList); break; case MAIN_CHECK_USER_COLLECT: @@ -336,11 +405,13 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl wrapper = new LambdaUpdateWrapper<>(); switch (taskDefinitionKey) { //主排查人分批下发后自动任务 case AUTO_TASK_1: case AUTO_TASK_3: List designerList = (List) delegateTask.getVariable(DESIGNER_LIST); + String checkId = (String) delegateTask.getVariable(CHECK_ID); for (String designer : designerList) { userInfoMap.put(DESIGNER, designer); userInfoMap.put(MAIN_CHECK_USER, mainCheckUser); @@ -352,7 +423,13 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl