Commit 45dd87c0856e8c52cec184f497386b3e0e04f4f7
1 parent
4a238725
【缺陷修复】
1、从依次审批节点退回时,任务不生成的问题 2、会签、或签任务退回时,不分配给自己的任务,执行取消逻辑
Showing
2 changed files
with
19 additions
and
12 deletions
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
| @@ -83,7 +83,7 @@ public class SimpleModelUtils { | @@ -83,7 +83,7 @@ public class SimpleModelUtils { | ||
| 83 | 83 | ||
| 84 | private static BpmSimpleModelNodeVO buildStartNode() { | 84 | private static BpmSimpleModelNodeVO buildStartNode() { |
| 85 | return new BpmSimpleModelNodeVO().setId(START_EVENT_NODE_ID) | 85 | return new BpmSimpleModelNodeVO().setId(START_EVENT_NODE_ID) |
| 86 | - .setName(BpmSimpleModelNodeType.START_USER_NODE.getName()) | 86 | + .setName(BpmSimpleModelNodeType.START_NODE.getName()) |
| 87 | .setType(BpmSimpleModelNodeType.START_NODE.getType()); | 87 | .setType(BpmSimpleModelNodeType.START_NODE.getType()); |
| 88 | } | 88 | } |
| 89 | 89 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -441,7 +441,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -441,7 +441,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 441 | * 判断指定用户,是否是当前任务的加签人 | 441 | * 判断指定用户,是否是当前任务的加签人 |
| 442 | * | 442 | * |
| 443 | * @param userId 用户 Id | 443 | * @param userId 用户 Id |
| 444 | - * @param task 任务 | 444 | + * @param task 任务 |
| 445 | * @return 是否 | 445 | * @return 是否 |
| 446 | */ | 446 | */ |
| 447 | private boolean isAddSignUserTask(Long userId, Task task) { | 447 | private boolean isAddSignUserTask(Long userId, Task task) { |
| @@ -669,7 +669,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -669,7 +669,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 669 | reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId()); | 669 | reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId()); |
| 670 | 670 | ||
| 671 | // 2. 调用 Flowable 框架的退回逻辑 | 671 | // 2. 调用 Flowable 框架的退回逻辑 |
| 672 | - returnTask(task, targetElement, reqVO); | 672 | + returnTask(userId, task, targetElement, reqVO); |
| 673 | } | 673 | } |
| 674 | 674 | ||
| 675 | /** | 675 | /** |
| @@ -701,11 +701,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -701,11 +701,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 701 | /** | 701 | /** |
| 702 | * 执行退回逻辑 | 702 | * 执行退回逻辑 |
| 703 | * | 703 | * |
| 704 | + * @param userId 用户编号 | ||
| 704 | * @param currentTask 当前退回的任务 | 705 | * @param currentTask 当前退回的任务 |
| 705 | * @param targetElement 需要退回到的目标任务 | 706 | * @param targetElement 需要退回到的目标任务 |
| 706 | * @param reqVO 前端参数封装 | 707 | * @param reqVO 前端参数封装 |
| 707 | */ | 708 | */ |
| 708 | - public void returnTask(Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { | 709 | + public void returnTask(Long userId, Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { |
| 709 | // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤 | 710 | // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤 |
| 710 | // 1.1 获取所有正常进行的任务节点 Key | 711 | // 1.1 获取所有正常进行的任务节点 Key |
| 711 | List<Task> taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list(); | 712 | List<Task> taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list(); |
| @@ -721,22 +722,28 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -721,22 +722,28 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 721 | if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) { | 722 | if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) { |
| 722 | return; | 723 | return; |
| 723 | } | 724 | } |
| 724 | - // 2.1 添加评论 | ||
| 725 | - taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(), | ||
| 726 | - BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason())); | ||
| 727 | - // 2.2 更新 task 状态 + 原因 | ||
| 728 | - updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason()); | 725 | + |
| 726 | + if (isAssignUserTask(userId, task)) { // 判断是否分配给自己任务,因为会签任务,一个节点会有多个任务 | ||
| 727 | + // 2.1 添加评论 | ||
| 728 | + taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(), | ||
| 729 | + BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason())); | ||
| 730 | + // 2.2 更新 task 状态 + 原因 | ||
| 731 | + updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason()); | ||
| 732 | + } else { | ||
| 733 | + // 2.3 取消不是分配给自己的任务 | ||
| 734 | + processTaskCanceled(task.getId()); | ||
| 735 | + } | ||
| 736 | + | ||
| 729 | }); | 737 | }); |
| 730 | 738 | ||
| 731 | // 3. 设置流程变量节点驳回标记:用于驳回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略。导致自动通过 | 739 | // 3. 设置流程变量节点驳回标记:用于驳回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略。导致自动通过 |
| 732 | runtimeService.setVariable(currentTask.getProcessInstanceId(), | 740 | runtimeService.setVariable(currentTask.getProcessInstanceId(), |
| 733 | String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE); | 741 | String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE); |
| 734 | - | ||
| 735 | // 4. 执行驳回 | 742 | // 4. 执行驳回 |
| 743 | + List<String> runExecutionIdList = convertList(taskList, Task::getExecutionId); | ||
| 736 | runtimeService.createChangeActivityStateBuilder() | 744 | runtimeService.createChangeActivityStateBuilder() |
| 737 | .processInstanceId(currentTask.getProcessInstanceId()) | 745 | .processInstanceId(currentTask.getProcessInstanceId()) |
| 738 | - .moveActivityIdsToSingleActivityId(returnTaskKeyList, // 当前要跳转的节点列表( 1 或多) | ||
| 739 | - reqVO.getTargetTaskDefinitionKey()) // targetKey 跳转到的节点(1) | 746 | + .moveExecutionsToSingleActivityId(runExecutionIdList, reqVO.getTargetTaskDefinitionKey()) |
| 740 | .changeState(); | 747 | .changeState(); |
| 741 | } | 748 | } |
| 742 | 749 |