fix: 存在子流程情况下的取消逻辑优化
This commit is contained in:
parent
4fbe9fa480
commit
e14716a307
|
@ -42,6 +42,7 @@ public interface ErrorCodeConstants {
|
||||||
ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_ALLOW = new ErrorCode(1_009_004_005, "流程取消失败,该流程不允许取消");
|
ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_ALLOW = new ErrorCode(1_009_004_005, "流程取消失败,该流程不允许取消");
|
||||||
ErrorCode PROCESS_INSTANCE_HTTP_TRIGGER_CALL_ERROR = new ErrorCode(1_009_004_006, "流程 Http 触发器请求调用失败");
|
ErrorCode PROCESS_INSTANCE_HTTP_TRIGGER_CALL_ERROR = new ErrorCode(1_009_004_006, "流程 Http 触发器请求调用失败");
|
||||||
ErrorCode PROCESS_INSTANCE_APPROVE_USER_SELECT_ASSIGNEES_NOT_CONFIG = new ErrorCode(1_009_004_007, "下一个任务({})的审批人未配置");
|
ErrorCode PROCESS_INSTANCE_APPROVE_USER_SELECT_ASSIGNEES_NOT_CONFIG = new ErrorCode(1_009_004_007, "下一个任务({})的审批人未配置");
|
||||||
|
ErrorCode CHILD_PROCESS_INSTANCE_CANCEL_FAIL_NOT_ALLOW = new ErrorCode(1_009_004_008, "子流程取消失败,子流程不允许取消");
|
||||||
|
|
||||||
// ========== 流程任务 1-009-005-000 ==========
|
// ========== 流程任务 1-009-005-000 ==========
|
||||||
ErrorCode TASK_OPERATE_FAIL_ASSIGN_NOT_SELF = new ErrorCode(1_009_005_001, "操作失败,原因:该任务的审批人不是你");
|
ErrorCode TASK_OPERATE_FAIL_ASSIGN_NOT_SELF = new ErrorCode(1_009_005_001, "操作失败,原因:该任务的审批人不是你");
|
||||||
|
|
|
@ -18,6 +18,7 @@ public enum BpmReasonEnum {
|
||||||
REJECT_TASK("审批不通过任务,原因:{}"), // 场景:用户审批不通过任务。修改文案时,需要注意 isRejectReason 方法
|
REJECT_TASK("审批不通过任务,原因:{}"), // 场景:用户审批不通过任务。修改文案时,需要注意 isRejectReason 方法
|
||||||
CANCEL_PROCESS_INSTANCE_BY_START_USER("用户主动取消流程,原因:{}"), // 场景:用户主动取消流程
|
CANCEL_PROCESS_INSTANCE_BY_START_USER("用户主动取消流程,原因:{}"), // 场景:用户主动取消流程
|
||||||
CANCEL_PROCESS_INSTANCE_BY_ADMIN("管理员【{}】取消流程,原因:{}"), // 场景:管理员取消流程
|
CANCEL_PROCESS_INSTANCE_BY_ADMIN("管理员【{}】取消流程,原因:{}"), // 场景:管理员取消流程
|
||||||
|
CANCEL_CHILD_PROCESS_INSTANCE_BY_MAIN_PROCESS("子流程自动取消,原因:子流程已取消"),
|
||||||
|
|
||||||
// ========== 流程任务的独有原因 ==========
|
// ========== 流程任务的独有原因 ==========
|
||||||
|
|
||||||
|
|
|
@ -148,7 +148,6 @@ public class BpmProcessInstanceController {
|
||||||
processDefinition, processDefinitionInfo, startUser, dept));
|
processDefinition, processDefinitionInfo, startUser, dept));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO @lesan:【子流程】子流程如果取消,主流程应该是通过、还是不通过哈?还是禁用掉子流程的取消?
|
|
||||||
@DeleteMapping("/cancel-by-start-user")
|
@DeleteMapping("/cancel-by-start-user")
|
||||||
@Operation(summary = "用户取消流程实例", description = "取消发起的流程")
|
@Operation(summary = "用户取消流程实例", description = "取消发起的流程")
|
||||||
@PreAuthorize("@ss.hasPermission('bpm:process-instance:cancel')")
|
@PreAuthorize("@ss.hasPermission('bpm:process-instance:cancel')")
|
||||||
|
|
|
@ -813,7 +813,6 @@ public class SimpleModelUtils {
|
||||||
callActivity.setCalledElementType("key");
|
callActivity.setCalledElementType("key");
|
||||||
// 1. 是否异步
|
// 1. 是否异步
|
||||||
if (node.getChildProcessSetting().getAsync()) {
|
if (node.getChildProcessSetting().getAsync()) {
|
||||||
// TODO @lesan: 这里目前测试没有跳过执行call activity 后面的节点
|
|
||||||
callActivity.setAsynchronous(true);
|
callActivity.setAsynchronous(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -823,6 +823,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
|
||||||
&& Boolean.FALSE.equals(processDefinitionInfo.getAllowCancelRunningProcess())) {
|
&& Boolean.FALSE.equals(processDefinitionInfo.getAllowCancelRunningProcess())) {
|
||||||
throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_ALLOW);
|
throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_ALLOW);
|
||||||
}
|
}
|
||||||
|
// 1.4 子流程不允许取消
|
||||||
|
if (StrUtil.isNotBlank(instance.getSuperExecutionId())) {
|
||||||
|
throw exception(CHILD_PROCESS_INSTANCE_CANCEL_FAIL_NOT_ALLOW);
|
||||||
|
}
|
||||||
|
|
||||||
// 2. 取消流程
|
// 2. 取消流程
|
||||||
updateProcessInstanceCancel(cancelReqVO.getId(),
|
updateProcessInstanceCancel(cancelReqVO.getId(),
|
||||||
|
@ -851,6 +855,15 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
|
||||||
|
|
||||||
// 2. 结束流程
|
// 2. 结束流程
|
||||||
taskService.moveTaskToEnd(id, reason);
|
taskService.moveTaskToEnd(id, reason);
|
||||||
|
|
||||||
|
// 3. 取消所有子流程
|
||||||
|
List<ProcessInstance> subProcessInstances = runtimeService.createProcessInstanceQuery()
|
||||||
|
.superProcessInstanceId(id)
|
||||||
|
.list();
|
||||||
|
subProcessInstances.forEach(processInstance -> {
|
||||||
|
updateProcessInstanceCancel(processInstance.getProcessInstanceId(),
|
||||||
|
BpmReasonEnum.CANCEL_CHILD_PROCESS_INSTANCE_BY_MAIN_PROCESS.getReason());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue