Activiti工作流学习笔记入门(四)——流程实例的构建、判断状态、历史流程实例查询和历史活动查询

第一节:构建学生请假审批流程
第二节:执行对象概念
第三节:判断流程实例状态
第四节:历史流程实例查询
第五节:历史活动查询

 

package com.java1234.activiti.flow;

import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricActivityInstance;
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 StudentLeaveProcess {
	
	/**
	 * 获取默认流程引擎实例,会自动读取activiti.cfg.xml文件
	 */
	private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		Deployment deployment = processEngine.getRepositoryService()//获取部署相关Service
				.createDeployment()//创建部署
				.addClasspathResource("diagrams/StudentLeaveProcess.bpmn")//加载资源文件
				.addClasspathResource("diagrams/StudentLeaveProcess.png")//加载资源文件
				.name("学生请假流程")//流程名称
				.deploy();
		System.out.println("流程部署ID:"+deployment.getId());
		System.out.println("流程部署Name:"+deployment.getName());
	}
	
	/**
	 * 启动流程实例
	 */
	@Test
	public void start() {
		ProcessInstance pi = processEngine.getRuntimeService()//运行时Service
				.startProcessInstanceByKey("studentLeaveProcess");//
		System.out.println("流程实例ID:"+pi.getId());
		System.out.println("流程部署Name:"+pi.getProcessDefinitionId());
				
	}
	/**
	 * 查看任务
	 */
	@Test
	public void findTask() {
		String assignee = "学生";
		List<Task> taskList = processEngine.getTaskService()
			.createTaskQuery()
			.taskAssignee(assignee)
			.list();
		for (Task task : taskList) {
			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.getProcessDefinitionId());
		}
	}
	
	/**
	 * 完成任务
	 */
	@Test
	public void completeTask() {
		processEngine.getTaskService()
			.complete("15004");
	}
	/**
	 * 查询流程状态(正在执行or已经执行结束)
	 */
	@Test
	public void processState() {
		ProcessInstance pi = processEngine.getRuntimeService()
			.createProcessInstanceQuery()
			.processInstanceId("15001")
			.singleResult();
		if(pi!=null){
			System.out.println("流程正在执行!");
		}else{
			System.out.println("流程已经执行结束!");
		}
	}
	/**
	 * 历史任务查询
	 */
	@Test
	public void historyTaskList() {
		List<HistoricTaskInstance> list = processEngine.getHistoryService()
				.createHistoricTaskInstanceQuery()
				.processInstanceId("15001")
				.finished()
				.list();
		for (HistoricTaskInstance hti : list) {
			System.out.println("任务ID:"+hti.getId());
			System.out.println("流程实例ID:"+hti.getProcessInstanceId());
			System.out.println("任务名称:"+hti.getName());
			System.out.println("办理人:"+hti.getAssignee());
			System.out.println("开始时间:"+hti.getStartTime());
			System.out.println("结束时间:"+hti.getEndTime());
			System.out.println("=================================");
		}
	}
	
	/**
	 * 历史活动查询
	 */
	@Test
	public void historyActInstantceList() {
		List<HistoricActivityInstance> list = processEngine.getHistoryService()//历史相关Service
				.createHistoricActivityInstanceQuery()//创建历史活动实例查询
				.processInstanceId("15001")//执行流程实例id
				.finished()
				.list();
		for (HistoricActivityInstance hai : list) {
			System.out.println("活动ID:"+hai.getId());
			System.out.println("流程实例ID:"+hai.getProcessInstanceId());
			System.out.println("活动名称:"+hai.getActivityName());
			System.out.println("办理人:"+hai.getAssignee());
			System.out.println("开始时间:"+hai.getStartTime());
			System.out.println("结束时间:"+hai.getEndTime());
			System.out.println("=================================");
		}
	}
}