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

This commit is contained in:
YunaiV 2022-01-15 23:37:42 +08:00
parent 9922e2fcf2
commit bacf741f77
2 changed files with 18 additions and 4 deletions

View File

@ -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<String> candidateUsers, List<String> candidateGroups,
TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) {
// 获得任务的规则
// 第一步获得任务的规则
BpmTaskAssignRuleDO rule = getTaskRule(task);
// 获得任务的候选用户们
// 第二步获得任务的候选用户们
Set<Long> candidateUserIds = calculateTaskCandidateUsers(task, rule);
// 设置负责人
// 情况一只有一个 candidateUserIds则设置负责人
if (CollU)
Long assigneeUserId = chooseTaskAssignee(candidateUserIds);
taskEntityManager.changeTaskAssignee(task, String.valueOf(assigneeUserId));
// 设置候选人们

View File

@ -98,7 +98,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
public PageResult<BpmTaskTodoPageItemRespVO> 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() + "%");