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 | 83 | |
| 84 | 84 | private static BpmSimpleModelNodeVO buildStartNode() { |
| 85 | 85 | return new BpmSimpleModelNodeVO().setId(START_EVENT_NODE_ID) |
| 86 | - .setName(BpmSimpleModelNodeType.START_USER_NODE.getName()) | |
| 86 | + .setName(BpmSimpleModelNodeType.START_NODE.getName()) | |
| 87 | 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 | 441 | * 判断指定用户,是否是当前任务的加签人 |
| 442 | 442 | * |
| 443 | 443 | * @param userId 用户 Id |
| 444 | - * @param task 任务 | |
| 444 | + * @param task 任务 | |
| 445 | 445 | * @return 是否 |
| 446 | 446 | */ |
| 447 | 447 | private boolean isAddSignUserTask(Long userId, Task task) { |
| ... | ... | @@ -669,7 +669,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 669 | 669 | reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId()); |
| 670 | 670 | |
| 671 | 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 | 701 | /** |
| 702 | 702 | * 执行退回逻辑 |
| 703 | 703 | * |
| 704 | + * @param userId 用户编号 | |
| 704 | 705 | * @param currentTask 当前退回的任务 |
| 705 | 706 | * @param targetElement 需要退回到的目标任务 |
| 706 | 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 | 710 | // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤 |
| 710 | 711 | // 1.1 获取所有正常进行的任务节点 Key |
| 711 | 712 | List<Task> taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list(); |
| ... | ... | @@ -721,22 +722,28 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 721 | 722 | if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) { |
| 722 | 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 | 739 | // 3. 设置流程变量节点驳回标记:用于驳回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略。导致自动通过 |
| 732 | 740 | runtimeService.setVariable(currentTask.getProcessInstanceId(), |
| 733 | 741 | String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE); |
| 734 | - | |
| 735 | 742 | // 4. 执行驳回 |
| 743 | + List<String> runExecutionIdList = convertList(taskList, Task::getExecutionId); | |
| 736 | 744 | runtimeService.createChangeActivityStateBuilder() |
| 737 | 745 | .processInstanceId(currentTask.getProcessInstanceId()) |
| 738 | - .moveActivityIdsToSingleActivityId(returnTaskKeyList, // 当前要跳转的节点列表( 1 或多) | |
| 739 | - reqVO.getTargetTaskDefinitionKey()) // targetKey 跳转到的节点(1) | |
| 746 | + .moveExecutionsToSingleActivityId(runExecutionIdList, reqVO.getTargetTaskDefinitionKey()) | |
| 740 | 747 | .changeState(); |
| 741 | 748 | } |
| 742 | 749 | ... | ... |