package com.java1234.activiti.flow; import static org.junit.Assert.*; import java.util.List; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.history.HistoricActivityInstance; import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.junit.Test; public class StudentLeaveProcess { /** * 獲取默認流程引擎實例,默認讀取配置文件activiti.cfg.xml */ private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); /** * 1.部署流程定義. */ //@Test public void deployWidthClassPath(){ Deployment deployment= processEngine.getRepositoryService()// 部署相關service .createDeployment()//建立部署對象 .addClasspathResource("diagrams/StudentLeaveProcess.bpmn")//加載資源文件 .addClasspathResource("diagrams/StudentLeaveProcess.png") //加載資源圖片 .name("學生請假流程")//設置名稱 .deploy();//部署 System.out.println("流程部署Id:"+deployment.getId()); System.out.println("流程部署Name:"+deployment.getName()); /* 流程部署Id:15001 流程部署Name:學生請假流程 ------------------- ## 流程部署表 select * from act_re_deployment; ## 流程定義表 select * from act_re_procdef; ## 資源文件表 select * from act_ge_bytearray; */ } /** * 2.啓動流程實例 */ @Test public void start(){ ProcessInstance pi= processEngine.getRuntimeService() //運行服務 .startProcessInstanceByKey("studentLeaveProcess"); //數據庫中act_re_procdef的key_字段 System.out.println("流程實例ID:"+pi.getId()); System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID /* 流程實例ID:17501 ,30001 流程定義ID:studentLeaveProcess:1:15004 */ } /** * 3.查詢任務 * */ @Test public void findTask(){ List<Task> taskList= processEngine.getTaskService() //任務服務實例 .createTaskQuery()//建立任務查詢 .taskAssignee("王五")// 查詢 張三 ,李四,後歐洲王五 .list(); for(Task task:taskList){ // act_ru_task; 字段 裏面的信息 System.out.println("任務Id:"+task.getId()); System.out.println("任務Name:"+task.getName()); System.out.println("任務建立時間:"+task.getCreateTime()); System.out.println("任務委派人:"+task.getAssignee()); System.out.println("任務實例ID:"+task.getProcessInstanceId()); } /*打印結果: 任務Id:17504, 30004 任務Name:學生請假申請 任務建立時間:Thu Jul 28 15:24:50 CST 2016 任務委派人:張三 任務實例ID:17501 ,30001 */ } /** * 4.完成任務,讓張三完成任務 */ @Test public void completeTask(){ processEngine.getTaskService()//任務服務器 .complete("30004"); //使用上面: 任務Id:(17504) System.out.println("任務完成!"); } /** * 5.查詢李四的任務,上面有方法 */ /** 查詢結果! 任務Id:20002 ,32502 任務Name:班長審批 任務建立時間:Thu Jul 28 15:37:04 CST 2016 任務委派人:李四 任務實例ID:17501,30001 */ /** * 6.完成任務,讓李四完成任務 */ @Test public void completeTask6(){ processEngine.getTaskService()//任務服務器 .complete("32502"); //使用上面: 任務Id:(17504) System.out.println("任務完成"); } /** * 7.查詢王五任務, 調用findTask, */ /** 任務Id:22502 任務Name:班主任審批 任務建立時間:Thu Jul 28 15:44:36 CST 2016 任務委派人:王五 任務實例ID:17501 */ /** * 8.完成任務,讓王五完成任務 */ @Test public void completeTask8(){ processEngine.getTaskService()//任務服務器 .complete("35002"); //使用上面: 任務Id:(17504) System.out.println("任務完成"); } /** * 查詢流程狀體(正在執行Or 已經執行結束) * act_ru_excution 的proc_inst_id字段 */ @Test public void processState(){ ProcessInstance pi= processEngine.getRuntimeService()// 獲取運行時的service .createProcessInstanceQuery()//建立流程實例查詢 .processInstanceId("30001")//act_ru_excution 的proc_inst_id字段 .singleResult(); if(pi!=null){ System.out.println("流程正在執行!"); }else{ System.out.println("流程已經執行結束!"); } } /** * 歷史任務查詢 */ @Test public void historyTaskList(){ List<HistoricTaskInstance> list = processEngine.getHistoryService()// 歷史服務器 .createHistoricTaskInstanceQuery() //歷史任務,是列,查詢 .processInstanceId("30001")// 流程實例查詢! .finished() //查詢已經完成的 .list(); for(HistoricTaskInstance hti: list){ // select * from act_hi_taskinst; System.out.println("任務Id:"+hti.getId()); System.out.println("流程實例Id:"+hti.getProcessInstanceId()); System.out.println("任務名稱:"+hti.getName()); System.out.println("辦理人:"+hti.getAssignee()); System.out.println("開始時間:"+hti.getStartTime()); System.out.println("結束時間:"+hti.getEndTime()); System.out.println("---------------------"); } /* 任務Id:30004 流程實例Id:30001 任務名稱:學生請假申請 辦理人:張三 開始時間:Thu Jul 28 16:14:46 CST 2016 結束時間:Thu Jul 28 16:16:29 CST 2016 --------------------- 任務Id:32502 流程實例Id:30001 任務名稱:班長審批 辦理人:李四 開始時間:Thu Jul 28 16:16:29 CST 2016 結束時間:Thu Jul 28 16:20:56 CST 2016 --------------------- 任務Id:35002 流程實例Id:30001 任務名稱:班主任審批 辦理人:王五 開始時間:Thu Jul 28 16:20:56 CST 2016 結束時間:Thu Jul 28 16:22:43 CST 2016 --------------------- */ } /** * 歷史活動任務查詢 */ @Test public void historyActTaskList(){ List<HistoricActivityInstance> list = processEngine.getHistoryService()// 歷史服務器 .createHistoricActivityInstanceQuery() //歷史任務,是列,查詢 .processInstanceId("30001")// 流程實例查詢! .finished() //查詢已經完成的 .list(); for(HistoricActivityInstance hati: list){ // select * from act_hi_actinst; System.out.println("任務Id:"+hati.getId()); System.out.println("流程實例Id:"+hati.getProcessInstanceId()); System.out.println("活動名稱:"+hati.getActivityName()); System.out.println("辦理人:"+hati.getAssignee()); System.out.println("開始時間:"+hati.getStartTime()); System.out.println("結束時間:"+hati.getEndTime()); System.out.println("---------------------"); } /* 任務Id:30002 流程實例Id:30001 活動名稱:Start 辦理人:null 開始時間:Thu Jul 28 16:14:46 CST 2016 結束時間:Thu Jul 28 16:14:46 CST 2016 --------------------- 任務Id:30003 流程實例Id:30001 活動名稱:學生請假申請 辦理人:張三 開始時間:Thu Jul 28 16:14:46 CST 2016 結束時間:Thu Jul 28 16:16:29 CST 2016 --------------------- 任務Id:32501 流程實例Id:30001 活動名稱:班長審批 辦理人:李四 開始時間:Thu Jul 28 16:16:29 CST 2016 結束時間:Thu Jul 28 16:20:56 CST 2016 --------------------- 任務Id:35001 流程實例Id:30001 活動名稱:班主任審批 辦理人:王五 開始時間:Thu Jul 28 16:20:56 CST 2016 結束時間:Thu Jul 28 16:22:43 CST 2016 --------------------- 任務Id:37501 流程實例Id:30001 活動名稱:End 辦理人:null 開始時間:Thu Jul 28 16:22:43 CST 2016 結束時間:Thu Jul 28 16:22:43 CST 2016 --------------------- */ } }