From bacf741f77dde727a8733c9ccf5a99117190df16 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 15 Jan 2022 23:37:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E5=A4=87=E4=BB=BD=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E6=83=B3=E6=B3=95=EF=BC=9B=E4=B8=BB=E8=A6=81=E5=92=8C?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=88=86=E9=85=8D=E7=9A=84=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../behavior/BpmUserTaskActivitiBehavior.java | 16 +++++++++++++--- .../service/task/impl/BpmTaskServiceImpl.java | 6 +++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java index 48fcb9d9c..4426e4050 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java @@ -37,6 +37,15 @@ import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString /** * 自定义的流程任务的 assignee 负责人的分配 + * 第一步,获得对应的分配规则; + * 第二步,根据分配规则,计算出分配任务的候选人。如果找不到,则直接报业务异常,不继续执行后续的流程; + * 第三步,情况一,只有一个候选人,则选择一个作为 assignee 负责人,所有人作为 candidateUsers 候选人; + * 情况二,不设置负责人,则所有人作为 candidateUsers 候选人;这样,后续他们可以在【待办任务】列表,进行【签收】动作,然后进行任务的审批。 + * + * 如果计算出来的负责人是一个,则直接设置为该任务的 assignee 负责人; + * 如果是多个,则直接设置为该任务的 assignee 负责人,直接他们所有人为该任务的 candidateUsers 候选人; + * 注意,两者是互斥的。只要任务设置了 assignee,即使设置其他人为 candidateUsers,使用 TaskQuery 的 taskCandidateUser 条件,一样无法查询到任务。 + * 原因是,WHERE 条件在过滤任务时,会额外增加一个 RES.ASSIGNEE_ is null !!! * * @author 芋道源码 */ @@ -70,11 +79,12 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { protected void handleAssignments(TaskEntityManager taskEntityManager, String assignee, String owner, List candidateUsers, List candidateGroups, TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) { - // 获得任务的规则 + // 第一步,获得任务的规则 BpmTaskAssignRuleDO rule = getTaskRule(task); - // 获得任务的候选用户们 + // 第二步,获得任务的候选用户们 Set candidateUserIds = calculateTaskCandidateUsers(task, rule); - // 设置负责人 + // 情况一,只有一个 candidateUserIds,则设置负责人 + if (CollU) Long assigneeUserId = chooseTaskAssignee(candidateUserIds); taskEntityManager.changeTaskAssignee(task, String.valueOf(assigneeUserId)); // 设置候选人们 diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java index 9c9e4f1ef..88c5ea1aa 100644 --- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java +++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java @@ -98,7 +98,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { public PageResult getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageVO) { // 查询待办任务 TaskQuery taskQuery = taskService.createTaskQuery() - .taskAssignee(String.valueOf(userId)) // 分配给自己 +// .or() +// .taskAssignee(String.valueOf(userId)) // 分配给自己 +// .taskCandidateOrAssigned(String.valueOf(userId)) + .taskCandidateUser(String.valueOf(userId)) +// .endOr() .orderByTaskCreateTime().desc(); // 创建时间倒序 if (StrUtil.isNotBlank(pageVO.getName())) { taskQuery.taskNameLike("%" + pageVO.getName() + "%");