Activiti教程(八)activiti的流程节点任务

一.工作流引起整体流程示意图

流程设计--->部署流程定义--->启动流程--->任务签收--->流程结束

流程设计:生成bpmn文件和png图

部署流程定义:生成部署信息 生成流程定义信息 查询部署信息资源文件 查询流程定义信息 删除部署信息  查询流程动作图

启动流程:查询个人流程信息 查询组流程信息 查询部署信息资源文件 查询流程定义信息 

任务签收:查询待办任务信息 查询流程信息 查询流程动作图 

二.部署流程定义想关

package com.lpinfo.activiti.test;

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

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

public class DeploymentTest {
	
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署方式二 基于 helloworld.zip 把bpmn文件和png文件打成zip包部署
	 * getRepositoryService().createDeployment()//创建一个部署对象
	 * getRepositoryService().name("helloworld入门程序")//添加部署的名称
	 * getRepositoryService().addZipInputStream(zipInputStream)//指定zip格式的文件完成部署
	 * getRepositoryService().deploy();
	 */
	@Test
	public void deploymentProcessDefinition_zip(){
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");
		ZipInputStream zipInputStream = new ZipInputStream(in);
		Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
						.createDeployment()//创建一个部署对象
						.name("helloworld入门程序")//添加部署的名称
						.addZipInputStream(zipInputStream)//指定zip格式的文件完成部署
						.deploy();
		System.out.println("流程部署ID:"+deployment.getId());
		System.out.println("流程部署名称 :"+deployment.getName());
	}
	
	/**
	 * ==查询部署的流程
	 * getRepositoryService()//与流程定义和部署对象相关的Service
	 * createProcessDefinitionQuery()//创建一个流程定义的查询
	 * createProcessDefinitionQuery().deploymentId(deploymentId)//使用部署对象ID查询
	 * createProcessDefinitionQuery().processDefinitionId(processDefinitionId)//使用流程定义ID查询
	 * createProcessDefinitionQuery().processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询
	 * createProcessDefinitionQuery().orderByProcessDefinitionVersion().asc()//按照版本的升序排列
	 * createProcessDefinitionQuery().orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列
	 * createProcessDefinitionQuery().list();//返回一个集合列表,封装流程定义
	 * createProcessDefinitionQuery().singleResult();//返回惟一结果集
	 * createProcessDefinitionQuery().count();//返回结果集数量
	 * createProcessDefinitionQuery().listPage(firstResult, maxResults);//分页查询
	 */
	@Test
	public void findProcessDefinition(){
		List<ProcessDefinition> list = processEngine.getRepositoryService()
						.createProcessDefinitionQuery()
						.list();
		if(list!=null && list.size()>0){
			for(ProcessDefinition pd:list){
				System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
				System.out.println("流程定义的名称:"+pd.getName());//对应helloworld.bpmn文件中的name属性值
				System.out.println("流程定义的key:"+pd.getKey());//对应helloworld.bpmn文件中的id属性值
				System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
				System.out.println("资源名称bpmn文件:"+pd.getResourceName());
				System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
				System.out.println("部署对象ID:"+pd.getDeploymentId());
				System.out.println("#########################################################");
			}
		}			
	}
	
	/**
	 * 删除流程定义 
	 * .deleteDeployment(deploymentId); //非级联删除 只能删除未启动的 会有垃圾数据
	 * .deleteDeployment(deploymentId, true); //级联删除 不管流程是否启动,都能可以删除
	 * */
	@Test
	public void deleteProcessDefinition(){
		//使用部署ID,完成删除
		String deploymentId = "601";
		//删除未启动的
		//processEngine.getRepositoryService().deleteDeployment(deploymentId);
		//都可以删除
		processEngine.getRepositoryService().deleteDeployment(deploymentId, true);
	}
	
	
	/**
	 * 查看流程图
	 */
	@Test
	public void viewPic() throws IOException{
		String deploymentId = "801";
		//获取图片资源名称
		List<String> list = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
		//定义图片资源的名称
		String resourceName = "";
		if(list!=null && list.size()>0){
			for(String name:list){
				if(name.indexOf(".png")>=0){
					resourceName = name;
				}
			}
		}
		//获取图片的输入流
		InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, resourceName);
		//将图片生成到D盘的目录下
		File file = new File("D:/"+resourceName);
		//将输入流的图片写到D盘下
		FileUtils.copyInputStreamToFile(in, file);
	}
		
}

三.流程启动和流程实例相关

package com.lpinfo.activiti.test;

import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

public class ProcessInstanceTest {
	
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

	/**
	 * 省略流程部署 参考DeploymentTest.java
	 */
	
	/**
	 * 启动流程实例
	 * startProcessInstanceByKey(processDefinitionKey)
	 * //使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
	 * 
	 * */
	@Test
	public void startProcessInstance(){
		//流程定义的key
		String processDefinitionKey = "helloworld";
		ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
		System.out.println("流程实例ID:"+pi.getId());
		System.out.println("流程定义ID:"+pi.getProcessDefinitionId());
	}	
	
	
	/**
	 * 查询当前人的个人任务
	 * */
	@Test
	public void findMyPersonalTask(){
		String assignee = "王五";
		List<Task> list = processEngine.getTaskService()
						.createTaskQuery()
						/**查询条件(where部分)*/
						.taskAssignee(assignee)//指定个人任务查询,指定办理人
//						.taskCandidateUser(candidateUser)//组任务的办理人查询
//						.processDefinitionId(processDefinitionId)//使用流程定义ID查询
//						.processInstanceId(processInstanceId)//使用流程实例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("########################################################");
			}
		}
	}
	
	/**完成我的任务*/
	@Test
	public void completeMyPersonalTask(){
		//任务ID
		String taskId = "1202";
		processEngine.getTaskService()//与正在执行的任务管理相关的Service
					.complete(taskId);
		System.out.println("完成任务:任务ID:"+taskId);
	}
	
	/**查询流程状态(判断流程正在执行,还是结束)*/
	@Test
	public void isProcessEnd(){
		String processInstanceId = "1001";
		ProcessInstance pi = processEngine.getRuntimeService()//表示正在执行的流程实例和执行对象
						.createProcessInstanceQuery()//创建流程实例查询
						.processInstanceId(processInstanceId)//使用流程实例ID查询
						.singleResult();
		if(pi==null){
			System.out.println("流程已经结束");
		}
		else{
			System.out.println("流程没有结束");
		}
	}
	
	
	/**查询历史任务(后面讲)*/
	@Test
	public void findHistoryTask(){
		String taskAssignee = "张三";
		List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
						.createHistoricTaskInstanceQuery()//创建历史任务实例查询
						.taskAssignee(taskAssignee)//指定历史任务的办理人
						.list();
		if(list!=null && list.size()>0){
			for(HistoricTaskInstance hti:list){
				System.out.println(hti.getId()+"    "+hti.getName()+"    "+hti.getProcessInstanceId()+"   "+hti.getStartTime()+"   "+hti.getEndTime()+"   "+hti.getDurationInMillis());
				System.out.println("################################");
			}
		}
	}
	
	/**查询历史流程实例(后面讲)*/
	@Test
	public void findHistoryProcessInstance(){
		String processInstanceId = "1001";
		HistoricProcessInstance hpi = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
						.createHistoricProcessInstanceQuery()//创建历史流程实例查询
						.processInstanceId(processInstanceId)//使用流程实例ID查询
						.singleResult();
		System.out.println(hpi.getId()+"    "+hpi.getProcessDefinitionId()+"    "+hpi.getStartTime()+"    "+hpi.getEndTime()+"     "+hpi.getDurationInMillis());
	}
	
	
}

 

posted @ 2019-01-18 03:16  蜜獾互联网  阅读(47)  评论(0编辑  收藏  举报  来源