Commit bacf741f77dde727a8733c9ccf5a99117190df16

Authored by YunaiV
1 parent 9922e2fc

临时备份一些想法;主要和任务分配的策略相关

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() + "%");