From ada2dc30cf45aa6655f2cb5d5e5f3674ca8f90af Mon Sep 17 00:00:00 2001 From: dimengzhe Date: Sat, 8 Feb 2025 11:26:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flowable/biz/flow3/Flow3Service.java | 193 +++++++----------- 1 file changed, 78 insertions(+), 115 deletions(-) diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java index 7bff53303a..2a6ef70e19 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java @@ -171,9 +171,11 @@ public class Flow3Service extends MybatisBaseService { String approver = getApproverForTask(approvers, i); // 动态获取会签候选人 taskService.claim(task2.getId(), approver); // 由会签候选人认领任务 isMultiInstanceTaskNext = true; - } - // 单一审批任务 - else if ("单一审批任务".equals(isMultiInstanceTask)) { + }else if("或签任务".equals(isMultiInstanceTask)){ + String userId = getApproverForTask(userIds, i); + taskService.claim(task2.getId(), userId); + isMultiInstanceTaskNext = true; + } else if("单一审批任务".equals(isMultiInstanceTask)) { String userSidForNextNode = getNextNodeUser(bv).getData(); taskService.claim(task2.getId(), userSidForNextNode); bv.setNextNodeUserSids(userSidForNextNode); @@ -268,7 +270,7 @@ public class Flow3Service extends MybatisBaseService { * @param bv * @return */ - public ResultBean businessStartProcessInstanceById2(BusinessVariables bv) { + /* public ResultBean businessStartProcessInstanceById2(BusinessVariables bv) { ResultBean rb = ResultBean.fireFail(); // 或签任务候选人 List userIds = Arrays.asList( @@ -403,7 +405,7 @@ public class Flow3Service extends MybatisBaseService { updateFlowFieldVo.setSid(bv.getBusinessSid()); updateFlowFieldVo.setName(processDefinition.getName()); return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); - } + }*/ /** * 查询下一环节用户是否有转办用户,若有转办用户则添加转办评论 @@ -503,36 +505,7 @@ public class Flow3Service extends MybatisBaseService { boolean isMultiInstanceTaskNext = false; String service = (String) formVariables.get("service"); String ydfOrgPath = (String) formVariables.get("ydfOrgPath"); - if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) { - if (StringUtils.isBlank(nextUserSid)) { - bv.setOrgSidPath(ydfOrgPath); - ResultBean stringResultBean = getNextNodeUserSidsOfSubmit(bv); - if (!stringResultBean.getSuccess()) { - //下一环节用户为空的情况 - nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); - adminContains = true; - } else { - nextUserSid = stringResultBean.getData(); - } - } - } else if (StringUtils.isBlank(nextUserSid)) { - if (!"会签任务".equals(isMultiInstanceTask) && !"或签任务".equals(isMultiInstanceTask)) { - //获取下一环节用户 - ResultBean stringResultBean = getNextNodeUserSidsOfSubmit(bv); - if (!stringResultBean.getSuccess()) { - //下一环节用户为空的情况 - nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); - adminContains = true; - } else { - nextUserSid = stringResultBean.getData(); - } - } - } else { - //若下一环节用户与系统管理员一致,则自动审批 - if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { - adminContains = true; - } - } + String assignee = task.getAssignee(); if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); @@ -562,7 +535,7 @@ public class Flow3Service extends MybatisBaseService { tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); for (int i = 0; i < tasks.size(); i++) { Task task2 = tasks.get(i); - isMultiInstanceTask = isMultiInstanceTask(task2); + isMultiInstanceTask = isMultiInstanceTask(task2); if ("会签任务".equals(isMultiInstanceTask)) { taskService.claim(task2.getId(), approvers.get(i)); // 由候选人认领任务 isMultiInstanceTaskNext = true; @@ -570,14 +543,33 @@ public class Flow3Service extends MybatisBaseService { taskService.claim(task2.getId(), userIds.get(i)); // 由候选人认领任务 isMultiInstanceTaskNext = true; } else { - //获取下一环节用户 - ResultBean stringResultBean = getNextNodeUserSidsOfSubmit(bv); - if (!stringResultBean.getSuccess()) { - //下一环节用户为空的情况 - nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); - adminContains = true; + if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) { + if (StringUtils.isBlank(nextUserSid)) { + bv.setOrgSidPath(ydfOrgPath); + ResultBean stringResultBean = getNextNodeUserSidsOfSubmit(bv); + if (!stringResultBean.getSuccess()) { + //下一环节用户为空的情况 + nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + adminContains = true; + } else { + nextUserSid = stringResultBean.getData(); + } + } + } else if (StringUtils.isBlank(nextUserSid)) { + //获取下一环节用户 + ResultBean stringResultBean = getNextNodeUserSidsOfSubmit(bv); + if (!stringResultBean.getSuccess()) { + //下一环节用户为空的情况 + nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + adminContains = true; + } else { + nextUserSid = stringResultBean.getData(); + } } else { - nextUserSid = stringResultBean.getData(); + //若下一环节用户与系统管理员一致,则自动审批 + if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { + adminContains = true; + } } break; } @@ -615,51 +607,29 @@ public class Flow3Service extends MybatisBaseService { for (int i = 0; i < flowElements.size(); i++) { FlowElement flowElement = flowElements.get(i); String id = flowElement.getId(); + // 如果当前环节匹配taskDefKey,并且后续环节存在 if (taskDefKey.equals(id) && i + 1 < flowElements.size()) { - //获取下下一环节 - FlowElement flowElement1 = flowElements.get(i + 1); - List sysUserVoLists2 = new ArrayList<>(); + FlowElement nextFlowElement = flowElements.get(i + 1); // 获取下一个环节 + List nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表 + + // 获取下下一个环节的用户列表(如果存在) + List nextNextUserList = new ArrayList<>(); if (i + 2 < flowElements.size()) { - //获取下下下一环节用户 - FlowElement flowElement2 = flowElements.get(i + 2); - if (flowElement2 instanceof UserTask) { - UserTask userTask = (UserTask) flowElement2; - List candidateGroups = userTask.getCandidateGroups(); - UserssQuery userssQuery = new UserssQuery(); - userssQuery.setCandidateGroups(candidateGroups); - userssQuery.setOrgSidPath(orgPath); - sysUserVoLists2 = sysUserFeign.getUsersByRoles(userssQuery).getData(); - if (sysUserVoLists2 == null) { - sysUserVoLists2 = new ArrayList<>(); - } - } + FlowElement nextNextFlowElement = flowElements.get(i + 2); // 获取下下一个环节 + nextNextUserList = getUserListFromFlowElement(nextNextFlowElement, orgPath); // 获取下下一个环节的用户列表 } - if (flowElement1 instanceof UserTask) { - UserTask userTask = (UserTask) flowElement1; - List candidateGroups = userTask.getCandidateGroups(); - List sysUserVoLists = new ArrayList<>(); - UserssQuery userssQuery = new UserssQuery(); - userssQuery.setCandidateGroups(candidateGroups); - userssQuery.setOrgSidPath(orgPath); - sysUserVoLists = sysUserFeign.getUsersByRoles(userssQuery).getData(); - if (sysUserVoLists == null) { - sysUserVoLists = new ArrayList<>(); - } - //当前环节运营部总经理 刘丽艳 点击同意 下一环节 事业部副总经理 (nextUserSid) 和事业部总经理(sysUserVoLists.get(0).getSid()) - //判断查询回来的用户的集合size是1 并且用户的sid和下一环节的用户的sid相同。 - if (sysUserVoLists.size() == 1 && sysUserVoLists.get(0).getSid().equals(nextUserSid)) { - contains = true; - break; - } - //如果下下一环节无用户,下下下一环节用户与下一环节用户相同且只有一个,则下一环节用户自动审批。 - if (sysUserVoLists.size() == 0 && sysUserVoLists2.size() == 1 && sysUserVoLists2.get(0).getSid().equals(nextUserSid)) { - contains = true; - break; - } + + // 如果下一个环节只有一个用户,并且其sid与下一级相同,则设置contains为true + if (nextUserList.size() == 1 && nextUserList.get(0).getSid().equals(nextUserSid)) { + contains = true; // 确定自动审批 + break; // 跳出循环,不再检查后续环节 + } + + // 如果下下一个环节没有用户,且下下下一个环节与下一级相同,设置contains为true + if (nextUserList.isEmpty() && nextNextUserList.size() == 1 && nextNextUserList.get(0).getSid().equals(nextUserSid)) { + contains = true; // 确定自动审批 + break; // 跳出循环 } - } - if (contains) { - break; } } } @@ -689,7 +659,27 @@ public class Flow3Service extends MybatisBaseService { return rb.success().setData(vo); } - public ResultBean handleProsess222(BusinessVariables bv, boolean b) { + /** + * 提取获取用户角色列表的公共方法,避免重复代码 + * + * @param flowElement 当前流程环节 + * @param orgPath 当前用户的组织路径 + * @return 用户列表 + */ + private List getUserListFromFlowElement(FlowElement flowElement, String orgPath) { + List userList = new ArrayList<>(); // 初始化用户列表 + if (flowElement instanceof UserTask) { // 判断当前环节是否为用户任务 + UserTask userTask = (UserTask) flowElement; // 转换为用户任务类型 + List candidateGroups = userTask.getCandidateGroups(); // 获取候选组 + UserssQuery userssQuery = new UserssQuery(); // 创建查询对象 + userssQuery.setCandidateGroups(candidateGroups); // 设置候选组 + userssQuery.setOrgSidPath(orgPath); // 设置组织路径 + userList = sysUserFeign.getUsersByRoles(userssQuery).getData(); // 根据角色查询用户 + } + return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表 + } + + /* public ResultBean handleProsess222(BusinessVariables bv, boolean b) { ResultBean rb = ResultBean.fireFail(); UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); // 或签任务候选人 @@ -915,7 +905,7 @@ public class Flow3Service extends MybatisBaseService { vo.setTaskDefKey(taskDefKey); vo.setSid(bv.getBusinessSid()); return rb.success().setData(vo); - } + }*/ /** * 获取下一环节用户 @@ -1519,7 +1509,7 @@ public class Flow3Service extends MybatisBaseService { } - public ResultBean submit222() { + /* public ResultBean submit222() { String userSid = "7f56f6ec-4a5f-47b0-aaab-158d64cb97b1"; // 或签任务候选人 List userIds = new ArrayList<>(); @@ -1634,37 +1624,10 @@ public class Flow3Service extends MybatisBaseService { assertTrue(isEnded2); return ResultBean.fireSuccess(); - } - - - /* private boolean isMultiInstanceTask(Task task, boolean isSequential) { - // 获取任务节点的ID - String taskDefinitionKey = task.getTaskDefinitionKey(); - - // 获取流程定义对象 - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() - .processDefinitionId(task.getProcessDefinitionId()) - .singleResult(); - - // 获取BPMN模型,解析任务定义 - BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); - FlowElement flowElement = bpmnModel.getFlowElement(taskDefinitionKey); - - // 判断flowElement是否是UserTask,并且获取其multiInstanceLoopCharacteristics - if (flowElement instanceof UserTask) { - UserTask userTask = (UserTask) flowElement; - // 获取multiInstanceLoopCharacteristics - MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); - if (multiInstance != null) { - boolean sequential = multiInstance.isSequential(); - return sequential == isSequential; - } - } - return false; }*/ - public ResultBean submit333() { + public ResultBean submit333() { String userSid = "7f56f6ec-4a5f-47b0-aaab-158d64cb97b1"; // 或签任务候选人 List userIds = Arrays.asList(