【Flowable | 第四篇】flowable工作流多任务实例节点实现会签/或签

发布于:2024-07-18 ⋅ 阅读:(53) ⋅ 点赞:(0)

在这里插入图片描述

5.flowable工作流多任务实例节点实现会签/或签

5.1会签/或签概念

  1. 我们在本篇中,将使用多任务实例实现会签和或签功能
  2. 会签:多个用户去执行同一个任务,需要全部用户执行完,才会放行
  3. 或签:多个用户去执行同一个任务,只要有一个用户执行完,就可以放行

5.2多实例配置说明

image-20240717221006000

  1. 多任务实例类型:

    1. 无:该节点只会创建一个实例
    2. 串行:表示该任务节点的多个实例需要按照顺序一个接一个地执行(该节点设置的审批人一个提交,下一个审批人收到)
    3. 并行:表示该任务节点的多个实例可以同时执行(该节点设置的审批人可以同时审核)
  2. 集合、变量、完成条件

    1. 集合:有多少个元素,就会创建多少个任务实例(指定用于创建多实例的数据源,通过执行监听器,将候选人添加到流程变量中,再从流程变量中获取

    2. 变量:集合中的每一个元素的命名

    3. 完成条件:会签和或签的完成条件

      1. nrOfCompletedInstances: 完成的任务实例数
      2. nrOfInstances: 总共生成的任务实例数(根据会签、或签指定的人数生成相应的任务数)
      3. nrOfActiveInstance: 未完成实例的数目
      4. loopCounter: 循环计数器,办理人在列表中的索引

      当是或签时,直接固定配置: ${nrOfCompletedInstances>=1} 即可

      当是会签时,固定配置: ${nrOfCompletedInstances==nrOfInstances} 即可

  3. 任务人员分配:${变量名},从多任务实例配置的变量取!

    image-20240717221051285

5.3会签例子

5.3.1用户候选人配置

image-20240717221248751

5.3.2多实例配置

image-20240717221410818

5.3.3执行监听器配置

image-20240717221502846

/**
 * @Author haipeng_lin
 * @Mailbox haipeng_lin@163.com
 * @Date 2024/7/17 22:02
 * @Description 多实例任务监听器
 */
@Component
@Slf4j
public class MultiInstanceListener implements ExecutionListener {
    @Override
    public void notify(DelegateExecution execution) {
        FlowElement element = execution.getCurrentFlowElement();
        if (element instanceof UserTask) {
            UserTask userTask = (UserTask) element;
            List<String> candidateUsers = userTask.getCandidateUsers();

            // 多任务时,每个任务都会执行一次这个监听器,所以更新、插入操作需要小心,避免重复操作
            Object flag = execution.getVariable(userTask.getId().concat("_approverList"));
            if (flag==null) {
                log.info("candidateUsers value: {}", candidateUsers.toString());
                // userTask.getId() 就是节点定义ID,拼上它,可以解决一个流程里面多个审批节点问题
                execution.setVariable(userTask.getId().concat("_approverList"), candidateUsers);
            }
        }
    }
}

5.3.5测试

  1. 发起请假申请流程,查看流程图,同一任务节点有多个实例:

image-20240717222325504

  1. 任意一个组长审批节点 审批提交

    image-20240717222800394

  2. 如图:需要全部节点审批完,才可以到达部门审批节点image-20240717223021146