From 3c0e09ed021cbd756533c9522fd1ed3cb060be22 Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Mon, 17 Jun 2024 15:31:55 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=90=8E=E7=AB=AF-?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E8=BF=87=E7=A8=8B=E4=B8=AD=E6=8C=87=E6=B4=BE?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #[1181010916507648]后端-工单过程中指派逻辑优化 http://192.168.0.96:8090/demo/rdm.html#/task-detail/939050947543040/939050947543050/1181010916507648 --- .../service/IProcessStepHandlerUtil.java | 9 ++ .../service/ProcessStepHandlerUtil.java | 128 +++++++++++++----- .../service/ProcessTaskServiceImpl.java | 83 ++++++++---- 3 files changed, 164 insertions(+), 56 deletions(-) diff --git a/src/main/java/neatlogic/module/process/service/IProcessStepHandlerUtil.java b/src/main/java/neatlogic/module/process/service/IProcessStepHandlerUtil.java index a35ee0cb0..ca77a49b0 100644 --- a/src/main/java/neatlogic/module/process/service/IProcessStepHandlerUtil.java +++ b/src/main/java/neatlogic/module/process/service/IProcessStepHandlerUtil.java @@ -125,6 +125,15 @@ public interface IProcessStepHandlerUtil { */ List getNextStepIdList(Long processTaskId, Long currentStepId, Long targetStepId); + /** + * 找出流转到哪些步骤时,需要指定targetStepId步骤的处理人 + * @param processTaskId 工单id + * @param currentStepId 当前流转步骤id + * @param conditionStepUuidList 生效条件步骤列表 + * @return + */ + List getNextStepIdList(Long processTaskId, Long currentStepId, List conditionStepUuidList); + /** * @Description: 保存步骤提醒 * @Author: linbq diff --git a/src/main/java/neatlogic/module/process/service/ProcessStepHandlerUtil.java b/src/main/java/neatlogic/module/process/service/ProcessStepHandlerUtil.java index aea2b426e..b316ae2bc 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessStepHandlerUtil.java +++ b/src/main/java/neatlogic/module/process/service/ProcessStepHandlerUtil.java @@ -391,44 +391,92 @@ public class ProcessStepHandlerUtil implements IProcessStepHandlerUtil, IProcess if (MapUtils.isEmpty(configObj)) { continue; } - JSONArray processStepUuidList = configObj.getJSONArray("processStepUuidList"); - if (CollectionUtils.isEmpty(processStepUuidList)) { - continue; - } - for (String processStepUuid : processStepUuidList.toJavaList(String.class)) { - if (!currentProcessTaskStepVo.getProcessStepUuid().equals(processStepUuid)) { - continue; + + JSONArray processStepList = configObj.getJSONArray("processStepList"); + if (CollectionUtils.isNotEmpty(processStepList)) { + for (int i = 0; i < processStepList.size(); i++) { + JSONObject processStepObj = processStepList.getJSONObject(i); + String processStepUuid = processStepObj.getString("uuid"); + if (!Objects.equals(currentProcessTaskStepVo.getProcessStepUuid(), processStepUuid)) { + continue; + } + List majorList = processTaskMapper.getProcessTaskStepUserByStepId(workerPolicyVo.getProcessTaskStepId(), ProcessUserType.MAJOR.getValue()); + if (CollectionUtils.isNotEmpty(majorList) && isOnlyOnceExecute == 1) { + break; + } + List workerList = assignWorkerMap.get(workerPolicyVo.getProcessTaskStepId()); + if (CollectionUtils.isEmpty(workerList)) { + Integer isRequired = configObj.getInteger("isRequired"); + if (!Objects.equals(isRequired, 1)) { + break; + } + List nextStepUuidList = new ArrayList<>(); + JSONArray nextStepUuidArray = processStepObj.getJSONArray("condition"); + if (CollectionUtils.isNotEmpty(nextStepUuidArray)) { + nextStepUuidList = nextStepUuidArray.toJavaList(String.class); + } + List nextStepIdList = getNextStepIdList(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId(), nextStepUuidList); + if (CollectionUtils.isEmpty(nextStepIdList)) { + break; + } + if (nextStepId != null && !nextStepIdList.contains(nextStepId)) { + break; + } + ProcessTaskStepVo assignableWorkerStep = processTaskMapper.getProcessTaskStepBaseInfoById(workerPolicyVo.getProcessTaskStepId()); + throw new ProcessTaskMustBeAssignWorkerException(assignableWorkerStep.getName()); + } + ProcessTaskAssignWorkerVo assignWorkerVo = new ProcessTaskAssignWorkerVo(); + assignWorkerVo.setProcessTaskId(workerPolicyVo.getProcessTaskId()); + assignWorkerVo.setProcessTaskStepId(workerPolicyVo.getProcessTaskStepId()); + assignWorkerVo.setFromProcessTaskStepId(currentProcessTaskStepVo.getId()); + assignWorkerVo.setFromProcessStepUuid(currentProcessTaskStepVo.getProcessStepUuid()); + processTaskMapper.deleteProcessTaskAssignWorker(assignWorkerVo); + for (String worker : workerList) { + assignWorkerVo.setType(GroupSearch.getPrefix(worker)); + assignWorkerVo.setUuid(GroupSearch.removePrefix(worker)); + processTaskMapper.insertProcessTaskAssignWorker(assignWorkerVo); + } } - List majorList = processTaskMapper.getProcessTaskStepUserByStepId(workerPolicyVo.getProcessTaskStepId(), ProcessUserType.MAJOR.getValue()); - if (CollectionUtils.isNotEmpty(majorList) && isOnlyOnceExecute == 1) { - break; + } else { + JSONArray processStepUuidList = configObj.getJSONArray("processStepUuidList"); + if (CollectionUtils.isEmpty(processStepUuidList)) { + continue; } - List workerList = assignWorkerMap.get(workerPolicyVo.getProcessTaskStepId()); - if (CollectionUtils.isEmpty(workerList)) { - Integer isRequired = configObj.getInteger("isRequired"); - if (!Objects.equals(isRequired, 1)) { - break; + for (String processStepUuid : processStepUuidList.toJavaList(String.class)) { + if (!currentProcessTaskStepVo.getProcessStepUuid().equals(processStepUuid)) { + continue; } - List nextStepIdList = getNextStepIdList(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId(), workerPolicyVo.getProcessTaskStepId()); - if (CollectionUtils.isEmpty(nextStepIdList)) { + List majorList = processTaskMapper.getProcessTaskStepUserByStepId(workerPolicyVo.getProcessTaskStepId(), ProcessUserType.MAJOR.getValue()); + if (CollectionUtils.isNotEmpty(majorList) && isOnlyOnceExecute == 1) { break; } - if (nextStepId != null && !nextStepIdList.contains(nextStepId)) { - break; + List workerList = assignWorkerMap.get(workerPolicyVo.getProcessTaskStepId()); + if (CollectionUtils.isEmpty(workerList)) { + Integer isRequired = configObj.getInteger("isRequired"); + if (!Objects.equals(isRequired, 1)) { + break; + } + List nextStepIdList = getNextStepIdList(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId(), workerPolicyVo.getProcessTaskStepId()); + if (CollectionUtils.isEmpty(nextStepIdList)) { + break; + } + if (nextStepId != null && !nextStepIdList.contains(nextStepId)) { + break; + } + ProcessTaskStepVo assignableWorkerStep = processTaskMapper.getProcessTaskStepBaseInfoById(workerPolicyVo.getProcessTaskStepId()); + throw new ProcessTaskMustBeAssignWorkerException(assignableWorkerStep.getName()); + } + ProcessTaskAssignWorkerVo assignWorkerVo = new ProcessTaskAssignWorkerVo(); + assignWorkerVo.setProcessTaskId(workerPolicyVo.getProcessTaskId()); + assignWorkerVo.setProcessTaskStepId(workerPolicyVo.getProcessTaskStepId()); + assignWorkerVo.setFromProcessTaskStepId(currentProcessTaskStepVo.getId()); + assignWorkerVo.setFromProcessStepUuid(currentProcessTaskStepVo.getProcessStepUuid()); + processTaskMapper.deleteProcessTaskAssignWorker(assignWorkerVo); + for (String worker : workerList) { + assignWorkerVo.setType(GroupSearch.getPrefix(worker)); + assignWorkerVo.setUuid(GroupSearch.removePrefix(worker)); + processTaskMapper.insertProcessTaskAssignWorker(assignWorkerVo); } - ProcessTaskStepVo assignableWorkerStep = processTaskMapper.getProcessTaskStepBaseInfoById(workerPolicyVo.getProcessTaskStepId()); - throw new ProcessTaskMustBeAssignWorkerException(assignableWorkerStep.getName()); - } - ProcessTaskAssignWorkerVo assignWorkerVo = new ProcessTaskAssignWorkerVo(); - assignWorkerVo.setProcessTaskId(workerPolicyVo.getProcessTaskId()); - assignWorkerVo.setProcessTaskStepId(workerPolicyVo.getProcessTaskStepId()); - assignWorkerVo.setFromProcessTaskStepId(currentProcessTaskStepVo.getId()); - assignWorkerVo.setFromProcessStepUuid(currentProcessTaskStepVo.getProcessStepUuid()); - processTaskMapper.deleteProcessTaskAssignWorker(assignWorkerVo); - for (String worker : workerList) { - assignWorkerVo.setType(GroupSearch.getPrefix(worker)); - assignWorkerVo.setUuid(GroupSearch.removePrefix(worker)); - processTaskMapper.insertProcessTaskAssignWorker(assignWorkerVo); } } } @@ -485,6 +533,22 @@ public class ProcessStepHandlerUtil implements IProcessStepHandlerUtil, IProcess return resultList; } + @Override + public List getNextStepIdList(Long processTaskId, Long currentStepId, List conditionStepUuidList) { + List resultList = new ArrayList<>(); + List processTaskStepRelList = processTaskMapper.getProcessTaskStepRelByProcessTaskId(processTaskId); + for (ProcessTaskStepRelVo relVo : processTaskStepRelList) { + if (Objects.equals(relVo.getType(), ProcessFlowDirection.FORWARD.getValue())) { + Long fromId = relVo.getFromProcessTaskStepId(); + if (Objects.equals(fromId, currentStepId) + && (CollectionUtils.isEmpty(conditionStepUuidList) || conditionStepUuidList.contains(relVo.getToProcessStepUuid()))) { + resultList.add(relVo.getToProcessTaskStepId()); + } + } + } + return resultList; + } + /** * @Description: 保存步骤提醒 * @Author: linbq diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java index 6dc37941d..f343a3f51 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java +++ b/src/main/java/neatlogic/module/process/service/ProcessTaskServiceImpl.java @@ -675,32 +675,67 @@ public class ProcessTaskServiceImpl implements ProcessTaskService, IProcessTaskC if (MapUtils.isEmpty(configObj)) { continue; } - JSONArray processStepUuidList = configObj.getJSONArray("processStepUuidList"); - if (CollectionUtils.isEmpty(processStepUuidList)) { - continue; - } - for (String stepUuid : processStepUuidList.toJavaList(String.class)) { - if (!currentProcessTaskStepVo.getProcessStepUuid().equals(stepUuid)) { - continue; - } - List majorList = processTaskMapper.getProcessTaskStepUserByStepId(workerPolicyVo.getProcessTaskStepId(), ProcessUserType.MAJOR.getValue()); - if (CollectionUtils.isNotEmpty(majorList) && isOnlyOnceExecute == 1) { - break; + JSONArray processStepList = configObj.getJSONArray("processStepList"); + if (CollectionUtils.isNotEmpty(processStepList)) { + for (int i = 0; i < processStepList.size(); i++) { + JSONObject processStepObj = processStepList.getJSONObject(i); + String processStepUuid = processStepObj.getString("uuid"); + if (!Objects.equals(currentProcessTaskStepVo.getProcessStepUuid(), processStepUuid)) { + continue; + } + List majorList = processTaskMapper.getProcessTaskStepUserByStepId(workerPolicyVo.getProcessTaskStepId(), ProcessUserType.MAJOR.getValue()); + if (CollectionUtils.isNotEmpty(majorList) && isOnlyOnceExecute == 1) { + break; + } + List nextStepUuidList = new ArrayList<>(); + JSONArray nextStepUuidArray = processStepObj.getJSONArray("condition"); + if (CollectionUtils.isNotEmpty(nextStepUuidArray)) { + nextStepUuidList = nextStepUuidArray.toJavaList(String.class); + } + List nextStepIdList = processStepHandlerUtil.getNextStepIdList(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId(), nextStepUuidList); + if (CollectionUtils.isEmpty(nextStepIdList)) { + break; + } + ProcessTaskStepVo processTaskStepVo = processTaskMapper.getProcessTaskStepBaseInfoById(workerPolicyVo.getProcessTaskStepId()); + AssignableWorkerStepVo assignableWorkerStepVo = new AssignableWorkerStepVo(); + assignableWorkerStepVo.setId(processTaskStepVo.getId()); + assignableWorkerStepVo.setProcessStepUuid(processTaskStepVo.getProcessStepUuid()); + assignableWorkerStepVo.setName(processTaskStepVo.getName()); + assignableWorkerStepVo.setIsRequired(configObj.getInteger("isRequired")); + assignableWorkerStepVo.setGroupList(configObj.getJSONArray("groupList")); + assignableWorkerStepVo.setRangeList(configObj.getJSONArray("rangeList")); + for (Long nextStepId : nextStepIdList) { + assignableWorkerStepMap.computeIfAbsent(nextStepId, key -> new ArrayList<>()).add(assignableWorkerStepVo); + } } - List nextStepIdList = processStepHandlerUtil.getNextStepIdList(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId(), workerPolicyVo.getProcessTaskStepId()); - if (CollectionUtils.isEmpty(nextStepIdList)) { - break; + } else { + JSONArray processStepUuidList = configObj.getJSONArray("processStepUuidList"); + if (CollectionUtils.isEmpty(processStepUuidList)) { + continue; } - ProcessTaskStepVo processTaskStepVo = processTaskMapper.getProcessTaskStepBaseInfoById(workerPolicyVo.getProcessTaskStepId()); - AssignableWorkerStepVo assignableWorkerStepVo = new AssignableWorkerStepVo(); - assignableWorkerStepVo.setId(processTaskStepVo.getId()); - assignableWorkerStepVo.setProcessStepUuid(processTaskStepVo.getProcessStepUuid()); - assignableWorkerStepVo.setName(processTaskStepVo.getName()); - assignableWorkerStepVo.setIsRequired(configObj.getInteger("isRequired")); - assignableWorkerStepVo.setGroupList(configObj.getJSONArray("groupList")); - assignableWorkerStepVo.setRangeList(configObj.getJSONArray("rangeList")); - for (Long nextStepId : nextStepIdList) { - assignableWorkerStepMap.computeIfAbsent(nextStepId, key -> new ArrayList<>()).add(assignableWorkerStepVo); + for (String stepUuid : processStepUuidList.toJavaList(String.class)) { + if (!currentProcessTaskStepVo.getProcessStepUuid().equals(stepUuid)) { + continue; + } + List majorList = processTaskMapper.getProcessTaskStepUserByStepId(workerPolicyVo.getProcessTaskStepId(), ProcessUserType.MAJOR.getValue()); + if (CollectionUtils.isNotEmpty(majorList) && isOnlyOnceExecute == 1) { + break; + } + List nextStepIdList = processStepHandlerUtil.getNextStepIdList(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId(), workerPolicyVo.getProcessTaskStepId()); + if (CollectionUtils.isEmpty(nextStepIdList)) { + break; + } + ProcessTaskStepVo processTaskStepVo = processTaskMapper.getProcessTaskStepBaseInfoById(workerPolicyVo.getProcessTaskStepId()); + AssignableWorkerStepVo assignableWorkerStepVo = new AssignableWorkerStepVo(); + assignableWorkerStepVo.setId(processTaskStepVo.getId()); + assignableWorkerStepVo.setProcessStepUuid(processTaskStepVo.getProcessStepUuid()); + assignableWorkerStepVo.setName(processTaskStepVo.getName()); + assignableWorkerStepVo.setIsRequired(configObj.getInteger("isRequired")); + assignableWorkerStepVo.setGroupList(configObj.getJSONArray("groupList")); + assignableWorkerStepVo.setRangeList(configObj.getJSONArray("rangeList")); + for (Long nextStepId : nextStepIdList) { + assignableWorkerStepMap.computeIfAbsent(nextStepId, key -> new ArrayList<>()).add(assignableWorkerStepVo); + } } } } -- Gitee