Activiti與Spring整合(2)

流程常用操作類

package com.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricIdentityLink;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.IdentityLink;
import org.activiti.engine.task.Task;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
*	@Description: 用於常用的流程操作,引入對應流程操作的Service
*	@Author: LeayLu
*	@Date: 2018年11月16日 上午11:50:50
*	@Version: 1.0
*/
public class FlowUtil {
	
	private static final Logger logger = LoggerFactory.getLogger(FlowUtil.class);
	
	/**
	 * 從classpath路徑下,部署流程定義Zip形式讀取
	 * @param filePath zip壓縮包文件路徑
	 * @param deploymentName 部署名稱
	 */
	public void deploymentProcessDefinitionZip(String filePath,String deploymentName,RepositoryService repositoryService) {
		InputStream in = this.getClass().getClassLoader().getResourceAsStream(filePath);
		ZipInputStream zipInputStream = new ZipInputStream(in);
		Deployment deployment = repositoryService
		 .createDeployment()
		 .name(deploymentName)
		 .addZipInputStream(zipInputStream)
		 .deploy();
		logger.info("流程定義部署成功!");
		logger.info("部署ID  "+deployment.getId());
		logger.info("部署名稱     "+deployment.getName());
	} 
	
	/**
	 * 從classpath讀取資源,部署流程定義
	 * @param dpmnPath dpmn源文件
	 * @param pngPath png文件路徑
	 * @param deploymentName 部署名稱
	 */
	public void deploymentProcessDefinitionBpmnAndPng(String dpmnPath,String pngPath,String deploymentName,RepositoryService repositoryService) {
		Deployment deployment = repositoryService
		 .createDeployment()  
		 .name(deploymentName)   
		 .addClasspathResource(dpmnPath)   
		 .addClasspathResource(pngPath)  
		 .deploy(); 
		logger.info("流程定義部署成功!");
		logger.info("部署ID  "+deployment.getId());
		logger.info("部署名稱     "+deployment.getName());
	}
	
	/**
	 * 根據流程部署的key啓動,按key啓動是按照最新版本啓動
	 * @param processDefinitionKey 流程定義Key
	 */
	public void startProcesssInstance(String processDefinitionKey,RuntimeService runtimeService) {
		ProcessInstance processInstance = runtimeService
		             .startProcessInstanceByKey(processDefinitionKey);
		logger.info("流程啓動成功!");
		logger.info("流程實例ID  "+processInstance.getId());
		logger.info("流程定義ID  "+processInstance.getProcessDefinitionId());
	}
	
	/**
	 * 查詢個人任務,默認按任務創建時間降序
	 * 如需其他排序,自定義
	 * @param assignee 辦理人
	 * @return 返回當前辦理人的所有任務
	 */
	public List<Task> findTask(String assignee,TaskService taskService) {
		List<Task> list = taskService
					 .createTaskQuery()
					 .orderByTaskCreateTime().desc()
					 .taskAssignee(assignee)
					 .list();
		logger.info("個人任務查詢成功!");
		logger.info("查詢結果條數爲    { "+list.size()+" }條");
		return list;
	}
	/**
	 * 查詢組任務任務,默認按任務創建時間降序
	 * 如需其他排序,自定義
	 * @param candidateUser 組任務的候選人
	 * @return 候選人的組任務
	 */
	public List<Task> findGroupTask(String candidateUser,TaskService taskService) {
		List<Task> list = taskService
					 .createTaskQuery()
					 .taskCandidateUser(candidateUser)
					 .orderByTaskCreateTime().desc()
					 .list();
		logger.info("組任務查詢成功!");
		logger.info("查詢結果條數爲    { "+list.size()+" }條");
		return list;
	}
	
	/**
	 * 完成任務
	 * @param taskId 任務id
	 */
	public void completeTask(String taskId,TaskService taskService) {
		taskService.complete(taskId);
		logger.info("完成任務:    任務ID"+taskId);
	}
	/**
	 * 完成任務並傳遞流程變量
	 * @param taskId 任務id
	 * @param variables 流程變量
	 */
	public void completeTask(String taskId,Map<String, Object> variables,TaskService taskService) {
		taskService.complete(taskId, variables);
		logger.info("完成任務:    任務ID"+taskId);
	}
	
	/**
	 * 拾取任務
	 * @param taskId 任務Id
	 * @param userId 辦理人Id
	 */
	public void setAssigees(String taskId,String userId,TaskService taskService) {
		taskService.setAssignee(taskId, userId);
		logger.info("任務拾取成功!");
		logger.info("任務ID  : "+taskId);
		logger.info("辦理人        : "+userId);
	}
	/**
	 * 拾取任務,將組任務分給個人任務,指定任務辦理人字段
	 * @param taskId 任務Id
	 * @param userId 分配的個人任務(可以是組任務中的成員,也可以是非組任務的成員)
	 */
	public void claim(String taskId,String userId,TaskService taskService) {
		taskService.claim(taskId, userId);
	} 
	/**
	 * 向組任務中添加候選人
	 * @param taskId 任務Id
	 * @param userId 候選人Id
	 */
	public void addAssigee(String taskId,String userId,TaskService taskService) {
		taskService.addCandidateUser(taskId, userId);
	} 
	/**
	 * 刪除組任務中的候選人
	 * @param taskId 任務Id
	 * @param userId 候選人Id
	 */
	public void deleteAssigee(String taskId,String userId,TaskService taskService) {
		// 刪除候選人
		taskService.deleteCandidateUser(taskId, userId);
	}
	
	/**
	 * 查詢正在執行的任務辦理人表 
	 * @param taskId 任務Id
	 * @return
	 */
	public List<IdentityLink> findRunPersonTask(String taskId,TaskService taskService) {
		List<IdentityLink> list = taskService
					 .getIdentityLinksForTask(taskId);
		logger.info("正在執行的任務辦理人表,查詢成功");
		logger.info("查詢結果數爲:{"+list.size()+"}條");
		return list;
	}
	/**
	 * 查詢正在執行的任務辦理人表
	 * @param processInstanceId 流程實例Id
	 * @return 
	 */
	public List<HistoricIdentityLink> findHitoryPersonTask(String processInstanceId,HistoryService historyService) {
		List<HistoricIdentityLink> list = historyService
					 .getHistoricIdentityLinksForProcessInstance(processInstanceId);
		logger.info("正在執行的任務辦理人表,查詢成功");
		logger.info("查詢結果數爲:{"+list.size()+"}條");
		return list;
	}
	/**
	 * 刪除流程定義,根據定義的key刪除所有版本
	 * 級聯刪除
	 * 不管流程是否啓動,都能可以刪除
	 * @param processDefinitionKey 流程定義key
	 */
	public void deleteProcessDefinitionByKey(String processDefinitionKey,RepositoryService repositoryService) {
		List<ProcessDefinition> list = repositoryService
					 .createProcessDefinitionQuery() 
					 .processDefinitionKey(processDefinitionKey) //使用流程定義的key查詢
					 .list();
		// 遍歷,獲取每個流程定義的部署ID
		if(list!=null&&list.size()>0) {
			for(ProcessDefinition pd :list) {
				// 獲取部署ID
				String deploymentId = pd.getDeploymentId();
				repositoryService.deleteDeployment(deploymentId, true);
			}
		}
		logger.info("流程的Key爲:  {"+processDefinitionKey+"}的所有版本刪除成功");
	}
	/**
	 * 刪除流程定義,使用部署Id
	 * @param deploymentId
	 */
	public  void deleteProcessDefinition(String deploymentId,RepositoryService repositoryService) {
		repositoryService
					 .deleteDeployment(deploymentId, true);
		logger.info("刪除成功:       部署Id爲"+deploymentId);
	}
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章