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);
	}
	
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值