1. 程式人生 > >Activiti工作流學習筆記入門(四)——流程例項的構建、判斷狀態、歷史流程例項查詢和歷史活動查詢

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("=================================");
		}
	}
}