Commit 6e2d00d561d5b7b866f90012da43d83eb8c7c911

Authored by smallNorthLee
1 parent d41cce94

feat:审批通过时,查询下一个执行节点,校验流程执行正确与否

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
@@ -169,7 +169,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -169,7 +169,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
169 Long startUserId = loginUserId; // 流程发起人 169 Long startUserId = loginUserId; // 流程发起人
170 HistoricProcessInstance historicProcessInstance = null; // 流程实例 170 HistoricProcessInstance historicProcessInstance = null; // 流程实例
171 Integer processInstanceStatus = BpmProcessInstanceStatusEnum.NOT_START.getStatus(); // 流程状态 171 Integer processInstanceStatus = BpmProcessInstanceStatusEnum.NOT_START.getStatus(); // 流程状态
172 - Map<String, Object> processVariables = reqVO.getProcessVariables(); // 流程变量 172 + Map<String, Object> processVariables = new HashMap<>(); // 流程变量
173 // 1.2 如果是流程已发起的场景,则使用流程实例的数据 173 // 1.2 如果是流程已发起的场景,则使用流程实例的数据
174 if (reqVO.getProcessInstanceId() != null) { 174 if (reqVO.getProcessInstanceId() != null) {
175 historicProcessInstance = getHistoricProcessInstance(reqVO.getProcessInstanceId()); 175 historicProcessInstance = getHistoricProcessInstance(reqVO.getProcessInstanceId());
@@ -180,10 +180,12 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -180,10 +180,12 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
180 processInstanceStatus = FlowableUtils.getProcessInstanceStatus(historicProcessInstance); 180 processInstanceStatus = FlowableUtils.getProcessInstanceStatus(historicProcessInstance);
181 // 合并 DB 和前端传递的流量变量,以前端的为主 181 // 合并 DB 和前端传递的流量变量,以前端的为主
182 Map<String, Object> historicVariables = historicProcessInstance.getProcessVariables(); 182 Map<String, Object> historicVariables = historicProcessInstance.getProcessVariables();
183 - if (CollUtil.isNotEmpty(processVariables)) {  
184 - historicVariables.putAll(processVariables); 183 + if (CollUtil.isNotEmpty(historicVariables)) {
  184 + processVariables.putAll(historicVariables);
185 } 185 }
186 - processVariables = historicVariables; 186 + }
  187 + if (CollUtil.isNotEmpty(reqVO.getProcessVariables())) {
  188 + processVariables.putAll(reqVO.getProcessVariables());
187 } 189 }
188 // 1.3 读取其它相关数据 190 // 1.3 读取其它相关数据
189 ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition( 191 ProcessDefinition processDefinition = processDefinitionService.getProcessDefinition(
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
@@ -531,6 +531,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -531,6 +531,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
531 // 校验传递的参数中是否为下一个将要执行的任务节点 531 // 校验传递的参数中是否为下一个将要执行的任务节点
532 Map<String, Object> variables = validateAndSetNextAssignees(task.getTaskDefinitionKey(), reqVO.getVariables(), 532 Map<String, Object> variables = validateAndSetNextAssignees(task.getTaskDefinitionKey(), reqVO.getVariables(),
533 bpmnModel, reqVO.getNextAssignees(), instance); 533 bpmnModel, reqVO.getNextAssignees(), instance);
  534 + runtimeService.setVariables(task.getProcessInstanceId(), variables);
534 taskService.complete(task.getId(), variables, true); 535 taskService.complete(task.getId(), variables, true);
535 } else { 536 } else {
536 taskService.complete(task.getId()); 537 taskService.complete(task.getId());
@@ -555,6 +556,10 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -555,6 +556,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
555 */ 556 */
556 private Map<String, Object> validateAndSetNextAssignees(String taskDefinitionKey, Map<String, Object> variables, BpmnModel bpmnModel, 557 private Map<String, Object> validateAndSetNextAssignees(String taskDefinitionKey, Map<String, Object> variables, BpmnModel bpmnModel,
557 Map<String, List<Long>> nextAssignees, ProcessInstance processInstance) { 558 Map<String, List<Long>> nextAssignees, ProcessInstance processInstance) {
  559 + // 下一个节点参数为空,不做处理,表示流程正常流转,无需选择下一个节点的审判人
  560 + if (CollUtil.isEmpty(nextAssignees)){
  561 + return variables;
  562 + }
558 // 1. 获取当前任务节点的信息 563 // 1. 获取当前任务节点的信息
559 FlowElement flowElement = bpmnModel.getFlowElement(taskDefinitionKey); 564 FlowElement flowElement = bpmnModel.getFlowElement(taskDefinitionKey);
560 // 2. 获取下一个将要执行的节点集合 565 // 2. 获取下一个将要执行的节点集合
@@ -587,7 +592,6 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -587,7 +592,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
587 // 4.3.3 校验通过的全部节点和审批人 592 // 4.3.3 校验通过的全部节点和审批人
588 allNextAssignees.put(nextFlowNode.getId(), nextAssignees.get(nextFlowNode.getId())); 593 allNextAssignees.put(nextFlowNode.getId(), nextAssignees.get(nextFlowNode.getId()));
589 } 594 }
590 - // TODO @小北:加一个“审批人选择”的校验;  
591 } 595 }
592 // variables 是存储动态表单到 local 任务级别。过滤一下,避免 ProcessInstance 系统级的变量被占用 596 // variables 是存储动态表单到 local 任务级别。过滤一下,避免 ProcessInstance 系统级的变量被占用
593 Map<String, Object> newVariables = FlowableUtils.filterTaskFormVariable(variables); 597 Map<String, Object> newVariables = FlowableUtils.filterTaskFormVariable(variables);
@@ -599,7 +603,6 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -599,7 +603,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
599 newVariables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_APPROVE_USER_SELECT_ASSIGNEES, hisProcessVariables); 603 newVariables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_APPROVE_USER_SELECT_ASSIGNEES, hisProcessVariables);
600 // 设置流程变量,发起人自选,后续的节点或者回退后再或者驳回重新发起的场景可能存在发起人自选或者审批人自选,所以中两个变量值要保持一致,否则会查询不到审批人 604 // 设置流程变量,发起人自选,后续的节点或者回退后再或者驳回重新发起的场景可能存在发起人自选或者审批人自选,所以中两个变量值要保持一致,否则会查询不到审批人
601 newVariables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES, hisProcessVariables); 605 newVariables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES, hisProcessVariables);
602 - runtimeService.setVariables(processInstance.getProcessInstanceId(), newVariables);  
603 } 606 }
604 return newVariables; 607 return newVariables;
605 } 608 }