activiti框架学习笔记

代码中的一些注释存属个人理解,如有错误,可以相互交流

package com.gec.activiti.junit;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

/**
 * 1、常用的服务对象
 *     getRepositoryService
 *     processEngine.getRuntimeService()
 *     processEngine.getTaskService()
 *     processEngine.getHistoryService()
 *     
 * 2、常用的数据表
 * 
 * 	  act_re_deployment  存放部署的信息,如部署id,部署名称,部署时间等
 *    act_re_procdef     存放流程定义的信息
 *    act_ru_execution   流程活动的操作表
 *    act_ru_task        流程活动的任务表
 *    act_hi_procinst    历史流程实例表,记录完成的流程实例的列表
 *    act_hi_taskinst    历史任务实例表,记录完成的流程实例的具体任务
 * @author 小昇 
 *
 *  流程定义和流程实例的联系?
 *  流程定义是一个业务流程的“模型”,流程实例是根据某个流程定义的具体实例。
 *  一个流程定义可以有多个流程实例。
 *
 */
public class HelloProcessTest {

	//ProcessEngines.getDefaultProcessEngine() 会自动的加载activiti.cfg.xml文件,获取数据源,连接数据库
	private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	
	//1、部署流程定义
	@Test
	public void testProcessDefinition(){
		Deployment deployment = processEngine.getRepositoryService()
									.createDeployment()
									.name("hello入门程序")
									.addClasspathResource("diagram/HelloProcess.bpmn")
									.addClasspathResource("diagram/HelloProcess.png")
									.deploy();
		
		System.out.println("部署id:"+deployment.getId());
		System.out.println("部署名称:"+deployment.getName());
		System.out.println("部署时间:"+deployment.getDeploymentTime());
		
	}
	
	//2、启动流程实例
	@Test
	public void testStartProcessInstance(){
		//通过key值,启动一个流程实例
		String key = "HelloProcess";
		ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(key);
		System.out.println("id:"+processInstance.getId());
		System.out.println("流程实例ID:"+processInstance.getProcessInstanceId());
		System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId());
		
	}
	
	//3、查找待办任务   查询个人的待办任务  员工报销
	@Test
	public void testFindTask(){
		//代办人为Jack
		String assignee = "Jack";
		//获得一个任务列表
		List<Task> list = processEngine.getTaskService()
								.createTaskQuery()
								.taskAssignee(assignee)
								.list();
		//查询act_ru_task表
		for(Task task : list){
			System.out.println("任务Id:"+task.getId());
			System.out.println("任务名称:"+task.getName());
			System.out.println("办理人:"+task.getAssignee());
			System.out.println("创建时间:"+task.getCreateTime());
			System.out.println("流程定义ID:"+task.getProcessDefinitionId());
			System.out.println("流程实例ID:"+task.getProcessInstanceId());
			System.out.println("操作对象ID:"+task.getExecutionId());
		}
				
	}
	
	//4、完成个人任务,推进流程到下一个任务点  完成员工报销,流程推进到部门经理审批
	@Test
	public void testFinishedTask(){
		String taskId = "104";
		processEngine.getTaskService().complete(taskId );	
		System.out.println("完成任务..");
	}
	
	//5、部门经理审批
	@Test
	public void testFindTask2(){
		//代办人为Mike
		String assignee = "Mike";
		//获得一个任务列表
		List<Task> list = processEngine.getTaskService()
								.createTaskQuery()
								.taskAssignee(assignee)
								.list();
		//查询act_ru_task表
		for(Task task : list){
			System.out.println("任务Id:"+task.getId());
			System.out.println("任务名称:"+task.getName());
			System.out.println("办理人:"+task.getAssignee());
			System.out.println("创建时间:"+task.getCreateTime());
			System.out.println("流程定义ID:"+task.getProcessDefinitionId());
			System.out.println("流程实例ID:"+task.getProcessInstanceId());
			System.out.println("操作对象ID:"+task.getExecutionId());
		}
				
	}
	
	//6、完成部门经理审批,流程结束
	@Test
	public void testFinishedTask2(){
		String taskId = "202";
		processEngine.getTaskService().complete(taskId );	
		System.out.println("完成任务..");
	}
	//---------------------------------------------
	//activiti中一些常用的业务代码
	//查看流程定义
	@Test
	public void testFindProcessDefinition(){
		List<ProcessDefinition> list = processEngine.getRepositoryService()
									  				.createProcessDefinitionQuery()
									  				.list();
		for(ProcessDefinition fd : list){
			System.out.println("部署id:"+fd.getDeploymentId());
			System.out.println("流程定义Id:"+fd.getId());
			System.out.println("流程定义名称:"+fd.getName());
			System.out.println("版本:"+fd.getVersion());
			System.out.println("-----------------------------");
		}
	}
	
	
	//删除流程定义
	@Test
	public void testDeleteProcessDefinition(){
		String deplymentId = "401";
//		processEngine.getRepositoryService().deleteDeployment(deplymentId);
		//第二个参数为true时:代表,如果流程中还有活动没走完,强制删除这个流程定义,及与它关联的流程实例,任务实例
		processEngine.getRepositoryService().deleteDeployment(deplymentId, true);
		System.out.println("删除完成..");
	}
	
	//查看流程图
	@Test
	public void ViewPic() throws IOException{
		String deploymentId = "1";
		String resourceName = "diagram/HelloProcess.png";
		InputStream is = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
		
		File targetFile = new File("D:/"+resourceName);
		FileUtils.copyInputStreamToFile(is, targetFile);
		System.out.println("复制图片完成...");
	}
	
	//判断流程实例是否结束
	@Test
	public void testProcessInstanceIsEnd(){
		String processInstanceId = "601";
		ProcessInstance pi = processEngine.getRuntimeService()
											.createProcessInstanceQuery()
											.processInstanceId(processInstanceId)
											.singleResult();
		//如果流程实例在运行,act_ru_execution表中会有该流程实例的信息
		//如果act_ru_execution表查不到该流程实例,则返回空,代表已经结束
		if( pi != null){
			System.out.println("流程正在执行...");
		}else{
			System.out.println("流程已结束...");
		}
		
	}
	
	
	//查看历史任务记录(历史流程实例/历史任务实例)
	@Test
	public void testGetHistoryTaskInstance(){
		String assignee = "Jack";
		List<HistoricTaskInstance> list = processEngine.getHistoryService()
														 .createHistoricTaskInstanceQuery()
														 .taskAssignee(assignee)
														 .list();
		for(HistoricTaskInstance hti : list){
			System.out.println("办理人:"+hti.getAssignee());
			System.out.println("任务id:"+hti.getId());
			System.out.println("任务名:"+hti.getName());
			System.out.println("所有者:"+hti.getOwner());
			System.out.println("父任务id:"+hti.getParentTaskId());
			System.out.println("流程定义id:"+hti.getProcessDefinitionId());
			System.out.println("流程实例id:"+hti.getProcessInstanceId());
			System.out.println("-------------------------------------------------------");
		}
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值