Commit 56664ca0a0e334d04c0c529fa7c81c1ac192be86

Authored by YunaiV
1 parent 70386263

【代码评审】工作流:驳回到发起人时,不自动通过

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnVariableConstants.java
@@ -30,10 +30,11 @@ public class BpmnVariableConstants { @@ -30,10 +30,11 @@ public class BpmnVariableConstants {
30 */ 30 */
31 public static final String PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES = "PROCESS_START_USER_SELECT_ASSIGNEES"; 31 public static final String PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES = "PROCESS_START_USER_SELECT_ASSIGNEES";
32 32
33 - // TODO @芋艿:用于处理,驳回到发起人时,如果被自动通过的逻辑  
34 /** 33 /**
35 * 流程实例的变量 - 用于判断流程实例变量节点是否驳回. 格式 RETURN_FLAG_{节点 id} 34 * 流程实例的变量 - 用于判断流程实例变量节点是否驳回. 格式 RETURN_FLAG_{节点 id}
36 * 35 *
  36 + * 目的是:驳回到发起节点时,因为审批人与发起人相同,所以被自动通过。但是,此时还是希望不要自动通过
  37 + *
37 * @see ProcessInstance#getProcessVariables() 38 * @see ProcessInstance#getProcessVariables()
38 */ 39 */
39 public static final String PROCESS_INSTANCE_VARIABLE_RETURN_FLAG = "RETURN_FLAG_%s"; 40 public static final String PROCESS_INSTANCE_VARIABLE_RETURN_FLAG = "RETURN_FLAG_%s";
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
@@ -617,10 +617,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -617,10 +617,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
617 updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason()); 617 updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason());
618 }); 618 });
619 619
620 - // 设置流程变量节点驳回标记。用于驳回到节点。不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略 而自动通过 620 + // 3. 设置流程变量节点驳回标记:用于驳回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略。导致自动通过
621 runtimeService.setVariable(currentTask.getProcessInstanceId(), 621 runtimeService.setVariable(currentTask.getProcessInstanceId(),
622 String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE); 622 String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE);
623 - // 3. 执行驳回 623 +
  624 + // 4. 执行驳回
624 runtimeService.createChangeActivityStateBuilder() 625 runtimeService.createChangeActivityStateBuilder()
625 .processInstanceId(currentTask.getProcessInstanceId()) 626 .processInstanceId(currentTask.getProcessInstanceId())
626 .moveActivityIdsToSingleActivityId(returnTaskKeyList, // 当前要跳转的节点列表( 1 或多) 627 .moveActivityIdsToSingleActivityId(returnTaskKeyList, // 当前要跳转的节点列表( 1 或多)
@@ -978,12 +979,13 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -978,12 +979,13 @@ public class BpmTaskServiceImpl implements BpmTaskService {
978 log.error("[processTaskAssigned][taskId({}) 没有找到流程实例]", task.getId()); 979 log.error("[processTaskAssigned][taskId({}) 没有找到流程实例]", task.getId());
979 return; 980 return;
980 } 981 }
981 - // 审批人与提交人为同一人时,根据策略进行处理 982 + // 审批人与提交人为同一人时,根据 BpmUserTaskAssignStartUserHandlerTypeEnum 策略进行处理
982 if (StrUtil.equals(task.getAssignee(), processInstance.getStartUserId())) { 983 if (StrUtil.equals(task.getAssignee(), processInstance.getStartUserId())) {
983 - // 判断是否为回退或者驳回 984 + // 判断是否为回退或者驳回:如果是回退或者驳回不走这个策略
  985 + // TODO 芋艿:【优化】未来有没更好的判断方式?!另外,还要考虑清理机制。就是说,下次处理了之后,就移除这个标识
984 Boolean returnTaskFlag = runtimeService.getVariable(processInstance.getProcessInstanceId(), 986 Boolean returnTaskFlag = runtimeService.getVariable(processInstance.getProcessInstanceId(),
985 String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, task.getTaskDefinitionKey()), Boolean.class); 987 String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, task.getTaskDefinitionKey()), Boolean.class);
986 - if (!BooleanUtil.isTrue(returnTaskFlag)) { // 如果是回退或者驳回不走这个策略 988 + if (ObjUtil.notEqual(returnTaskFlag, Boolean.TRUE)) {
987 BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(processInstance.getProcessDefinitionId()); 989 BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(processInstance.getProcessDefinitionId());
988 if (bpmnModel == null) { 990 if (bpmnModel == null) {
989 log.error("[processTaskAssigned][taskId({}) 没有找到流程模型]", task.getId()); 991 log.error("[processTaskAssigned][taskId({}) 没有找到流程模型]", task.getId());