Commit 45399687b4849064ac0daba9550d51898a9a44e2

Authored by jason
1 parent dea5e07e

fix: 修复退回到多实例任务时候,会自动跳过问题。 https://github.com/YunaiV/ruoyi-vue-pro/issues/1128

yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
... ... @@ -618,7 +618,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
618 618 runtimeService.setVariable(task.getProcessInstanceId(), BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS, needSimulateTaskIdsByReturn);
619 619 }
620 620  
621   - // 6. 调用 BPM complete 去完成任务
  621 + // 6. 清理退回设置的不自动通过的变量。
  622 + runtimeService.removeVariable(task.getProcessInstanceId(), String.format(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, task.getTaskDefinitionKey()));
  623 +
  624 + // 7. 调用 BPM complete 去完成任务
622 625 taskService.complete(task.getId(), variables, true);
623 626  
624 627 // 【加签专属】处理加签任务
... ... @@ -955,9 +958,8 @@ public class BpmTaskServiceImpl implements BpmTaskService {
955 958 .moveActivityIdsToSingleActivityId(returnTaskKeyList, reqVO.getTargetTaskDefinitionKey())
956 959 // 设置需要预测的任务 ids 的流程变量,用于辅助预测
957 960 .processVariable(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_TASK_IDS, needSimulateTaskDefinitionKeys)
958   - // 设置流程变量(local)节点退回标记, 用于退回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略,导致自动通过
959   - .localVariable(reqVO.getTargetTaskDefinitionKey(),
960   - String.format(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE)
  961 + // 设置流程变量节点退回标记, 用于退回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略,导致自动通过
  962 + .processVariable(String.format(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE)
961 963 .changeState();
962 964 }
963 965  
... ... @@ -1506,8 +1508,8 @@ public class BpmTaskServiceImpl implements BpmTaskService {
1506 1508 return;
1507 1509 }
1508 1510 FlowElement userTaskElement = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey());
1509   - // 判断是否为退回或者驳回:如果是退回或者驳回不走这个策略(使用 local variable)
1510   - Boolean returnTaskFlag = runtimeService.getVariableLocal(task.getExecutionId(),
  1511 + // 判断是否为退回或者驳回:如果是退回或者驳回不走这个策略
  1512 + Boolean returnTaskFlag = runtimeService.getVariable(processInstance.getProcessInstanceId(),
1511 1513 String.format(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, task.getTaskDefinitionKey()), Boolean.class);
1512 1514 Boolean skipStartUserNodeFlag = Convert.toBool(runtimeService.getVariable(processInstance.getProcessInstanceId(),
1513 1515 BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE, String.class));
... ...