zoukankan      html  css  js  c++  java
  • activiti-组任务

    1.Candidate-users候选人

      1.1 需求

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

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

      1.2 设置任务候选人

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

          

         查看bpmn文件:

          

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

      1.3 办理组任务

        (1)查询组任务

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

        (2)拾取任务

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

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

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

        (3)查询个人任务

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

        (4)办理个人任务

    2.案例

      2.1 创建请假流程图

        

       2.2 部署流程

    package com.wn.group;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    
    /*流程部署*/
    public class Deployment {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象进行流程部署
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
            org.activiti.engine.repository.Deployment deployment= repositoryService.createDeployment()
                    .addClasspathResource("bpmnfile/hoildayGroup.bpmn")       //加载流程文件
                    .addClasspathResource("bpmnfile/hoildayGroup.png")
                    .name("请假流程-组任务审批")   //设置流程名称
                    .key("hoildayGroup-Key")
                    .deploy();//部署
            //输出部署信息
            System.out.println("流程名称:"+deployment.getName());
            System.out.println("流程ID:"+deployment.getId());
            System.out.println("流程key:"+deployment.getKey());
        }
    }

        

      2.3 启动流程实例 

    package com.wn.group;
    
    import com.wn.entity.Hoilday;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RuntimeService;
    import org.activiti.engine.runtime.ProcessInstance;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /*启动流程实例*/
    /*设置流程变量的值*/
    public class StartInstance {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量  启动流程时设置
            Hoilday hoilday=new Hoilday();
            hoilday.setNum(3);
            //定义一个map集合,存放assignee的值
            Map<String ,Object> assMap=new HashMap<>();
            assMap.put("hoilday",hoilday);
            //启动一个流程实例
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("hoildayGroup", assMap);
            System.out.println("流程实例ID:"+processInstance.getId());
        }
    }

        

      2.4 提交任务

    package com.wn.group;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    /*提交任务*/
    public class CommitTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("hoildayGroup").taskAssignee("ting").singleResult();
            //任务处理
            taskService.complete(task.getId());
        }
    }

       2.5 用户查询组任务

    package com.wn.group;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    import java.util.List;
    
    /*查询组任务*/
    public class GetGroupTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            List<Task> list = taskService.createTaskQuery().processDefinitionKey("hoildayGroup").taskCandidateUser("yuan").list();
            for (Task task:list){
                System.out.println("任务ID:"+task.getId());
                System.out.println("任务名称:"+task.getName());
                //没有处理人说明当前任务没有人拾取
                System.out.println("任务处理人:"+task.getAssignee());
            }
        }
    }

        

      2.6 用户拾取组任务

    package com.wn.group;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    /*拾取任务*/
    public class ClaimTask {
        public static void main(String[] args) {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取组任务
            String candidateUser="yuan";
            Task task = taskService.createTaskQuery().processDefinitionKey("hoildayGroup").taskCandidateUser(candidateUser).singleResult();
            //不等于Null代表能够获取到该任务
            if(task!=null){
                //拾取任务   任务ID,任务执行人
                taskService.claim(task.getId(),candidateUser);
                System.out.println("任务被:"+candidateUser+"拾取~");
            }
        }
    }

        

        如果给拾取后,其他候选人是看不见的该任务的;

      2.7 用户查询个人代办任务

    package com.wn.group;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    /*任务处理*/
    public class GetTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取到组任务
            Task task = taskService.createTaskQuery().processDefinitionKey("hoildayGroup").taskAssignee("yuan").singleResult();
            System.out.println(task.getId());
            System.out.println(task.getName());
        }
    }

      2.8 用户办理个人任务

    package com.wn.group;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    /*任务处理*/
    public class GetTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取到组任务
            Task task = taskService.createTaskQuery().processDefinitionKey("hoildayGroup").taskAssignee("yuan").singleResult();
            //处理任务
            if (task!=null){
                taskService.complete(task.getId());
                System.out.println("任务处理成功!");
            }
    /*        System.out.println(task.getId());
            System.out.println(task.getName());*/
        }
    }

        

      2.9 归还组任务

    package com.wn.group;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    /*任务退回*/
    public class TaskReturn {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取到组任务
            String candUser="yuan";
            Task task = taskService.createTaskQuery().processDefinitionKey("hoildayGroup").taskAssignee(candUser).singleResult();
            //不等于NULL代表能够获取到该任务
            if (task!=null){
                //任务退回  任务ID   NULL代表没有人处理,需要后续再次拾取任务
                taskService.setAssignee(task.getId(),null);
                System.out.println("任务退回成功!");
            }
        }
    }

        

      2.10 任务交接

    package com.wn.group;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    /*任务交接*/
    public class TaskReturn {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //获取到组任务
            String candUser="yuan";
            Task task = taskService.createTaskQuery().processDefinitionKey("hoildayGroup").taskAssignee(candUser).singleResult();
            //不等于NULL代表能够获取到该任务
            if (task!=null){//指定任务交接的人
                taskService.setAssignee(task.getId(),"zhu");
                System.out.println("任务交接成功!");
            }
        }
    }

        

  • 相关阅读:
    bzoj3757 苹果树
    bzoj2743 [HEOI2012]采花
    bzoj4241 历史研究
    bzoj4448 [Scoi2015]情报传递
    bzoj3295 [Cqoi2011]动态逆序对
    bzoj4034 [HAOI2015]T2
    bzoj3339 Rmq Problem
    BZOJ 1017 魔兽地图
    BZOJ 1021 循环的债务
    SUOI #37 清点更多船只
  • 原文地址:https://www.cnblogs.com/wnwn/p/12652962.html
Copyright © 2011-2022 走看看