Commit bacf741f77dde727a8733c9ccf5a99117190df16
1 parent
9922e2fc
临时备份一些想法;主要和任务分配的策略相关
Showing
2 changed files
with
18 additions
and
4 deletions
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 | @@ -37,6 +37,15 @@ import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString | ||
| 37 | 37 | ||
| 38 | /** | 38 | /** |
| 39 | * 自定义的流程任务的 assignee 负责人的分配 | 39 | * 自定义的流程任务的 assignee 负责人的分配 |
| 40 | + * 第一步,获得对应的分配规则; | ||
| 41 | + * 第二步,根据分配规则,计算出分配任务的候选人。如果找不到,则直接报业务异常,不继续执行后续的流程; | ||
| 42 | + * 第三步,情况一,只有一个候选人,则选择一个作为 assignee 负责人,所有人作为 candidateUsers 候选人; | ||
| 43 | + * 情况二,不设置负责人,则所有人作为 candidateUsers 候选人;这样,后续他们可以在【待办任务】列表,进行【签收】动作,然后进行任务的审批。 | ||
| 44 | + * | ||
| 45 | + * 如果计算出来的负责人是一个,则直接设置为该任务的 assignee 负责人; | ||
| 46 | + * 如果是多个,则直接设置为该任务的 assignee 负责人,直接他们所有人为该任务的 candidateUsers 候选人; | ||
| 47 | + * 注意,两者是互斥的。只要任务设置了 assignee,即使设置其他人为 candidateUsers,使用 TaskQuery 的 taskCandidateUser 条件,一样无法查询到任务。 | ||
| 48 | + * 原因是,WHERE 条件在过滤任务时,会额外增加一个 RES.ASSIGNEE_ is null !!! | ||
| 40 | * | 49 | * |
| 41 | * @author 芋道源码 | 50 | * @author 芋道源码 |
| 42 | */ | 51 | */ |
| @@ -70,11 +79,12 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { | @@ -70,11 +79,12 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { | ||
| 70 | protected void handleAssignments(TaskEntityManager taskEntityManager, | 79 | protected void handleAssignments(TaskEntityManager taskEntityManager, |
| 71 | String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, | 80 | String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, |
| 72 | TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) { | 81 | TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) { |
| 73 | - // 获得任务的规则 | 82 | + // 第一步,获得任务的规则 |
| 74 | BpmTaskAssignRuleDO rule = getTaskRule(task); | 83 | BpmTaskAssignRuleDO rule = getTaskRule(task); |
| 75 | - // 获得任务的候选用户们 | 84 | + // 第二步,获得任务的候选用户们 |
| 76 | Set<Long> candidateUserIds = calculateTaskCandidateUsers(task, rule); | 85 | Set<Long> candidateUserIds = calculateTaskCandidateUsers(task, rule); |
| 77 | - // 设置负责人 | 86 | + // 情况一,只有一个 candidateUserIds,则设置负责人 |
| 87 | + if (CollU) | ||
| 78 | Long assigneeUserId = chooseTaskAssignee(candidateUserIds); | 88 | Long assigneeUserId = chooseTaskAssignee(candidateUserIds); |
| 79 | taskEntityManager.changeTaskAssignee(task, String.valueOf(assigneeUserId)); | 89 | taskEntityManager.changeTaskAssignee(task, String.valueOf(assigneeUserId)); |
| 80 | // 设置候选人们 | 90 | // 设置候选人们 |
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 { | @@ -98,7 +98,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 98 | public PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageVO) { | 98 | public PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageVO) { |
| 99 | // 查询待办任务 | 99 | // 查询待办任务 |
| 100 | TaskQuery taskQuery = taskService.createTaskQuery() | 100 | TaskQuery taskQuery = taskService.createTaskQuery() |
| 101 | - .taskAssignee(String.valueOf(userId)) // 分配给自己 | 101 | +// .or() |
| 102 | +// .taskAssignee(String.valueOf(userId)) // 分配给自己 | ||
| 103 | +// .taskCandidateOrAssigned(String.valueOf(userId)) | ||
| 104 | + .taskCandidateUser(String.valueOf(userId)) | ||
| 105 | +// .endOr() | ||
| 102 | .orderByTaskCreateTime().desc(); // 创建时间倒序 | 106 | .orderByTaskCreateTime().desc(); // 创建时间倒序 |
| 103 | if (StrUtil.isNotBlank(pageVO.getName())) { | 107 | if (StrUtil.isNotBlank(pageVO.getName())) { |
| 104 | taskQuery.taskNameLike("%" + pageVO.getName() + "%"); | 108 | taskQuery.taskNameLike("%" + pageVO.getName() + "%"); |