activiti5之学习之路,流程实例,任务,执行对象。说明都写在代码里,一看就明白

20 篇文章 0 订阅
package com.ljw.processInstance;

import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

public class ProcessInstanceTest {

	/**
	 * 流程实例,任务,执行对象
	 * 对应数据库表 
	 * act_ru_execution 正在执行的执行对象表(ID_ 执行对象ID,PROC_INST_ID流程实例ID,)
	 * act_hi_procinst 流程实例的历史表 
	 * act_ru_task 正在执行的任务表(只有节点是UserTask的时候,该表中存在数据) 
	 * act_hi_taskinst 任务历史表(只有节点是UserTask的时候,该表中存在数据)
	 * act_hi_actinst 所有活动节点的历史表 结论:
	 * 1,如果是单例流程(没有分支),那么流程ID和执行对象ID是相同的 2,一个流程流程实例只有一个,执行对象可以存在多个(从开始到结束就是一个流程实例)
	 * 
	 * 总结
	 * 1,Excuteion 执行对象
	 * 	按流程定义的规则执行一次的过程
	 * 对应的表:
	 * act_ru_execution 正执行的信息
	 * act_hi_procinst 已经执行完的历史流程实例信息
	 * act_hi_taskinst 存放历史所有完成的活动
	 * 2,ProcessInstance 流程实例
	 *  特定流程从开始到结束的那个最大的分支,一个执行流程中,流程实例只有一个
	 *  
	 *  注意
	 *  (1)如果是单例流程,执行对象ID就是流程对象ID
	 *  (2)如果一个流程有分支和聚合,那么执行对象ID和流程实例ID不相同
	 *  (3)一个流程中,流程实例只有一个,执行对象可以存在多个
	 *  
	 * 3,Task 任务
	 * 执行到某任务环节时生成的任务信息
	 * 对应表
	 * act_ru_task 正在执行的任务信息
	 * act_hi_taskinst 已经执行完的历史任务信息
	 * 
	 */

	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

	// 部署流程定义(classpath)
	@Test
	public void deploymentProcessDefinition_classpath() {
		Deployment deployment = processEngine.getRepositoryService()// 与流程定义和部署对象相关的sevices
				.createDeployment()// 创建一个部署对象
				.name("流程定义")// 添加部署名称
				.addClasspathResource("diagrams/helloworld.bpmn")// 从classpath的资源中加载,一次只能加载一个文件
				.addClasspathResource("diagrams/helloworld.png").deploy();// 完成部署
		System.out.println("部署ID:" + deployment.getId());
		System.out.println("部署名称" + deployment.getName());

	}

	// 启动流程实例
	@Test
	public void deploymentProcessInstance() {
		String key = "helloworld";
		ProcessInstance pi = processEngine.getRuntimeService()// 与正在执行的流程是咧和执行对象相关的services
				.startProcessInstanceByKey(key);// 使用流程定义的key启动流程实例key对呀的helloworld.bnpm文件里的id的属性值
		System.out.println("流程实例ID:" + pi.getId());
		System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
	}

	// 查询当前人的个人任务
	@Test
	public void findMyPersonalTask() {
		String assingnee = "王五";
		List<Task> list = processEngine.getTaskService()// 与正在执行的任务管理相关的services
				.createTaskQuery()// 创建任务查询对象
				/** 查询条件(where部分) */
				.taskAssignee(assingnee)// 指定个人任务查询,指定
//					.taskCandidateUser(candidateUser)//组任务的班里人查询
//					.processDefinitionId(processDefinitionId)//使用流程定义ID查询
//					.processInstanceId(processInstanceId)//使用流程实例额ID查询
//					.executionId(executionId)//使用执行对象ID查询
				/** 排序 */
				.orderByTaskCreateTime().asc()// 创建时间升序排序
				/** 返回结果集 */
//					.singleResult()//返回唯一结果集
//					.count()//返回结果集的数量
//					.listPage(firstResult, maxResults)//分页查询
				.list();
		if (list != null && list.size() > 0) {
			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());
			}
		}
	}

	// 完成我的任务
	@Test
	public void completeMyPersonalTask() {
		// 任务ID
		String taskId = "32502";
		processEngine.getTaskService()// 与正在执行的任务管理相关的services
				.complete(taskId);
		System.out.println("任务完成,任务ID:" + taskId);
	}

	/**
	 * 查询流程状态(判断流程正在执行、结束)
	 */
	@Test
	public void isProcessEnd() {

		String processInstanceId = "32502";
		ProcessInstance pi = processEngine.getRuntimeService()// 表示正在执行的流程实例和执行对象
				.createProcessInstanceQuery()// 创建一个流程实例查询
				.processInstanceId(processInstanceId)// 使用哪个流程实例ID查询
				.singleResult();
		if (pi == null) {
			System.out.println("流程已经结束");
		} else {
			System.out.println("流程没有结束");
		}
	}

	/**
	 * 查询历史任务
	 */
	@Test
	public void fingHistoryTask() {
		String taskAssignee = "张三";
		List<HistoricTaskInstance> list = processEngine.getHistoryService()// 与历史数据(历史表)相关的services
				.createHistoricTaskInstanceQuery()// 创建历史任务实例查询
				.taskAssignee(taskAssignee)// 指定历史任务的办理人
				.list();
		if (list != null && list.size() > 0) {
			for (HistoricTaskInstance historicTaskInstance : list) {
				System.out.println(historicTaskInstance.getId() + "	" + historicTaskInstance.getName() + "	"
						+ historicTaskInstance.getProcessInstanceId() + "	" + historicTaskInstance.getStartTime()
						+ "	" + historicTaskInstance.getEndTime() + "	" + historicTaskInstance.getDurationInMillis());
				System.out.println("##########################################################");
			}
		}
	}

	/** 查询历史流程实例 */
	@Test
	public void findHistoryProcessInstance() {
		String processInstanceId = "27501";
		HistoricProcessInstance hpi = processEngine.getHistoryService()// 与历史数据(历史表)相关的services
				.createHistoricProcessInstanceQuery()// 创建历史流程实例查询
				.processInstanceId(processInstanceId)// 使用流程实例ID查询
				.singleResult();
		System.out.println(hpi.getId() + "	" + hpi.getProcessDefinitionId() + "	" + hpi.getStartTime() + "	"
				+ hpi.getEndTime() + "	" + hpi.getDurationInMillis());

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值