Activiti7 组任务

时间:2022-07-26
本文章向大家介绍Activiti7 组任务,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

需求:在流程定义中在任务节点的assignee固定设置任务负责人,这种情况不是很好,如果有天任务负责人请假了,你想请假,等着吧..没人审批,针对这种情况,可以给任务设置多个候选人,可以从候选中选择参与者来完成任务

设置候选人:画图

 候选人 采用Candidate Users字段设置 多人使用逗号隔开

画完图之后,部署,然后启动流程实例,提交zhangsan的任务,接下来的看代码注释吧

package com.itheima.test;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

public class ActivitiGroupTest {

    ProcessEngine processEngine;
    TaskService taskService;
    String candidateUser = "lisan";
    static String  KEY = "holiday";

    @Before
    public void init() {
        processEngine = ProcessEngines.getDefaultProcessEngine();
        taskService = processEngine.getTaskService();
    }

    /**
     * 部署流程定义
     */
    @Test
    public void deployment(){

        RepositoryService repositoryService = processEngine.getRepositoryService();

        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("pic/holidayGroup.bpmn")
                .addClasspathResource("pic/holidayGroup.png")
                .name("请假流程")
                .deploy();

        System.out.println(deploy);
    }

    /**
     * 启动流程实例
     */
    @Test
    public void startProcessInstance(){

        RuntimeService runtimeService = processEngine.getRuntimeService();

        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(ActivitiGroupTest.KEY);

        System.out.println(processInstance);

    }

    /**
     * 查询组任务
     */
    @Test
    public void queryGroupTask() {

        queryTaskByCandidateUser(candidateUser, null, false).forEach(task -> {
            System.out.println(task);
        });

    }

    /**
     * 用户拾取组任务
     */
    @Test
    public void claimTask() {

        queryTaskByCandidateUser(candidateUser, null, false).forEach(task -> {
            taskService.claim(task.getId(), candidateUser);
            System.out.println(candidateUser + "用户拾取了[" + task.getName() + "]任务");
        });
    }

    /**
     * 用户归还组任务
     */
    @Test
    public void unClaimTask(){
        queryTaskByCandidateUser(null, candidateUser, true).forEach(task -> {
            taskService.setAssignee(task.getId(),null);
            System.out.println(candidateUser + "用户丢弃了[" + task.getName() + "]任务");
        });
    }

    /**
     * 用户任务交接,委托
     */
    @Test
    public void toAssignee(){
        queryTaskByCandidateUser(null,candidateUser,true).forEach(task -> {
            taskService.setAssignee(task.getId(),"lisi");
            System.out.println(candidateUser+"用户将["+task.getName()+"]任务交接给了lisi用户");
        });
    }

    /**
     * 查询并处理自己的任务
     */
    @Test
    public void queryCompletTask() {

        queryTaskByCandidateUser(null, "lisi", true).forEach(task -> {
            taskService.complete(task.getId());
            System.out.println(candidateUser+"处理了["+task.getName()+"]任务");
        });
    }

    /**
     * 根据候选人查询任务
     *
     * @param candidateUser 候选人
     * @param assignee 指定人
     * @param isAssignee 是否是指定人
     * @return 任务列表
     */
    public List<Task> queryTaskByCandidateUser(String candidateUser, String assignee, Boolean isAssignee) {

        TaskQuery taskQuery = taskService.createTaskQuery().processDefinitionKey(ActivitiGroupTest.KEY);

        if (isAssignee) {
            taskQuery.taskAssignee(assignee);
        } else {
            taskQuery.taskCandidateUser(candidateUser);
        }

        return taskQuery.list();

    }


}

作者:彼岸舞

时间:202096

内容关于:Activiti工作流

本文来源于网络,只做技术分享,一概不负任何责任