"Activiti Workflow Framework" Topic (6)-Activiti Workflow Framework Task Type

1. Personal tasks

It is handled by a certain one, and recorded in the assignment table through the assignee field

2. Common tasks (group tasks)

The current task can be handled by multiple persons, and multiple persons can be designated when designing the flowchart.
Insert picture description here
Test:

/*
 * 公共任务测试
 */
public class PublicTask {
    
    
	
	ProcessEngine pe=null;

	@Before
	public void init(){
    
    
		pe = ProcessEngines.getDefaultProcessEngine();
	}
	
	/**
	 * 01-部署流程定义
	 */
	@Test
	public void test1(){
    
    
		DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
		deploymentBuilder.addClasspathResource("Demo.bpmn");
		deploymentBuilder.addClasspathResource("Demo.png");
		Deployment deployment = deploymentBuilder.deploy();
		System.out.println("流程定义部署成功...");
	}
	
	/**
	 * 02-查询流程定义列表
	 */
	@Test
	public void test2() {
    
    
		// 流程定义查询对象,用于查询表act_re_procdef
		ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
		// 添加排序条件
		query.orderByProcessDefinitionVersion().desc();
		// 添加分页查询
		query.listPage(0, 10);
		List<ProcessDefinition> list = query.list();
		for (ProcessDefinition pd : list) {
    
    
			System.out.println(pd.getId() + "--" + pd.getName()+"--key:"+pd.getKey());
		}
	}
	
	/**
	 * 03-启动流程实例
	 */
	@Test
	public void test3(){
    
    
		String processDefinitionId="myProcess:1:60004";
		pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
		System.out.println("流程实例定义成功.....");
	}
	
	/**
	 * 04-办理个人任务
	 */
	@Test
	public void test4(){
    
    
		String taskId="62504";
		pe.getTaskService().complete(taskId);
		System.out.println("任务办理成功....");
	}
	
	/**
	 * 05-查询公共任务列表
	 */
	@Test
	public void test5(){
    
    
		TaskQuery query = pe.getTaskService().createTaskQuery();
		//根据候选人过滤
		String candidateUser="小黑";
		query.taskCandidateUser(candidateUser);
		List<Task> list = query.list();
		for (Task task : list) {
    
    
			System.out.println(task.getName()+"----"+task.getId());
		}
	}
	
	/**
	 * 06-拾取任务(将公共任务变为个人任务)
	 */
	@Test
	public void test6(){
    
    
		String userId="小黑";
		String taskId="65002";
		pe.getTaskService().claim(taskId, userId);
		System.out.println("任务拾取成功..");
	}
	
	/**
	 * 07-查询个人任务列表
	 */
	@Test
	public void test7() {
    
    
		TaskQuery query = pe.getTaskService().createTaskQuery();
		String assignee = "小黑";
		query.taskAssignee(assignee);
		List<Task> list = query.list();
		for (Task task : list) {
    
    
			System.out.println("待办任务ID:"+task.getId());
			System.out.println("待办任务名称:"+task.getName());
			System.out.println("任务创建时间:"+task.getCreateTime());
			System.out.println("任务办理人:"+task.getAssignee());
			System.out.println("流程实例ID:"+task.getProcessInstanceId());
			System.out.println("执行对象ID:"+task.getExecutionId());
			System.out.println("流程定义ID:"+task.getProcessDefinitionId());
		}
	}
		
	/**
	 * 08-办理任务
	 */
	@Test
	public void test9(){
    
    
		String taskId= "65002";
		pe.getTaskService().complete(taskId);
		System.out.println("办理完成,任务ID是:"+taskId);
	}
}

3. Receiving task

The receiving task is not handled by a certain person, and the process is executed through the signal method
Insert picture description here

/**
 * 接受任务测试
 */
public class ReceiveTaskTest {
    
    

	ProcessEngine pe=null;

	@Before
	public void init(){
    
    
		pe = ProcessEngines.getDefaultProcessEngine();
	}
	
	/**
	 * 01-部署流程定义
	 */
	@Test
	public void test1(){
    
    
		DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
		deploymentBuilder.addClasspathResource("Demo1.bpmn");
		deploymentBuilder.addClasspathResource("Demo1.png");
		Deployment deployment = deploymentBuilder.deploy();
		System.out.println("流程定义部署成功...");
	}
	
	/**
	 * 02-查询流程定义列表
	 */
	@Test
	public void test2() {
    
    
		// 流程定义查询对象,用于查询表act_re_procdef
		ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
		// 添加排序条件
		query.orderByProcessDefinitionVersion().desc();
		// 添加分页查询
		query.listPage(0, 10);
		List<ProcessDefinition> list = query.list();
		for (ProcessDefinition pd : list) {
    
    
			System.out.println(pd.getId() + "--" + pd.getName()+"--key:"+pd.getKey());
		}
	}
	
	/**
	 * 03-启动流程实例
	 */
	@Test
	public void test3(){
    
    
		String processDefinitionId="myProcess:2:75004";
		pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
		System.out.println("流程实例定义成功.....");
	}
	
	/**
	 * 04-办理任务
	 */
	@Test
	public void test4(){
    
    
		String taskId = "77504";
		pe.getTaskService().complete(taskId );
	}
	
	/**
	 * 05-查询流程实例列表,查询act_ru_execution表
	 */
	@Test
	public void test9() {
    
    
		// 流程实例查询对象,查询act_ru_execution表
		ProcessInstanceQuery query = pe.getRuntimeService().createProcessInstanceQuery();
		query.processDefinitionKey("myProcess");
		query.orderByProcessInstanceId().desc();
		query.listPage(0, 2);
		List<ProcessInstance> list = query.list();
		for (ProcessInstance pi : list) {
    
    
			System.out.println(pi.getId() + " " + pi.getActivityId());
		}
	}
	
	/**
	 * 06-处理接收任务
	 */
	@Test
	public void test5(){
    
    
		String executionId = "77501";
		pe.getRuntimeService().signal(executionId);
	}
}

4. Receive task case

The receive task (ReceiveTask) is the waiting task, and the receive task is a simple task that waits for the arrival of the corresponding message. Currently, the official only implements

The java semantics of this task. When the process reaches the receiving task, the process state will be saved in the database. After the task is created, it means that the process will enter and wait

Wait until the engine receives a specific message, which will trigger the process to continue execution through the receiving task.

Flow chart
Insert picture description here
demonstration

package cn.gome.j_receiveTask;
 
import java.io.InputStream;
 
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;
 
public class ReceiveTaskTest {
    
    
	
	//流程引擎对象
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	
	/**部署流程定义+启动流程实例*/
	@Test
	public void deployementAndStartProcess(){
    
    
		InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn");
		InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png");
		
		//1.部署流程定义
		Deployment deployment = processEngine.getRepositoryService()
				.createDeployment()//创建部署对象
				.addInputStream("receiveTask.bpmn", inputStreamBpmn)
				.addInputStream("receiveTask.png", inputStreamPng)
				.deploy();
		System.out.println("部署ID:" + deployment.getId());
		
		//2.启动流程实例
		ProcessInstance pi = processEngine.getRuntimeService()
				.startProcessInstanceByKey("receiveTask");//使用流程定义的key的最新版本启动流程
		System.out.println("流程实例ID:"+pi.getId());
		System.out.println("流程定义ID:"+pi.getProcessDefinitionId());
		
		//3.查询执行对象表,使用流程实例ID和当前活动的名称(receivetask1)
		String processInstanceId = pi.getId();//得到流程实例ID
		Execution execution1 = processEngine.getRuntimeService()
				.createExecutionQuery()
				.processInstanceId(processInstanceId)//流程实例ID
				.activityId("receivetask1")//当前活动的名称
				.singleResult();
		
		//4.使用流程变量设置当日的销售额
		processEngine.getRuntimeService().setVariable(execution1.getId(), "当日销售额", 20000);
		
		//5.向后执行一步
		processEngine.getRuntimeService()
			.signal(execution1.getId());
		
		//6.查询执行对象表,使用流程实例ID和当前活动的名称(receivetask2)
		Execution execution2 = processEngine.getRuntimeService()
				.createExecutionQuery()
				.processInstanceId(processInstanceId)
				.activityId("receivetask2")
				.singleResult();
		
		//7.获取流程变量,给老板发送短信
		Integer value = (Integer) processEngine.getRuntimeService()
				.getVariable(execution2.getId(), "当日销售额");
		System.out.println("给老板发送短信:内容,当日销售额:"+value);
		
		//8.向后执行一步
		processEngine.getRuntimeService()
				.signal(execution2.getId());
		
		//9.判断流程是否结束
		ProcessInstance nowPi = processEngine.getRuntimeService()
				.createProcessInstanceQuery()
				.processInstanceId(pi.getId())
				.singleResult();
		if(nowPi == null){
    
    
			System.out.println("流程结束");
		}
	}

}

Note: Different from the UserTask, after the ReceiveTask is created, it enters a waiting state, which generally refers to the automatic completion of the machine, but it takes a certain amount of time to work. When the work is completed, the process goes backward. , In the above code, it is to perform one step down, use runtimeService.signal(executionId), and pass the id of the receiving execution object.

Guess you like

Origin blog.csdn.net/BruceLiu_code/article/details/113643655