Activiti任务分配

霸气de小男生 提交于 2020-02-25 19:20:54

Activiti任务分配

一.个人任务分配

1.个人任务分配方式一(直接指定办理人)

流程图
在这里插入图片描述
流程部署并启动

 /**
     * 发布流程
     * RepositoryService
     */
    @Test
    public void deployProcess() {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
        builder.name("个人任务");//添加部署名称
        builder.addClasspathResource("personalTask1.bpmn");
        builder.addClasspathResource("personalTask1.bpmn");
        Deployment deployment = builder.deploy();
        System.out.println("部署ID:" + deployment.getId());
        System.out.println("部署名称:" + deployment.getName());
    }
     /**
     * 启动流程
     * <p>
     * RuntimeService
     */
    @Test
    public void startProcess() {
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //可根据id、key、message启动流程
        runtimeService.startProcessInstanceByKey("myProcess_person1");
        //       runtimeService.startProcessInstanceById("");
        //      runtimeService.startProcessInstanceByMessage("");
    }

使用办理人(张三)查询任务

    /**
     * 查看任务
     * TaskService
     */
    @Test
    public void queryTask() {
        TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
        String assignee = "张三";
        List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
        int size = tasks.size();
        for (int i = 0; i < size; i++) {
            Task task = tasks.get(i);
        }
        for (Task task : tasks) {
            System.out.println("taskId:" + task.getId());
            System.out.println("taskName:" + task.getName());
            System.out.println("办理人:" + task.getAssignee());
            System.out.println("任务创建时间:" + task.getCreateTime());
            System.out.println("流程实例ID:" + task.getProcessInstanceId());
            System.out.println("执行对象ID:" + task.getExecutionId());
            System.out.println("流程定义ID:" + task.getProcessDefinitionId());
            System.out.println("---------------------------------------------------------------------");
        }
    }

在这里插入图片描述
执行任务

  /**
     * 办理任务
     */
    @Test
    public void handleTask() {
        TaskService taskService = processEngine.getTaskService(); //根据上一步生成的taskId执行任务
        String taskId = "165004";
      /*  Map map=new HashMap();
        map.put("money",800);//选择分支
        taskService.complete(taskId,map);*/
         taskService.complete(taskId);
    }

2.个人任务分配方式二(流程变量)

流程图
在这里插入图片描述
部署流程

    /**
     * 发布流程
     * RepositoryService
     */
    @Test
    public void deployProcess() {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
        builder.name("个人任务");//添加部署名称
        builder.addClasspathResource("personalTask1.bpmn");
        builder.addClasspathResource("personalTask1.bpmn");
        Deployment deployment = builder.deploy();
        System.out.println("部署ID:" + deployment.getId());
        System.out.println("部署名称:" + deployment.getName());
    }

启动流程并设置办理人

   /**
     * 启动流程
     * <p>
     * RuntimeService
     */
    @Test
    public void startProcess() {
        RuntimeService runtimeService = processEngine.getRuntimeService();
         Map map=new HashMap();
        map.put("userName","小白");//这里的userName就是流程图${userName}指定的变量名
        runtimeService.startProcessInstanceByKey("myProcess_personal2",map);
    }

办理人(小白)查询任务

 @Test
    public void queryTask() {
        TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
        String assignee = "小白";
        List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
        int size = tasks.size();
        for (int i = 0; i < size; i++) {
            Task task = tasks.get(i);
        }
        for (Task task : tasks) {
            System.out.println("taskId:" + task.getId());
            System.out.println("taskName:" + task.getName());
            System.out.println("办理人:" + task.getAssignee());
            System.out.println("任务创建时间:" + task.getCreateTime());
            System.out.println("流程实例ID:" + task.getProcessInstanceId());
            System.out.println("执行对象ID:" + task.getExecutionId());
            System.out.println("流程定义ID:" + task.getProcessDefinitionId());
            System.out.println("---------------------------------------------------------------------");
        }
    }

在这里插入图片描述
办理人(小白)执行任务(参照个人任务分配方式一)

3.个人任务分配方式三(类)

编辑类

@SuppressWarnings("serial")
public class TaskListenerImpl implements TaskListener {
    //用来指定任务办理人
    @Override
    public void notify(DelegateTask delegateTask) {
        delegateTask.setAssignee("小黑");
    }
}

流程图
在这里插入图片描述
部署流程并启动

/**
     * 发布流程
     * RepositoryService
     */
   @Test
    public void deployProcess() {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
        builder.name("个人任务");//添加部署名称
        builder.addClasspathResource("personalTask3.bpmn");
        builder.addClasspathResource("personalTask3.png");
        Deployment deployment = builder.deploy();
        System.out.println("部署ID:" + deployment.getId());
        System.out.println("部署名称:" + deployment.getName());
    }
        /**
     * 启动流程
     * <p>
     * RuntimeService
     */
    @Test
    public void startProcess() {
        RuntimeService runtimeService = processEngine.getRuntimeService();
     runtimeService.startProcessInstanceByKey("myProcess_personal3");
    }

办理人(小黑)查询任务

  @Test
    public void queryTask() {
        TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
        String assignee = "小黑";
        List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
        int size = tasks.size();
        for (int i = 0; i < size; i++) {
            Task task = tasks.get(i);
        }
        for (Task task : tasks) {
            System.out.println("taskId:" + task.getId());
            System.out.println("taskName:" + task.getName());
            System.out.println("办理人:" + task.getAssignee());
            System.out.println("任务创建时间:" + task.getCreateTime());
            System.out.println("流程实例ID:" + task.getProcessInstanceId());
            System.out.println("执行对象ID:" + task.getExecutionId());
            System.out.println("流程定义ID:" + task.getProcessDefinitionId());
            System.out.println("---------------------------------------------------------------------");
        }
    }

在这里插入图片描述
办理人(小黑)执行任务(参照个人任务分配方式一)

4.认领任务(可以把任务从一个人转到另一个人)

把小黑的任务转给小蓝
在这里插入图片描述

 @Test
    public  void setAssigneeTask(){
        TaskService taskService = processEngine.getTaskService();
        taskService.setAssignee("190004","小蓝");

    }

在这里插入图片描述

二.组任务分配

1.组任务分配方式一(直接指定办理人)

流程图
组成员之间用英文半角逗号隔开
在这里插入图片描述
部署流程并启动

/**
     * 发布流程
     * RepositoryService
     */
    @Test
    public void deployProcess() {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
        builder.name("组任务");//添加部署名称
        builder.addClasspathResource("groupTask.bpmn");
        builder.addClasspathResource("groupTask.png");
        Deployment deployment = builder.deploy();
        System.out.println("部署ID:" + deployment.getId());
        System.out.println("部署名称:" + deployment.getName());
    }
     /**
     * 启动流程
     * <p>
     * RuntimeService
     */
    @Test
    public void startProcess() {
        RuntimeService runtimeService = processEngine.getRuntimeService();
  runtimeService.startProcessInstanceByKey("myProcess_group");
    }

组成员查询组任务(小张,小李,小王)
组成员都可以查询到任务

 @Test
    public void queryGroupTask() {
        TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
        String assignee = "小李";
        List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(assignee).list();
        int size = tasks.size();
        for (int i = 0; i < size; i++) {
            Task task = tasks.get(i);
        }
        for (Task task : tasks) {
            System.out.println("taskId:" + task.getId());
            System.out.println("taskName:" + task.getName());
            System.out.println("办理人:" + task.getAssignee());
            System.out.println("任务创建时间:" + task.getCreateTime());
            System.out.println("流程实例ID:" + task.getProcessInstanceId());
            System.out.println("执行对象ID:" + task.getExecutionId());
            System.out.println("流程定义ID:" + task.getProcessDefinitionId());
            System.out.println("---------------------------------------------------------------------");
        }
    }

执行任务

  @Test
    public void handleTask() {
        TaskService taskService = processEngine.getTaskService(); //根据上一步生成的taskId执行任务
        String taskId = "207504";
         taskService.complete(taskId);
    }

2.组任务分配方式二(流程变量)

流程图
在这里插入图片描述
部署流程并启动

 /**
     * 发布流程
     * RepositoryService
     */
    @Test
    public void deployProcess() {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
        builder.name("组任务");//添加部署名称
        builder.addClasspathResource("groupTask2.bpmn");
        builder.addClasspathResource("groupTask2.png");
        Deployment deployment = builder.deploy();
        System.out.println("部署ID:" + deployment.getId());
        System.out.println("部署名称:" + deployment.getName());
    }
     /**
     * 启动流程
     * <p>
     * RuntimeService
     */
    @Test
    public void startProcess() {
        RuntimeService runtimeService = processEngine.getRuntimeService();
         Map map=new HashMap();
        map.put("userIds","一一,二二,三三");//这里的userName就是流程图${userName}指定的变量名
        runtimeService.startProcessInstanceByKey("myProcess_group2",map);
       //  runtimeService.startProcessInstanceByKey("myProcess_group");
    }

任务组办理人查询任务

@Test
    public void queryGroupTask() {
        TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
        String assignee = "二二";
        List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(assignee).list();
        int size = tasks.size();
        for (int i = 0; i < size; i++) {
            Task task = tasks.get(i);
        }
        for (Task task : tasks) {
            System.out.println("taskId:" + task.getId());
            System.out.println("taskName:" + task.getName());
            System.out.println("办理人:" + task.getAssignee());
            System.out.println("任务创建时间:" + task.getCreateTime());
            System.out.println("流程实例ID:" + task.getProcessInstanceId());
            System.out.println("执行对象ID:" + task.getExecutionId());
            System.out.println("流程定义ID:" + task.getProcessDefinitionId());
            System.out.println("---------------------------------------------------------------------");
        }
    }

3.组任务分配方式三(类)

编辑类

@SuppressWarnings("serial")
public class GroupTaskListenerImpl implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        delegateTask.addCandidateUser("大大");
        delegateTask.addCandidateUser("小小");
        delegateTask.addCandidateUser("中中");
    }
}

流程图
在这里插入图片描述
部署流程并启动

/**
     * 发布流程
     * RepositoryService
     */
    @Test
    public void deployProcess() {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();//创建部署对象
        builder.name("组任务");//添加部署名称
        builder.addClasspathResource("groupTask3.bpmn");
        builder.addClasspathResource("groupTask3.png");
        Deployment deployment = builder.deploy();
        System.out.println("部署ID:" + deployment.getId());
        System.out.println("部署名称:" + deployment.getName());
    }
      /**
     * 启动流程
     * <p>
     * RuntimeService
     */
    @Test
    public void startProcess() {
        RuntimeService runtimeService = processEngine.getRuntimeService();
        runtimeService.startProcessInstanceByKey("myProcess_group3");
    }

任务组办理人查询任务

@Test
    public void queryGroupTask() {
        TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
        String assignee = "中中";
        List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(assignee).list();
        int size = tasks.size();
        for (int i = 0; i < size; i++) {
            Task task = tasks.get(i);
        }
        for (Task task : tasks) {
            System.out.println("taskId:" + task.getId());
            System.out.println("taskName:" + task.getName());
            System.out.println("办理人:" + task.getAssignee());
            System.out.println("任务创建时间:" + task.getCreateTime());
            System.out.println("流程实例ID:" + task.getProcessInstanceId());
            System.out.println("执行对象ID:" + task.getExecutionId());
            System.out.println("流程定义ID:" + task.getProcessDefinitionId());
            System.out.println("---------------------------------------------------------------------");
        }
    }

4.组任务常用方法

组成员查询组任务

  @Test
    public void queryGroupTask() {
        TaskService taskService = processEngine.getTaskService(); //根据assignee(代理人)查询任务
        String assignee = "小李";
        List<Task> tasks = taskService.createTaskQuery().taskCandidateUser(assignee).list();
        int size = tasks.size();
        for (int i = 0; i < size; i++) {
            Task task = tasks.get(i);
        }
        for (Task task : tasks) {
            System.out.println("taskId:" + task.getId());
            System.out.println("taskName:" + task.getName());
            System.out.println("办理人:" + task.getAssignee());
            System.out.println("任务创建时间:" + task.getCreateTime());
            System.out.println("流程实例ID:" + task.getProcessInstanceId());
            System.out.println("执行对象ID:" + task.getExecutionId());
            System.out.println("流程定义ID:" + task.getProcessDefinitionId());
            System.out.println("---------------------------------------------------------------------");
        }
    }

查询正在执行的组任务成员

    @Test
    public void findGroupUser(){
        String taskId = "207504";
        List<IdentityLink> identityLinksForTask = processEngine.getTaskService()
                           .getIdentityLinksForTask(taskId);
        for (IdentityLink identityLink: identityLinksForTask ) {
      System.out.println(identityLink.getTaskId()+"  "+identityLink.getUserId()+"  "+identityLink.getProcessInstanceId()+"  "+identityLink.getType());
        }
    }

查询历史组任务所有办理人

 @Test
    public void findHistroy(){
        String processInstanceId = "207501";//流程实例ID
        List<HistoricIdentityLink> historicIdentityLinksForProcessInstance = processEngine.getHistoryService()
                .getHistoricIdentityLinksForProcessInstance(processInstanceId);
        for (HistoricIdentityLink historicIdentityLink: historicIdentityLinksForProcessInstance ) {
            System.out.println(historicIdentityLink.getTaskId()+"  "+historicIdentityLink.getUserId()+"  "+historicIdentityLink.getProcessInstanceId()+"  "+historicIdentityLink.getType());

        }
    }

将组任务分配给个人

  @Test
    public void groupTaskToPerson(){
        String userId="马六";
        String taskId = "207504";
        processEngine.getTaskService().claim(taskId,userId);
    }

将个人任务退回给组任务

   @Test
    public void groupTaskToPerson2(){
        String taskId = "207504";
        processEngine.getTaskService().setAssignee(taskId,null);
    }

向组任务中添加(删除)办理人

 @Test
    public void addPersonToGroup(){
        String taskId = "207504";
        String userId="小李";
        //添加
        processEngine.getTaskService()
                 .addCandidateUser(taskId,userId);
        //删除
       processEngine.getTaskService()
               .deleteCandidateUser(taskId,userId);
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!