Commit 56664ca0a0e334d04c0c529fa7c81c1ac192be86
1 parent
70386263
【代码评审】工作流:驳回到发起人时,不自动通过
Showing
2 changed files
with
9 additions
and
6 deletions
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()); |