1. 程式人生 > >Activiti_抽取工具類

Activiti_抽取工具類

BaseBpmn.java

package base;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ExecutionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceQuery;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;

public class BaseBpmn {
	// 獲取核心物件 服務大管家
	protected ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
	// 獲取執行的service服務
	protected RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
	// 獲取TaskService
	protected TaskService taskService = defaultProcessEngine.getTaskService();

	/**
	 * 部署檔案
	 * 
	 * @param resource
	 * @param name
	 */
	public void deploy(String resource, String name) {
		// 獲取核心物件 服務大管家
		// 獲取服務
		RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
		// 部署物件
		DeploymentBuilder createDeployment = repositoryService.createDeployment();
		// 上傳資源
		InputStream inputStream = this.getClass().getResourceAsStream(resource + ".bpmn");
		InputStream inputStream2 = this.getClass().getResourceAsStream(resource + ".png");
		createDeployment.addInputStream(resource + ".bpmn", inputStream);
		createDeployment.addInputStream(resource + ".png", inputStream2);
		createDeployment.name(name);
		// 部署
		createDeployment.deploy();
	}

	/**
	 * 啟動例項帶流程變數
	 */
	public ProcessInstance start(String key, Map<String, Object> variables) {
		// 啟動
		// 設定一下變數
		ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey(key, variables);
		return startProcessInstanceByKey;
	}

	/**
	 * 啟動例項帶流程變數
	 */
	public ProcessInstance start(String key) {
		// 啟動
		// 設定一下變數
		ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey(key);
		return startProcessInstanceByKey;
	}

	/**
	 * 完成任務 帶流程變數 方便流轉到下以個節點
	 */
	public void compleTask(String taskId, Map<String, Object> variables) throws Exception {
		taskService.complete(taskId, variables);
	}

	/**
	 * 完成任務
	 */
	public void compleTask(String taskId) throws Exception {
		taskService.complete(taskId);
	}

	/**
	 * 完成任務 例項id 和 人的名稱
	 */
	public void compleTaskByPIdAndName(String pid, String name) throws Exception {
		// 獲取查詢物件
		TaskQuery createTaskQuery = taskService.createTaskQuery();
		// 獲取任務id
		Task task = createTaskQuery.processInstanceId(pid).taskAssignee(name).singleResult();
		// 完成
		taskService.complete(task.getId());
	}

	/**
	 * 完成任務 例項id 和 人的名稱
	 */
	public void compleTaskByPIdAndName(String pid, String name, Map<String, Object> variables) throws Exception {
		// 獲取查詢物件
		TaskQuery createTaskQuery = taskService.createTaskQuery();
		// 獲取任務id
		Task task = createTaskQuery.processInstanceId(pid).taskAssignee(name).singleResult();
		// 完成
		taskService.complete(task.getId(), variables);
	}

	/**
	 * 查詢某個人的任務列表
	 */
	public List<Task> queryTaskList(String name) throws Exception {
		// 獲取查詢物件
		TaskQuery createTaskQuery = taskService.createTaskQuery();
		// 設定查詢條件
		createTaskQuery.taskAssignee(name);
		// 查詢列表
		List<Task> list = createTaskQuery.list();
		return list;
	}

	/**
	 * 查詢某個人的當前任務
	 */
	public Task queryTaskByName(String pid, String name) throws Exception {
		// 獲取查詢物件
		TaskQuery createTaskQuery = taskService.createTaskQuery();
		// 設定查詢條件
		createTaskQuery.taskAssignee(name);
		createTaskQuery.processInstanceId(pid);
		//
		Task task = createTaskQuery.singleResult();
		return task;
	}

	/**
	 * 查詢當前執行物件(當前活動節點)
	 */
	public Execution queryExcution(String pid, String actid) throws Exception {
		// 獲取查詢物件
		ExecutionQuery createExecutionQuery = runtimeService.createExecutionQuery();
		// 設定查詢條件
		Execution execution = createExecutionQuery.processInstanceId(pid).activityId(actid).singleResult();
		// 返回
		return execution;
	}

	// 查詢流程是否結束
	public void isEnd(String pid) {
		// 查詢物件
		ProcessInstanceQuery createProcessInstanceQuery = runtimeService.createProcessInstanceQuery();
		// 根據id
		ProcessInstance singleResult = createProcessInstanceQuery.processInstanceId(pid).singleResult();
		// 如果singleResult找到說明流程還沒有結束
		if (singleResult != null) {
			System.out.println("流程未結束或不存在");
		} else {
			System.out.println("流程結束");
		}

	}

}