zoukankan      html  css  js  c++  java
  • Activiti组任务

    一、Candidate-users候选人

    1、需求

      在流程定义中在任务节点的assignee固定设置任务负责人,在流程定义时将参数者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差;

      针对这种情况可以给任务设置多个候选人,可以从候选人中选择参与者来完成任务;

    2、设置任务候选人

      在流程图中任务节点的配置中设置candidate-users(候选人)多个候选人之间用逗号分开;

      

    查看bpmn文件:

      

      可以看到部门经理的审批人已经设置为zhangsan,lisi这样的一组候选人,可以使用activiti:candiateUsers=“用户1,用户2,用户3”这样的方式来设置一组候选人;

    3、办理组任务

      (1)查询组任务

        指定候选人,查询该候选人当前的代办任务;

      (2)拾取任务

        该组任务的所有候选人都能拾取;

        将候选人的组任务,变成个人任务;原来候选人就变成了该任务的负责人;

        如果不想办理该任务,需要将已经拾取的个人任务归还给组里,将个人任务变成组任务;

      (3)查询个人任务

        查询方式同个人任务部分,根据assignee查询用户负责的个人任务;

      (4)办理个人任务

    二、实例展示

    1、创建请假流程图

      

    2、流程部署

    package com.zn;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.Deployment;
    import org.junit.Test;
    
    public class ActivitiGroup {
        /**
         * 流程部署
         */
        @Test
        public void deployment() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象进行流程部署
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("bmpnfiles/holidayGroup.bpmn")     //加载流程文件
                    .addClasspathResource("bmpnfiles/holidayGroup.png")
                    .name("请假流程-组任务")       //设置流程名称
                    .key("holiday")
                    .deploy();                      //部署
    
            //输出部署信息
            System.out.println("流程名称:" + deployment.getName());
            System.out.println("流程ID:" + deployment.getId());
            System.out.println("流程Key:" + deployment.getKey());
        }
    }

    数据库展示:

      

    3、启动流程实例 

    package com.zn;
    
    import com.zn.entity.Holiday;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.RuntimeService;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class ActivitiGroup {
     
        /**
         * 启动流程实例
         */
        @Test
        public void getInstance() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量  启动流程时设置
            Holiday holiday=new Holiday();
            holiday.setNum(3);
            //定义一个map集合,存放assignee的值
            Map<String ,Object> assMap=new HashMap<>();
            assMap.put("holiday",holiday);
            //启动一个流程实例
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayGroup", assMap);
            System.out.println("流程启动成功~");
        }
    }

    数据库展示: 

      

    4、提交任务

    package com.zn;
    
    import com.zn.entity.Holiday;
    import org.activiti.engine.*;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class ActivitiGroup {
    
        /*
         *任务处理
         */
        @Test
        public void completeTask(){
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("xiaowang").singleResult();
            //任务处理
            taskService.complete(task.getId());
        }
    }

    数据库展示: 

      

    5、用户查询组任务

    package com.zn;
    
    import com.zn.entity.Holiday;
    import org.activiti.engine.*;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class ActivitiGroup {
    
        /**
         * 查询组任务
         */
        @Test
        public void getGroupTask(){
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询组任务
            List<Task> list = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskCandidateUser("zhangsan").list();
            for (Task task:list) {
                System.out.println("任务ID:"+task.getId());
                //如果当前不是此任务处理人则处理不了该任务
                /*taskService.complete(task.getId());*/
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务处理人:"+task.getAssignee());    //Null代表 没有处理人说明当前任务没有人拾取
            }
        }
    }

    数据库:

      

    6、用户拾取组任务

    package com.zn;
    
    import com.zn.entity.Holiday;
    import org.activiti.engine.*;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class ActivitiGroup {
    
        /**
         * 拾取任务
         */
        @Test
        public void claimTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取组任务
            String candidateUser="zhangsan";
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskCandidateUser(candidateUser).singleResult();
            //不等于Null代表能够获取到该任务
            if(task!=null){
                //拾取任务   任务ID,任务执行人
                taskService.claim(task.getId(),candidateUser);
                System.out.println("任务被:"+candidateUser+"拾取~");
            }
        }
    }

    数据库:

      

    说明:

      即使该用户不是候选人也能拾取,建议拾取时校验是否有资格组任务拾取后,该任务已有负责人,通过候选人将查询不到该任务

    7、用户查询处理个人代办任务

    package com.zn;
    
    import com.zn.entity.Holiday;
    import org.activiti.engine.*;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class ActivitiGroup {
    
        /**
         * 查看任务
         */
        @Test
        public void getTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("zhangsan").singleResult();
            //处理任务
            if(task!=null){
                taskService.complete(task.getId());
                System.out.println("任务处理完毕");
            }
        }
    }

    数据库:

      

    8、归还组任务

    package com.zn;
    
    import com.zn.entity.Holiday;
    import org.activiti.engine.*;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class ActivitiGroup {
        /**
         * 流程部署
         */
        @Test
        public void deployment() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象进行流程部署
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("bmpnfiles/holidayGroup.bpmn")     //加载流程文件
                    .addClasspathResource("bmpnfiles/holidayGroup.png")
                    .name("请假流程-组任务")       //设置流程名称
                    .key("holiday")
                    .deploy();                      //部署
    
            //输出部署信息
            System.out.println("流程名称:" + deployment.getName());
            System.out.println("流程ID:" + deployment.getId());
            System.out.println("流程Key:" + deployment.getKey());
        }
    
        /**
         * 启动流程实例
         */
        @Test
        public void getInstance() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量  启动流程时设置
            Holiday holiday=new Holiday();
            holiday.setNum(3);
            //定义一个map集合,存放assignee的值
            Map<String ,Object> assMap=new HashMap<>();
            assMap.put("holiday",holiday);
            //启动一个流程实例
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayGroup", assMap);
            System.out.println("流程启动成功~");
        }
    
    
        /*
         *任务处理
         */
        @Test
        public void completeTask(){
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("xiaowang").singleResult();
            //任务处理
            taskService.complete(task.getId());
        }
    
        /**
         * 查询组任务
         */
        @Test
        public void getGroupTask(){
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询组任务
            List<Task> list = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskCandidateUser("zhangsan").list();
            for (Task task:list) {
                System.out.println("任务ID:"+task.getId());
                //如果当前不是此任务处理人则处理不了该任务
                /*taskService.complete(task.getId());*/
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务处理人:"+task.getAssignee());    //Null代表 没有处理人说明当前任务没有人拾取
            }
        }
    
        /**
         * 拾取任务
         */
        @Test
        public void claimTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取组任务
            String candidateUser="zhangsan";
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskCandidateUser(candidateUser).singleResult();
            //不等于Null代表能够获取到该任务
            if(task!=null){
                //拾取任务   任务ID,任务执行人
                taskService.claim(task.getId(),candidateUser);
                System.out.println("任务被:"+candidateUser+"拾取~");
            }
        }
    
        /**
         * 任务退回/交接
         */
        @Test
        public void taskReturn(){
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("zhangsan").singleResult();
    
            if(task!=null){
                //任务退回  任务ID    null代表没有处理人执行,需要后续再次拾取任务
                //任务交接 任务ID     如果第二个参数,处理人不为空代表将该任务交给次处理人
                taskService.setAssignee(task.getId(),null);
                System.out.println("任务退回");
            }
        }
    }

    数据库:

      

    9、任务交接

    package com.zn;
    
    import com.zn.entity.Holiday;
    import org.activiti.engine.*;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class ActivitiGroup {
        /**
         * 流程部署
         */
        @Test
        public void deployment() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象进行流程部署
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("bmpnfiles/holidayGroup.bpmn")     //加载流程文件
                    .addClasspathResource("bmpnfiles/holidayGroup.png")
                    .name("请假流程-组任务")       //设置流程名称
                    .key("holiday")
                    .deploy();                      //部署
    
            //输出部署信息
            System.out.println("流程名称:" + deployment.getName());
            System.out.println("流程ID:" + deployment.getId());
            System.out.println("流程Key:" + deployment.getKey());
        }
    
        /**
         * 启动流程实例
         */
        @Test
        public void getInstance() {
            //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量  启动流程时设置
            Holiday holiday=new Holiday();
            holiday.setNum(3);
            //定义一个map集合,存放assignee的值
            Map<String ,Object> assMap=new HashMap<>();
            assMap.put("holiday",holiday);
            //启动一个流程实例
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayGroup", assMap);
            System.out.println("流程启动成功~");
        }
    
    
        /*
         *任务处理
         */
        @Test
        public void completeTask(){
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("xiaowang").singleResult();
            //任务处理
            taskService.complete(task.getId());
        }
    
        /**
         * 查询组任务
         */
        @Test
        public void getGroupTask(){
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询组任务
            List<Task> list = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskCandidateUser("zhangsan").list();
            for (Task task:list) {
                System.out.println("任务ID:"+task.getId());
                //如果当前不是此任务处理人则处理不了该任务
                /*taskService.complete(task.getId());*/
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务处理人:"+task.getAssignee());    //Null代表 没有处理人说明当前任务没有人拾取
            }
        }
    
        /**
         * 拾取任务
         */
        @Test
        public void claimTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取组任务
            String candidateUser="lisi";
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskCandidateUser(candidateUser).singleResult();
            //不等于Null代表能够获取到该任务
            if(task!=null){
                //拾取任务   任务ID,任务执行人
                taskService.claim(task.getId(),candidateUser);
                System.out.println("任务被:"+candidateUser+"拾取~");
            }
        }
    
        /**
         * 任务交接
         */
        @Test
        public void taskReturnAll(){
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayGroup").taskAssignee("lisi").singleResult();
    
            if(task!=null){
                //任务退回  任务ID    null代表没有处理人执行,需要后续再次拾取任务
                //任务交接 任务ID     如果第二个参数,处理人不为空代表将该任务交给次处理人
                taskService.setAssignee(task.getId(),"zhangsan");
                System.out.println("任务交接成功!");
            }
        }
    }

    数据库:

      

  • 相关阅读:
    iis aspx常见错误 没有对“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files”的写访问权限。
    Windows 下 Apache HTTP Server 安装、配置以及与 Tomcat 的整合(附图)
    Xstudio+Bugzilla
    测试管理工具列表大全
    bitmap详细介绍
    Android学习绘制图形
    PorterDuff.Mode
    盒模型及文本溢出
    css属性继承
    CSS层叠样式
  • 原文地址:https://www.cnblogs.com/Zzzzn/p/12653473.html
Copyright © 2011-2022 走看看