package com.java1234.activiti.procdef; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; 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.apache.commons.io.FilenameUtils; import org.junit.Test; /** * 查询 流程定义 * @author Administrator * */ public class ProcessDefinitionTest { /** * 获取默认流程引擎实例,默认读取配置文件activiti.cfg.xml */ private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); /** * 全部的流程流程实例和流程版本 */ @Test public void find全部的流程流程实例和流程版本(){ //* act_re_deployment 关联这张表 //查询因此的部署 List<Deployment> deploymentlist= processEngine.getRepositoryService()//获取servi .createDeploymentQuery().list(); System.out.println(deploymentlist); List<ProcessDefinition> processDefinitionlist = processEngine.getRepositoryService().createProcessDefinitionQuery().list(); System.out.println(processDefinitionlist); } /** * 查询流程定义,返回流程定义集合,对应表act_re_procdef */ @Test public void list(){ String processDefinitionKey="myFirstProcess"; List<ProcessDefinition> pdList= processEngine.getRepositoryService()//获取servi .createProcessDefinitionQuery() //建立流程定义查询 .processDefinitionKey(processDefinitionKey) //经过key查询 .list();// for(ProcessDefinition pd:pdList){ System.out.println("ID_:"+pd.getId()); System.out.println("name_:"+pd.getName()); System.out.println("KEY_:"+pd.getKey()); System.out.println("version_:"+pd.getVersion()); System.out.println("-----------"); } /* 管理员查询的时候 ID_:myFirstProcess:1:4 name_:My First process KEY_:myFirstProcess version_:1 ----------- ID_:myFirstProcess:2:5004 name_:My First process KEY_:myFirstProcess version_:2 ----------- */ } /** * 经过ID查询某个流程定义 ,对应表act_re_procdef */ @Test public void getByid(){ String processDefinitionId="myFirstProcess:2:5004"; ProcessDefinition pd= processEngine.getRepositoryService()//获取servi .createProcessDefinitionQuery() //建立流程定义查询 .processDefinitionId(processDefinitionId) //经过key查询 .singleResult(); System.out.println("ID_:"+pd.getId()); System.out.println("name_:"+pd.getName()); System.out.println("KEY_:"+pd.getKey()); System.out.println("version_:"+pd.getVersion()); System.out.println("-----------"); /* ID_:myFirstProcess:2:5004 name_:My First process KEY_:myFirstProcess version_:2 ----------- */ } /** * 根据流程部署id 和 资源流程名称 来查询,资源图片 * @throws IOException */ @Test public void getImageById() throws IOException{ String processDefinitionId="myFirstProcess:2:5004"; InputStream inputStream= processEngine.getRepositoryService()//获取servi .getResourceAsStream("5001", "HelloWorld.png"); //(String deploymentId, String resourceName) // 1. 把图片存放到本地路径/ FileUtils.copyInputStreamToFile( inputStream, new File("d:/1.png") ); } /** * 查询最新流程版本的定义___最高最高的版本 ## 流程定义表- 查询最新版本===查询sql select * from act_re_procdef order by VERSION_ ASC; */ @Test public void findLastVersionDeployment(){ List<ProcessDefinition> pdList= processEngine.getRepositoryService()//获取servi .createProcessDefinitionQuery() //建立流程定义查询 .orderByProcessDefinitionVersion().asc() ///根据流程版本升序; .list();// // 定义有序Map,相同的Key ,加入添加的Map值后者会覆盖 Map<String ,ProcessDefinition> map=new LinkedHashMap<String, ProcessDefinition>(); Map<String ,ProcessDefinition> hsmap=new HashMap<String, ProcessDefinition>(); for(ProcessDefinition pd: pdList){ map.put(pd.getKey(), pd); //插入新的 hsmap.put(pd.getKey(), pd); //测试hashMap } // map.k for(String key : map.keySet() ){ ProcessDefinition pd= map.get(key); System.out.println("ID_:"+pd.getId()); System.out.println("name_:"+pd.getName()); System.out.println("KEY_:"+pd.getKey()); System.out.println("version_:"+pd.getVersion()); System.out.println("-----------"); } System.out.println("edn"); /* ID_:helloworld2:3:12504 name_:My process KEY_:helloworld2 version_:3 ----------- ID_:myFirstProcess:2:5004 name_:My First process KEY_:myFirstProcess version_:2 ----------- */ } /** * 以key查询因此的流程, 而后按id级联删除流程! */ @Test public void deleteByid(){ String processDefinitionKey="helloworld2"; List<ProcessDefinition> pdList= processEngine.getRepositoryService()//获取servi .createProcessDefinitionQuery() //建立流程定义查询 .processDefinitionKey(processDefinitionKey) //根据key查询 .list();// for(ProcessDefinition pd:pdList){ processEngine.getRepositoryService() .deleteDeployment(pd.getDeploymentId(),true); //级联删除 流程 //Deletes the given deployment and cascade deletion to process instances, history process instances and jobs. } System.out.println("end"); } }