1. //当流程执行完成后,以下表的数据会清空,历史表会添加这些数据
  2. // -- 运行时流程执行实例
  3. // select * from act_ru_execution;
  4. // -- 运行时参与人员与节点关系表
  5. // select * from act_ru_identitylink;
  6. // -- 运行时任务节点表
  7. // select * from act_ru_task;
  8. // -- 运行是任务参数表
  9. // SELECT * from act_ru_variable;
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
    <process id="myProcess_task_claim" name="processName" isExecutable="true">
        <startEvent id="starteventId" name="开始"></startEvent>
        <userTask id="usertaskId" name="usertaskName"
                  activiti:candidateUsers="bajie,wukong,xiaoMing"></userTask>
        <endEvent id="endeventId" name="End"></endEvent>
        <sequenceFlow sourceRef="starteventId" targetRef="usertaskId"/>
        <sequenceFlow sourceRef="usertaskId" targetRef="endeventId"/>
    </process>
</definitions>

查询我的拾取任务,activiti7与activiti6以前不同

activiti7这样写是会报错的,因为activit7加入了安全框架


    /**
     * 拾取任务
     * 候选人:谁先拾取这个任务,谁就是任务执行人/代理人
     */
    @Test
    public void claimTask(){
        //查询我的拾取任务,activiti6以前这样写是没有问题的,
        // activiti7这样写是会报错的,因为activit7加入了安全框架
//        Task task = taskService.createTaskQuery()
//                .taskCandidateUser("bajie").singleResult();
//        System.out.println(task);
    }

拾取任务

    /**
     * 拾取任务
     * 候选人:谁先拾取这个任务,谁就是任务执行人/代理人
     */
    @Test
    public void claimTask(){
        //根据taskId拾取任务
        String userId="bajie";
        Task task = taskService.createTaskQuery().taskId("d163c7c0-2111-11eb-8532-603a7c6bd5e8").singleResult();
        taskService.claim(task.getId(),userId);
        System.out.println(userId + "任务拾取成功!!");
    }

归还任务与交办任务

   /**
     * 归还任务与交办任务
     * 如果我拾取了,后来我有不想做了,就可以用归还任务
     */
    public void unClaimTask(){
        Task task = taskService.createTaskQuery().taskId("d163c7c0-2111-11eb-8532-603a7c6bd5e8").singleResult();
        //将执行人设置为null,就相当于归还了
        //taskService.setAssignee(task.getId(),null); //归还任务
        taskService.setAssignee(task.getId(),"wukong"); //交办任务
    }

整体java源码

package com.torey.activiti7_workflow;

import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class Part4_Task {
    @Autowired
    private TaskService taskService;
    /**
     * 当流程实例创建了之后,就会有任务节点
     * 所有任务查询,一般管理员用
     */
    @Test
    public void getTask(){
        List<Task> list = taskService.createTaskQuery().list();
        for (Task task : list) {
            System.out.println(":"+task.getId());
            System.out.println("taskName:"+task.getName());
            System.out.println("执行人:"+task.getAssignee());
        }
    }

    /**
     * 查询我的代办任务
     */
    @Test
    public void getTaskByAssignee(){
        List<Task> taskList = taskService.createTaskQuery()
                .taskAssignee("wuKong").list();
        for (Task task : taskList) {
            System.out.println("id:"+task.getId());
            System.out.println("taskName:"+task.getName());
            System.out.println("执行人:"+task.getAssignee());
        }
    }

    /**
     * 执行任务
     */
    @Test
    public void completeTask(){
        String assignee="wuKong";
        List<Task> taskList = taskService.createTaskQuery()
                .taskAssignee(assignee).list();
        if (null==taskList ||taskList.size()==0) {
            System.out.println("不存在该执行人" + assignee);
            return;
        }
        System.out.println(assignee+"的任务有"+taskList.size()+"个");
        for (Task task : taskList) {
            taskService.complete(task.getId());
        }
        taskList = taskService.createTaskQuery()
                .taskAssignee(assignee).list();
        System.out.println(assignee+"的任务执行完成,任务有"+taskList.size()+"个");

    }


    /**
     * 拾取任务
     * 候选人:谁先拾取这个任务,谁就是任务执行人/代理人
     */
    @Test
    public void claimTask(){
        //根据taskId拾取任务
        String userId="bajie";
        Task task = taskService.createTaskQuery().taskId("d163c7c0-2111-11eb-8532-603a7c6bd5e8").singleResult();
        taskService.claim(task.getId(),userId);
        System.out.println(userId + "任务拾取成功!!");
    }

    /**
     * 归还任务与交办任务
     * 如果我拾取了,后来我有不想做了,就可以用归还任务
     */
    public void unClaimTask(){
        Task task = taskService.createTaskQuery().taskId("d163c7c0-2111-11eb-8532-603a7c6bd5e8").singleResult();
        //将执行人设置为null,就相当于归还了
        //taskService.setAssignee(task.getId(),null); //归还任务
        taskService.setAssignee(task.getId(),"wukong"); //交办任务
    }
}