• Activity工作流框架入门(二)API使用DEMO


    工作流API使用Demo

    package activity.demo.test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    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.DeploymentBuilder;
    import org.activiti.engine.repository.DeploymentQuery;
    import org.activiti.engine.repository.ProcessDefinition;
    import org.activiti.engine.repository.ProcessDefinitionQuery;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.runtime.ProcessInstanceQuery;
    import org.activiti.engine.task.Task;
    import org.activiti.engine.task.TaskQuery;
    import org.apache.commons.io.FileUtils;
    import org.junit.Test;
    
    public class ActivitiApiTest {
    	ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
    
    	/**
    	 * 部署流程定义 方式一:加载单个的流程定义文件 方式二:加载zip文件(建议)
    	 * 
    	 * @throws Exception
    	 * 
    	 */
    	@Test
    	public void testDeployProcess() throws Exception {
    		DeploymentBuilder createDeployment = pe.getRepositoryService()
    				.createDeployment();
    		// 方式一:加载单个的流程定义文件
    		/*
    		 * createDeployment.addClasspathResource("bxlc.bpmn");
    		 * createDeployment.addClasspathResource("bxlc.png"); Deployment
    		 * deployment = createDeployment.deploy();
    		 * System.out.println(deployment.getId());
    		 */
    
    		// 方式二:加载zip文件(建议)----zip文件在类路径下
    		/*
    		 * ZipInputStream zipInputStream = new ZipInputStream(this.getClass()
    		 * .getClassLoader().getResourceAsStream("process.zip"));
    		 */
    		// 方式二:加载zip文件(建议)----zip文件不在类路径下
    		ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(
    				new File("e:\process.zip")));
    		createDeployment.addZipInputStream(zipInputStream);
    		createDeployment.name("报销流程");// 指定部署的名称
    		Deployment deployment = createDeployment.deploy();
    		System.out.println(deployment.getId());
    	}
    
    	/**
    	 * 查询部署列表
    	 */
    	@Test
    	public void testQueryDeploymentInfo() {
    		// 部署查询对象----查询部署表act_re_deployment
    		DeploymentQuery query = pe.getRepositoryService()
    				.createDeploymentQuery();
    		query.orderByDeploymenTime().desc();
    		List<Deployment> list = query.list();
    		for (Deployment deployment : list) {
    			String id = deployment.getId();
    			String name = deployment.getName();
    			Date deploymentTime = deployment.getDeploymentTime();
    			System.out.println(id + " " + name + " " + deploymentTime);
    		}
    	}
    
    	/**
    	 * 删除部署信息
    	 */
    	@Test
    	public void testDeleteDeploymentData() {
    		String deploymentId = "301";
    		// 参数一:部署id
    		// 参数二:是否级联删除
    		pe.getRepositoryService().deleteDeployment(deploymentId, true);
    	}
    
    	/**
    	 * 删除流程定义
    	 */
    	@Test
    	public void testDeleteProcessDefinition() {
    		String deploymentId = "101";
    		pe.getRepositoryService().deleteDeployment(deploymentId, true);
    	}
    
    	/**
    	 * 查询流程定义列表(最新版本的流程定义列表)
    	 */
    	@Test
    	public void testQueryProcessDefinition() {
    		ProcessDefinitionQuery query = pe.getRepositoryService()
    				.createProcessDefinitionQuery();
    		query.latestVersion();
    		List<ProcessDefinition> list = query.list();
    		for (ProcessDefinition pd : list) {
    			System.out.println(pd.getId() + " " + pd.getVersion());
    		}
    	}
    
    	/**
    	 * 查询流程定义列表(最新版本的流程定义列表)
    	 */
    	@Test
    	public void testQueryProcessDefinitionList() {
    		ProcessDefinitionQuery query = pe.getRepositoryService()
    				.createProcessDefinitionQuery();
    		// 根据version升序
    		query.orderByProcessDefinitionVersion().asc();
    		List<ProcessDefinition> list = query.list();
    		Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
    		for (ProcessDefinition pd : list) {
    			map.put(pd.getKey(), pd);
    			System.out.println(pd.getId() + " " + pd.getVersion());
    		}
    
    		List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(
    				map.values());
    
    		System.out.println(map);
    	}
    
    	/**
    	 * 查询一次部署对应的流程定义文件名称和输入流
    	 * 
    	 * @throws Exception
    	 */
    	@Test
    	public void testQueryDeloymentFileAndInputstream() throws Exception {
    		String deploymentId = "701";
    		List<String> names = pe.getRepositoryService()
    				.getDeploymentResourceNames(deploymentId);
    		for (String name : names) {
    			System.out.println(name);
    			InputStream in = pe.getRepositoryService().getResourceAsStream(
    					deploymentId, name);
    			File destFile = new File("e:\" + name);// 目标文件
    			FileUtils.copyInputStreamToFile(in, destFile);
    			in.close();
    		}
    	}
    
    	/**
    	 * 查询一次部署对应的png图片的输入流
    	 * 
    	 * @throws Exception
    	 */
    	@Test
    	public void testGetDeploymentPic() throws Exception {
    		String processDefinitionId = "bxlc:1:704";
    		InputStream pngIn = pe.getRepositoryService().getProcessDiagram(
    				processDefinitionId);
    		File destFile = new File("e:\my.png");// 目标文件
    		FileUtils.copyInputStreamToFile(pngIn, destFile);
    	}
    
    	/**
    	 * 启动流程实例 方式一:根据流程定义的id启动 方式二:根据流程定义的key启动(建议)----可以自动选择最新版本的流程定义
    	 */
    	@Test
    	public void testStartProcessInstance() {
    		// 方式一:根据流程定义的id启动
    		// String processDefinitionId = "bxlc:1:704";
    		// ProcessInstance pi =
    		// pe.getRuntimeService().startProcessInstanceById(processDefinitionId
    		// );
    		// System.out.println(pi.getId());
    
    		// 方式二:根据流程定义的key启动(建议)----可以自动选择最新版本的流程定义
    		String processDefinitionKey = "bxlc";
    		ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(
    				processDefinitionKey);
    		System.out.println(pi.getId());
    	}
    
    	/**
    	 * 查询流程实例列表
    	 */
    	@Test
    	public void testQueryProcessInstanceList() {
    		// 流程实例查询对象,查询执行表act_ru_execution
    		ProcessInstanceQuery query = pe.getRuntimeService()
    				.createProcessInstanceQuery();
    		List<ProcessInstance> list = query.list();
    		for (ProcessInstance pi : list) {
    			System.out.println(pi.getActivityId() + " " + pi.getId() + " "
    					+ pi.getProcessDefinitionId());
    		}
    	}
    
    	/**
    	 * 删除流程实例
    	 */
    	@Test
    	public void testDeleteProcessInstance() {
    		String processInstanceId = "1201";// 流程实例id
    		String deleteReason = "不请假了";// 删除原因
    		pe.getRuntimeService().deleteProcessInstance(processInstanceId,
    				deleteReason);
    	}
    
    	/**
    	 * 查询任务列表
    	 */
    	@Test
    	public void testQueryTaskList(){
    		TaskQuery query = pe.getTaskService().createTaskQuery();
    		String assignee = "王五";
    		query.taskAssignee(assignee);
    		query.orderByTaskCreateTime().desc();
    		List<Task> list = query.listPage(0, 6);//分页查询
    		System.out.println(list.size());
    		for (Task task : list) {
    			System.out.println(task.getId());
    		}
    	}
    
    	/**
    	 * 办理任务
    	 */
    	@Test
    	public void testExecuteTask(){
    		String taskId = "1502";
    		pe.getTaskService().complete(taskId );
    	}
    
    }
    



  • 相关阅读:
    HashMap深度解析(二)(转)
    HashMap深度解析(一)(转)
    GeoHash核心原理解析(转)
    spring boot 策略模式实践
    Java中CAS详解(转)
    springMVC请求流程详解(转)
    7 vi 编辑器
    Linux 命令行快捷键
    Java
    3 Eclipse 查看不了源码
  • 原文地址:https://www.cnblogs.com/evan-liang/p/9189592.html
Copyright © 2020-2023  润新知