From 45dd87c0856e8c52cec184f497386b3e0e04f4f7 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Fri, 6 Dec 2024 17:40:53 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=BC=BA=E9=99=B7=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E3=80=91=201=E3=80=81=E4=BB=8E=E4=BE=9D=E6=AC=A1=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E8=8A=82=E7=82=B9=E9=80=80=E5=9B=9E=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=B8=8D=E7=94=9F=E6=88=90=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=202=E3=80=81=E4=BC=9A=E7=AD=BE=E3=80=81=E6=88=96?= =?UTF-8?q?=E7=AD=BE=E4=BB=BB=E5=8A=A1=E9=80=80=E5=9B=9E=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=88=86=E9=85=8D=E7=BB=99=E8=87=AA=E5=B7=B1=E7=9A=84?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=EF=BC=8C=E6=89=A7=E8=A1=8C=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flowable/core/util/SimpleModelUtils.java | 2 +- .../bpm/service/task/BpmTaskServiceImpl.java | 29 ++++++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java index 28a1ef124e..ab64323757 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java +++ b/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 { private static BpmSimpleModelNodeVO buildStartNode() { return new BpmSimpleModelNodeVO().setId(START_EVENT_NODE_ID) - .setName(BpmSimpleModelNodeType.START_USER_NODE.getName()) + .setName(BpmSimpleModelNodeType.START_NODE.getName()) .setType(BpmSimpleModelNodeType.START_NODE.getType()); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java index 919240df2c..4d2f371ec2 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java +++ b/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 { * 判断指定用户,是否是当前任务的加签人 * * @param userId 用户 Id - * @param task 任务 + * @param task 任务 * @return 是否 */ private boolean isAddSignUserTask(Long userId, Task task) { @@ -669,7 +669,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId()); // 2. 调用 Flowable 框架的退回逻辑 - returnTask(task, targetElement, reqVO); + returnTask(userId, task, targetElement, reqVO); } /** @@ -701,11 +701,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { /** * 执行退回逻辑 * + * @param userId 用户编号 * @param currentTask 当前退回的任务 * @param targetElement 需要退回到的目标任务 * @param reqVO 前端参数封装 */ - public void returnTask(Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { + public void returnTask(Long userId, Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤 // 1.1 获取所有正常进行的任务节点 Key List taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list(); @@ -721,22 +722,28 @@ public class BpmTaskServiceImpl implements BpmTaskService { if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) { return; } - // 2.1 添加评论 - taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(), - BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason())); - // 2.2 更新 task 状态 + 原因 - updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason()); + + if (isAssignUserTask(userId, task)) { // 判断是否分配给自己任务,因为会签任务,一个节点会有多个任务 + // 2.1 添加评论 + taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(), + BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason())); + // 2.2 更新 task 状态 + 原因 + updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason()); + } else { + // 2.3 取消不是分配给自己的任务 + processTaskCanceled(task.getId()); + } + }); // 3. 设置流程变量节点驳回标记:用于驳回到节点,不执行 BpmUserTaskAssignStartUserHandlerTypeEnum 策略。导致自动通过 runtimeService.setVariable(currentTask.getProcessInstanceId(), String.format(PROCESS_INSTANCE_VARIABLE_RETURN_FLAG, reqVO.getTargetTaskDefinitionKey()), Boolean.TRUE); - // 4. 执行驳回 + List runExecutionIdList = convertList(taskList, Task::getExecutionId); runtimeService.createChangeActivityStateBuilder() .processInstanceId(currentTask.getProcessInstanceId()) - .moveActivityIdsToSingleActivityId(returnTaskKeyList, // 当前要跳转的节点列表( 1 或多) - reqVO.getTargetTaskDefinitionKey()) // targetKey 跳转到的节点(1) + .moveExecutionsToSingleActivityId(runExecutionIdList, reqVO.getTargetTaskDefinitionKey()) .changeState(); }