diff --git a/src/main/java/neatlogic/module/process/service/IProcessStepHandlerUtil.java b/src/main/java/neatlogic/module/process/service/IProcessStepHandlerUtil.java index a35ee0cb0f0dfa8217b2c2dcc8f904fc1b82b421..ca77a49b09abac4c8180950e20681768e8bdfe0d 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 aea2b426e453644b072ebb30ee2b4e4d4079eea8..b316ae2bcd7b13fc6feb026765214f135e636456 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 6dc37941d1e9fb49ce449024114ee9ea635e0256..f343a3f51b08a9c76001c6d4e76ce201e594e3dc 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); + } } } }