activiti工具类

本文详细介绍了Activiti工作流引擎的一些关键方法,包括部署流程定义、启动流程实例、查询个人任务并推进流程等操作。通过示例代码展示了如何使用ProcessEngine、RuntimeService、HistoryService和RepositoryService等服务进行交互,实现流程实例的管理和控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.activiti;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.bpmn.model.BpmnModel;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.impl.identity.Authentication;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Comment;
import org.activiti.engine.task.Task;
import org.apache.commons.lang.StringUtils;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.web.system.pojo.base.TSUser;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

import com.hdkj.common.util.CommonUtils;

public class ActivitiUtis {

	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	@Autowired
	RuntimeService runtimeService;
	@Autowired
    HistoryService historyService;
	@Autowired
    RepositoryService repositoryService;
	@Autowired
	JdbcTemplate jdbcTemplate;
	
	
	/**部署流程定义(从inputStream)*/
	public Deployment deploymentProcessDefinition_inputStream(){
		Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
				.createDeployment()//创建一个部署对象
				.name("测试")//添加部署的名称
				.addClasspathResource("diagrams/test.bpmn")//从classpath的资源中加载,一次只能加载一个文件
				.addClasspathResource("diagrams/test.png")//从classpath的资源中加载,一次只能加载一个文件
				.deploy();//完成部署
		System.out.println("部署ID:"+deployment.getId());//
		System.out.println("部署名称:"+deployment.getName());//
		return deployment;
	}
	
	/**启动流程实例*/
	public ProcessInstance startProcessInstance(String bussniessKey){
		//流程定义的key
		String processDefinitionKey = "myProcess";
		ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
						//.startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
				.startProcessInstanceByKey(processDefinitionKey, bussniessKey, null);
		System.out.println("流程实例ID:"+pi.getId());//流程实例ID    101
		System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID   helloworld:1:4
		return pi;
	}
	
	/**查询当前人的个人任务并推进下一步(无需审核意见)*/
	public void findMyPersonalTask(String assignee,String processDefinitionId,String processInstanceId){
		TSUser user=ResourceUtil.getSessionUser();
		String username=user.getRealName();
		//String assignee = "普通用户";
		List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
						.createTaskQuery()//创建任务查询对象
						/**查询条件(where部分)*/
						.taskAssignee(assignee)//指定个人任务查询,指定办理人
//						.taskCandidateUser(candidateUser)//组任务的办理人查询
						.processDefinitionId(processDefinitionId)//使用流程定义ID查询
//						.processDefinitionId("myProcess:4:257504")//使用流程定义ID查询
						.processInstanceId(processInstanceId)//使用流程实例ID查询
//						.processInstanceId("260001")//使用流程实例ID查询
//						.executionId(executionId)//使用执行对象ID查询
						/**排序*/
						.orderByTaskCreateTime().asc()//使用创建时间的升序排列
						/**返回结果集*/
//						.singleResult()//返回惟一结果集
//						.count()//返回结果集的数量
//						.listPage(firstResult, maxResults);//分页查询
						.list();//返回列表
		if(list!=null && list.size()>0){
			for(Task task:list){
				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.getProcessInstanceId());
				System.out.println("执行对象ID:"+task.getExecutionId());
				System.out.println("流程定义ID:"+task.getProcessDefinitionId());
				System.out.println("########################################################");
				
				//设置批注人为当前登录人
				Authentication.setAuthenticatedUserId(username);
				//添加批注
				Comment co=processEngine.getTaskService().addComment(task.getId(), processInstanceId, "");
				completeMyPersonalTask1(task.getId());
				
			}
		}
	}
	
	/**查询当前人的个人任务并推进下一步(需审核意见)拒绝专用*/
	public void findMyPersonalTask2(String assignee,String processDefinitionId,String processInstanceId,String message,String refuseReason){
		//String assignee = "普通用户";
		TSUser user=ResourceUtil.getSessionUser();
		String username=user.getRealName();
		List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
						.createTaskQuery()//创建任务查询对象
						/**查询条件(where部分)*/
						.taskAssignee(assignee)//指定个人任务查询,指定办理人
//						.taskCandidateUser(candidateUser)//组任务的办理人查询
						.processDefinitionId(processDefinitionId)//使用流程定义ID查询
//						.processDefinitionId("myProcess:4:257504")//使用流程定义ID查询
						.processInstanceId(processInstanceId)//使用流程实例ID查询
//						.processInstanceId("260001")//使用流程实例ID查询
//						.executionId(executionId)//使用执行对象ID查询
						/**排序*/
						.orderByTaskCreateTime().asc()//使用创建时间的升序排列
						/**返回结果集*/
//						.singleResult()//返回惟一结果集
//						.count()//返回结果集的数量
//						.listPage(firstResult, maxResults);//分页查询
						.list();//返回列表
		if(list!=null && list.size()>0){
			for(Task task:list){
				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.getProcessInstanceId());
				System.out.println("执行对象ID:"+task.getExecutionId());
				System.out.println("流程定义ID:"+task.getProcessDefinitionId());
				System.out.println("########################################################");
				//设置批注人为当前登录人
				Authentication.setAuthenticatedUserId(username);
				//添加批注
				Comment co=processEngine.getTaskService().addComment(task.getId(), processInstanceId, refuseReason);
				completeMyPersonalTask2(task.getId(),message);
			}
		}
	}
	
	/**查询当前人的个人任务并推进下一步(需审核意见)通过专用*/
	public void findMyPersonalTask2(String assignee,String processDefinitionId,String processInstanceId,String message){
		TSUser user=ResourceUtil.getSessionUser();
		String username=user.getRealName();
		//String assignee = "普通用户";
		List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
						.createTaskQuery()//创建任务查询对象
						/**查询条件(where部分)*/
						.taskAssignee(assignee)//指定个人任务查询,指定办理人
//						.taskCandidateUser(candidateUser)//组任务的办理人查询
						.processDefinitionId(processDefinitionId)//使用流程定义ID查询
//						.processDefinitionId("myProcess:4:257504")//使用流程定义ID查询
						.processInstanceId(processInstanceId)//使用流程实例ID查询
//						.processInstanceId("260001")//使用流程实例ID查询
//						.executionId(executionId)//使用执行对象ID查询
						/**排序*/
						.orderByTaskCreateTime().asc()//使用创建时间的升序排列
						/**返回结果集*/
//						.singleResult()//返回惟一结果集
//						.count()//返回结果集的数量
//						.listPage(firstResult, maxResults);//分页查询
						.list();//返回列表
		if(list!=null && list.size()>0){
			for(Task task:list){
				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.getProcessInstanceId());
				System.out.println("执行对象ID:"+task.getExecutionId());
				System.out.println("流程定义ID:"+task.getProcessDefinitionId());
				System.out.println("########################################################");
				//设置批注人为当前登录人
				Authentication.setAuthenticatedUserId(username);
				//添加批注
				Comment co=processEngine.getTaskService().addComment(task.getId(), processInstanceId, "");
				completeMyPersonalTask2(task.getId(),message);
			}
		}
	}
	
	public void completeMyPersonalTask1(String taskId){
		//任务ID
		//String taskId = "247503";
		processEngine.getTaskService()//与正在执行的任务管理相关的Service
					.complete(taskId);
		System.out.println("完成任务:任务ID:"+taskId);
	}
	
	/**完成我的任务,message为通过和不通过*/
	public void completeMyPersonalTask2(String taskId,String message){
		//任务ID
		//String taskId = "252502";
		//完成任务的同时,设置流程变量,使用流程变量用来指定完成任务后,下一个连线,对应sequenceFlow.bpmn文件中${message=='不重要'}
		Map<String, Object> variables = new HashMap<String, Object>();
		//variables.put("message", "通过");
		variables.put("message",message);
		processEngine.getTaskService()//与正在执行的任务管理相关的Service
					.complete(taskId,variables);
		System.out.println("完成任务:任务ID:"+taskId);
	}
	
	/*
	 * 项目用
	 */
	/**部署流程定义(从inputStream)*/
	public Deployment deploymentProcessDefinition_inputStream(String bpmn,String png,String name){
		Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
				.createDeployment()//创建一个部署对象
				.name(name)//添加部署的名称
				.addClasspathResource(bpmn)//从classpath的资源中加载,一次只能加载一个文件
				.addClasspathResource(png)//从classpath的资源中加载,一次只能加载一个文件
				.deploy();//完成部署
		System.out.println("部署ID:"+deployment.getId());//
		System.out.println("部署名称:"+deployment.getName());//
		return deployment;
	}
	
	/**启动流程实例*/
	public ProcessInstance startProcessInstance(String bussniessKey,String processDefinitionKey){
		//流程定义的key
		//String processDefinitionKey = "myProcess";
		ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
						//.startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
				.startProcessInstanceByKey(processDefinitionKey, bussniessKey, null);
		System.out.println("流程实例ID:"+pi.getId());//流程实例ID    101
		System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID   helloworld:1:4
		return pi;
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值