Commit d6643c9a273f8d697381ad1f2f0c099be71f8121
1 parent
128f61a1
feat: [BPM 工作流] 子流程审批不通过,结束主流程审批,并标记为不通过
Showing
2 changed files
with
17 additions
and
0 deletions
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmReasonEnum.java
| @@ -19,6 +19,7 @@ public enum BpmReasonEnum { | @@ -19,6 +19,7 @@ public enum BpmReasonEnum { | ||
| 19 | CANCEL_PROCESS_INSTANCE_BY_START_USER("用户主动取消流程,原因:{}"), // 场景:用户主动取消流程 | 19 | CANCEL_PROCESS_INSTANCE_BY_START_USER("用户主动取消流程,原因:{}"), // 场景:用户主动取消流程 |
| 20 | CANCEL_PROCESS_INSTANCE_BY_ADMIN("管理员【{}】取消流程,原因:{}"), // 场景:管理员取消流程 | 20 | CANCEL_PROCESS_INSTANCE_BY_ADMIN("管理员【{}】取消流程,原因:{}"), // 场景:管理员取消流程 |
| 21 | CANCEL_CHILD_PROCESS_INSTANCE_BY_MAIN_PROCESS("子流程自动取消,原因:主流程已取消"), | 21 | CANCEL_CHILD_PROCESS_INSTANCE_BY_MAIN_PROCESS("子流程自动取消,原因:主流程已取消"), |
| 22 | + REJECT_CHILD_PROCESS("子流程审批不通过"), | ||
| 22 | 23 | ||
| 23 | // ========== 流程任务的独有原因 ========== | 24 | // ========== 流程任务的独有原因 ========== |
| 24 | 25 |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -67,6 +67,7 @@ import java.util.stream.Stream; | @@ -67,6 +67,7 @@ import java.util.stream.Stream; | ||
| 67 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 67 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 68 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; | 68 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| 69 | import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; | 69 | import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; |
| 70 | +import static cn.iocoder.yudao.module.bpm.enums.task.BpmReasonEnum.REJECT_CHILD_PROCESS; | ||
| 70 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.START_USER_NODE_ID; | 71 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.START_USER_NODE_ID; |
| 71 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG; | 72 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_RETURN_FLAG; |
| 72 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE; | 73 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE; |
| @@ -805,8 +806,23 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -805,8 +806,23 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 805 | return; | 806 | return; |
| 806 | } | 807 | } |
| 807 | // 3.2 情况二:直接结束,审批不通过 | 808 | // 3.2 情况二:直接结束,审批不通过 |
| 809 | + // 3.2.1 如果是子流程,需获取父流程。标记父流程为不通过。 | ||
| 810 | + // 注意需要在子流程结束前标记,因为如果子流程是最后一个节点。在子流程结束后标记, 会报错 | ||
| 811 | + ProcessInstance parentProcessInstance = null; | ||
| 812 | + if (StrUtil.isNotBlank(instance.getSuperExecutionId())) { | ||
| 813 | + Execution execution = runtimeService.createExecutionQuery().executionId(instance.getSuperExecutionId()).singleResult(); | ||
| 814 | + parentProcessInstance = processInstanceService.getProcessInstance(execution.getProcessInstanceId()); | ||
| 815 | + // 标记父流程不通过 | ||
| 816 | + processInstanceService.updateProcessInstanceReject(parentProcessInstance, REJECT_CHILD_PROCESS.getReason()); | ||
| 817 | + } | ||
| 818 | + // 3.2.2 标记流程为不通过并结束流程 | ||
| 808 | processInstanceService.updateProcessInstanceReject(instance, reqVO.getReason()); // 标记不通过 | 819 | processInstanceService.updateProcessInstanceReject(instance, reqVO.getReason()); // 标记不通过 |
| 809 | moveTaskToEnd(task.getProcessInstanceId(), BpmCommentTypeEnum.REJECT.formatComment(reqVO.getReason())); // 结束流程 | 820 | moveTaskToEnd(task.getProcessInstanceId(), BpmCommentTypeEnum.REJECT.formatComment(reqVO.getReason())); // 结束流程 |
| 821 | + | ||
| 822 | + // 3.2.3 如果是子流程,结束主流程 | ||
| 823 | + if (parentProcessInstance!=null) { | ||
| 824 | + moveTaskToEnd(parentProcessInstance.getId(), BpmCommentTypeEnum.REJECT.formatComment(REJECT_CHILD_PROCESS.getReason())); | ||
| 825 | + } | ||
| 810 | } | 826 | } |
| 811 | 827 | ||
| 812 | /** | 828 | /** |