package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.LinkedHashMap; 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.ProcessDefinition; import org.apache.commons.io.FileUtils; import org.junit.Test; public class ProcessDefinitionTest { ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /* *部署流程定義 (從classpath) */ @Test public void deploymentProcessDefinition_classpath(){ Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service .createDeployment()//創建一個部署對象 .name("流程定義")//添加部署名稱 .addClasspathResource("diagrams/HelloWorld.bpmn")//從classpath的資源中加載,一次只能加載一個文件 .addClasspathResource("diagrams/HelloWorld.png") .deploy();//完成部署 System.out.println("部署ID:"+deployment.getId()); System.out.println("部署名稱:"+deployment.getName()); } /* *部署流程定義 (從zip) */ @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("流程定義")//添加部署名稱 .addZipInputStream(zipInputStream)//完成zip文件的部署 .deploy();//完成部署 System.out.println("部署ID:"+deployment.getId()); System.out.println("部署名稱:"+deployment.getName()); } /* * 查詢流程定義 */ @Test public void findProcessDefinition(){ List<ProcessDefinition> list = processEngine.getRepositoryService()//與流程定義和部署對象相關的Service .createProcessDefinitionQuery()//創建一個流程定義查詢 /*指定查詢條件,where條件*/ //.deploymentId(deploymentId)//使用部署對象ID查詢 //.processDefinitionId(processDefinitionId)//使用流程定義ID查詢 //.processDefinitionKey(processDefinitionKey)//使用流程定義的KEY查詢 //.processDefinitionNameLike(processDefinitionNameLike)//使用流程定義的名稱模糊查詢 /*排序*/ .orderByProcessDefinitionVersion().asc()//按照版本的升序排列 //.orderByProcessDefinitionName().desc()//按照流程定義的名稱降序排列 .list();//返回一個集合列表,封裝流程定義 //.singleResult();//返回唯一結果集 //.count();//返回結果集數量 //.listPage(firstResult, maxResults)//分頁查詢 if(list != null && list.size()>0){ for(ProcessDefinition processDefinition:list){ System.out.println("流程定義ID:"+processDefinition.getId());//流程定義的key+版本+隨機生成數 System.out.println("流程定義名稱:"+processDefinition.getName());//對應HelloWorld.bpmn文件中的name屬性值 System.out.println("流程定義的key:"+processDefinition.getKey());//對應HelloWorld.bpmn文件中的id屬性值 System.out.println("流程定義的版本:"+processDefinition.getVersion());//當流程定義的key值相同的情況下,版本升級,默認從1開始 System.out.println("資源名稱bpmn文件:"+processDefinition.getResourceName()); System.out.println("資源名稱png文件:"+processDefinition.getDiagramResourceName()); System.out.println("部署對象ID:"+processDefinition.getDeploymentId()); System.out.println("################################"); } } } /* * 刪除流程定義 */ @Test public void deleteProcessDefinition(){ //使用部署ID,完成刪除 String deploymentId = "1"; /* * 不帶級聯的刪除 * 只能刪除沒有啟動的流程,如果流程啟動,就會拋出異常 */ // processEngine.getRepositoryService()//與流程定義和部署對象相關的Service // .deleteDeployment(deploymentId); /* * 能級聯的刪除 * 能刪除啟動的流程,會刪除和當前規則相關的所有信息,正在執行的信息,也包括歷史信息 */ processEngine.getRepositoryService()//與流程定義和部署對象相關的Service .deleteDeployment(deploymentId, true); System.out.println("刪除成功"); } /* * 查詢流程圖 */ @Test public void viewPic() throws IOException{ /**將生成圖片放到文件夾下*/ String deploymentId = "401"; //獲取圖片資源名稱 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); } /* * 查詢最新版本的流程定義 */ @Test public void findLastVersionProcessDefinition(){ List<ProcessDefinition> list = processEngine.getRepositoryService() .createProcessDefinitionQuery() .orderByProcessDefinitionVersion().asc()//使用流程定義的版本升序排列 .list(); /* * Map<String,ProcessDefinition> * map集合的key:流程定義的key * map集合的value:流程定義的對象 * 特點:當map集合key值相同的情況下,后一次的值將替換前一次的值 */ Map<String,ProcessDefinition> map = new LinkedHashMap<String,ProcessDefinition>(); if(list != null && list.size() >0){ for(ProcessDefinition pd:list){ map.put(pd.getKey(), pd); } } List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values()); if(pdList!=null && pdList.size()>0){ for(ProcessDefinition pd:pdList){ 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("#########################################################"); } } } }