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.activiti.engine.task.TaskQuery;
import org.junit.Test;
public class StudentLeaveProcess {
//获取流程引擎
private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//① 部署流程定义
@Test
public void deployProcess(){
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()
.addClasspathResource("diagrams/StudentLeaveProcess.bpmn")
.addClasspathResource("diagrams/StudentLeaveProcess.png")
.name("学生请假流程")
.deploy();
System.out.println("流程部署名称:"+deployment.getName());
System.out.println("流程部署Id:"+deployment.getId());
System.out.println("流程部署时间:"+deployment.getDeploymentTime());
}
//② 启动流程
@Test
public void startProcess(){
String processDefinitionKey = "studentLeaveProcess";
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程名称:"+pi.getName());
System.out.println("流程实例Id"+pi.getId());
}
//③ 查看任务执行结果
@Test
public void queryTask(){
List<Task> tasks = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee("王五")
.list();
for(Task task : tasks){
System.out.println("任务执行人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
System.out.println("任务创建时间:"+task.getCreateTime());
System.out.println("任务ID:"+task.getId());
System.out.println("流程实例ID:"+task.getExecutionId());
}
}
//④ 完成任务
@Test
public void completeTask(){
processEngine.getTaskService()
.complete("35002");
}
//⑤ 判断流程实例的状态(运行状态\运行完毕) 因为当流程运行完毕之后运行时表中的数据全部清空 只要查看是否为空就可判断
@Test
public void processState(){
String processInstanceId = "30001";
ProcessInstance pi = processEngine.getRuntimeService() //获取运行是service
.createProcessInstanceQuery() //创建流程实例对象
.processInstanceId(processInstanceId) //用流程实例Id查询
.singleResult();
if(pi!=null){
System.out.println("流程正在执行");
}else{
System.out.println("流程已经执行完毕");
}
}
//⑥ 历史任务查询 操作的表为历史任务表 查询在具体的时间干了什么
@Test
public void historyTaskQuery(){
String processInstanceId = "30001";
List<HistoricTaskInstance> list = processEngine.getHistoryService() //历史相关servcie
.createHistoricTaskInstanceQuery() //创建历史任务查询
.processInstanceId(processInstanceId) //用流程实例ID查询
.finished() //查询已经完成的任务
.list();
for(HistoricTaskInstance hti:list){
System.out.println("执行人:"+hti.getAssignee());
System.out.println("完成的任务ID:"+hti.getId());
System.out.println("开始时间:"+hti.getStartTime());
System.out.println("完成时间:"+hti.getEndTime());
System.out.println("流程实例ID:"+hti.getProcessInstanceId());
System.out.println("任务名称:"+hti.getName());
System.out.println("==================================");
}
}
//⑦ 历史活动查询 与上面所不同的是包含start和end节点 在项目中使用较多 操作的表为历史节点表
@Test
public void historyActInstanceQuery(){
String processInstanceId = "30001";
List<HistoricActivityInstance> list = processEngine.getHistoryService() //历史相关的Service
.createHistoricActivityInstanceQuery() //创建历史活动实例查询
.processInstanceId(processInstanceId) //指定流程实例
.finished()
.list();
for(HistoricActivityInstance hai : list){
System.out.println("执行人:"+hai.getAssignee());
System.out.println("活动ID:"+hai.getId());
System.out.println("开始时间:"+hai.getStartTime());
System.out.println("完成时间:"+hai.getEndTime());
System.out.println("流程实例ID:"+hai.getProcessInstanceId());
System.out.println("活动名称:"+hai.getActivityName());
System.out.println("==================================");
}
}
}
转载于:https://www.cnblogs.com/blog12345/p/6972673.html