feat: scc流程所有审批
This commit is contained in:
+2
@@ -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";
|
||||
|
||||
/**
|
||||
* 法规工程师发起
|
||||
|
||||
+80
-3
@@ -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<Proce
|
||||
ProcessStandardComplianceCheck standardInfo = businessInfoDTO.getStandardInfo();
|
||||
standardInfo.setProcessInstanceId(processInstanceId);
|
||||
save(standardInfo);
|
||||
// 给流程中设置主表流程变量Id
|
||||
runtimeService.setVariable(processInstanceId, CHECK_ID, standardInfo.getId());
|
||||
// 子表设置流程实例Id
|
||||
List<ProcessStandardComplianceCheckDetail> detailInfoList = businessInfoDTO.getDetailInfoList();
|
||||
detailInfoList.forEach(detail -> {
|
||||
@@ -194,7 +200,18 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
switch (xmlNodeId) {
|
||||
case MAIN_CHECK_USER_DISTRIBUTE:
|
||||
case MAIN_CHECK_USER_REDISTRIBUTE:
|
||||
runtimeService.setVariable(processInstanceId, PASS, false);
|
||||
break;
|
||||
case DESIGNER_ENGINEER_EVALUATION:
|
||||
// 获取数据 将设计师字段设置为null
|
||||
ProcessInfoVO<ProcessSccVO> handleData = this.getHandleData(taskId);
|
||||
List<ProcessStandardComplianceCheckDetail> detailInfoList = handleData.getBusinessInfoDTO().getDetailInfoList();
|
||||
List<String> ids = detailInfoList.stream().map(ProcessStandardComplianceCheckDetail::getId).collect(Collectors.toList());
|
||||
LambdaUpdateWrapper<ProcessStandardComplianceCheckDetail> 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<Proce
|
||||
boolean distributeFlag = businessInfoDTO.getStandardInfo().getDistributeFlag().equals(YesOrNoEnum.YES.getValue());
|
||||
int unallocatedQuantity = 0;
|
||||
if (distributeFlag) {
|
||||
// 筛选出本次提交分发出的数据
|
||||
List<ProcessStandardComplianceCheckDetail> distributeDetailList = detailInfoList.stream()
|
||||
.filter(e -> StrUtil.isNotBlank(e.getDesignEngineer()))
|
||||
.collect(Collectors.toList());
|
||||
List<String> ids = distributeDetailList.stream().map(ProcessStandardComplianceCheckDetail::getId).collect(Collectors.toList());
|
||||
// 分发需要设置未分发数据条数
|
||||
unallocatedQuantity = (int) detailInfoList.stream().filter(e -> StrUtil.isBlank(e.getDesignEngineer())).count();
|
||||
unallocatedQuantity = distributeDetailList.size();
|
||||
// 去重找到所有设计师
|
||||
List<String> designEngineerList = detailInfoList.stream().map(ProcessStandardComplianceCheckDetail::getDesignEngineer).distinct().collect(Collectors.toList());
|
||||
List<String> designEngineerList = distributeDetailList.stream()
|
||||
.map(ProcessStandardComplianceCheckDetail::getDesignEngineer)
|
||||
.distinct()
|
||||
.flatMap(engineer -> Arrays.stream(engineer.split(",")))
|
||||
.collect(Collectors.toList());
|
||||
// 分发给多个人的需要复制数据并保存
|
||||
List<ProcessStandardComplianceCheckDetail> 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<Proce
|
||||
case DEPT_USER_DISTRIBUTE:
|
||||
case MAIN_CHECK_USER_DISTRIBUTE:
|
||||
processSccVO.setStandardInfo(scc);
|
||||
// 过滤出未分发的数据
|
||||
detailList = detailList.stream().filter(detail -> StrUtil.isBlank(detail.getProcessInstanceId())).collect(Collectors.toList());
|
||||
// TODO 根据条款号/条款标题/条款内容/车型去重并删除重复的数据
|
||||
// 定义一个比较器,用于根据指定的属性判断两个对象是否相等(即认为它们是重复的)
|
||||
Comparator<ProcessStandardComplianceCheckDetail> comparator = Comparator.comparing(ProcessStandardComplianceCheckDetail::getTermNumber)
|
||||
.thenComparing(ProcessStandardComplianceCheckDetail::getTermTitle)
|
||||
.thenComparing(ProcessStandardComplianceCheckDetail::getTermContent)
|
||||
.thenComparing(ProcessStandardComplianceCheckDetail::getModel);
|
||||
|
||||
Map<ProcessStandardComplianceCheckDetail, Long> counts = detailList.stream()
|
||||
.filter(Objects::nonNull) // 确保非空处理
|
||||
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
|
||||
// 筛选出出现超过一次(即重复的)的条目
|
||||
List<ProcessStandardComplianceCheckDetail> duplicates = counts.entrySet().stream()
|
||||
.filter(entry -> entry.getValue() > 1)
|
||||
.map(Map.Entry::getKey)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 从重复的条目中提取ID
|
||||
List<String> 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<Proce
|
||||
variables.put(ActivitiCommon.MAIN_INSTANCE_ID, mainInstanceId != null ? mainInstanceId : processInstanceId);
|
||||
variables.put(ActivitiCommon.PARENT_TASK_ID, taskId);
|
||||
String mainCheckUser = (String) delegateTask.getVariable(MAIN_CHECK_USER);
|
||||
LambdaUpdateWrapper<ProcessStandardComplianceCheckDetail> wrapper = new LambdaUpdateWrapper<>();
|
||||
switch (taskDefinitionKey) {
|
||||
//主排查人分批下发后自动任务
|
||||
case AUTO_TASK_1:
|
||||
case AUTO_TASK_3:
|
||||
List<String> designerList = (List<String>) 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<Proce
|
||||
|
||||
processInfoVO.setProcessVariables(variables);
|
||||
processInfoVO.setUserInfoMap(userInfoMap);
|
||||
processHandleService.startChildrenProcess(processInfoVO);
|
||||
String childPrcId = processHandleService.startChildrenProcess(processInfoVO);
|
||||
// 更新子表数据,将数据绑定给子流程
|
||||
wrapper.eq(ProcessStandardComplianceCheckDetail::getCheckId, checkId);
|
||||
wrapper.isNull(ProcessStandardComplianceCheckDetail::getDesignEngineer);
|
||||
wrapper.set(ProcessStandardComplianceCheckDetail::getDesignEngineer, designer);
|
||||
wrapper.set(ProcessStandardComplianceCheckDetail::getProcessInstanceId, childPrcId);
|
||||
sccDetailService.update(wrapper);
|
||||
}
|
||||
break;
|
||||
//设计工程师驳回后自动任务
|
||||
|
||||
Reference in New Issue
Block a user