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 --------------------- */ } }