4、Activiti 流程实例 ProcessInstance

来源:互联网 发布:鹏鹏扣字软件怎么用 编辑:程序博客网 时间:2024/06/01 11:30
public class ProcessInstanceTest
{
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/**
* 部署流程定义
*
*/
@Test
public void deployProcessDefintion_zip()
{
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/hello.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment deployment = processEngine.getRepositoryService() // 与流程定义和部署相关的service
.createDeployment() // 创建一个部署对象
.name("第一个流程")
.addZipInputStream(zipInputStream) // 使用zip输入流完成部署
.deploy(); // 完成部署
System.out.println("部署ID" + deployment.getId()); // 20001
System.out.println("部署名称" + deployment.getName()); // 第一个流程
}

/**
* 启动流程实例
*/
@Test
public void startProcessInstance()
{
String processDefinitionKey = "hello";
ProcessInstance pi = processEngine.getRuntimeService() // 与正在执行的流程实例和执行相关的service
.startProcessInstanceByKey(processDefinitionKey); // 使用流程定义的key启动流程,key在bpmn文件中对应ID,使用key启动会使用最新版本的流程定义

System.out.println("流程实例ID:" + pi.getId()); //流程实例ID 22501
System.out.println("流程定义ID:" + pi.getProcessDefinitionId()); //流程定义ID hello:1:20004
}

/**
* 查询个人当前任务
*/
@Test
public void findMyPersonalTask()
{
String assignee = "孙悟空";
List<Task> tasks = processEngine.getTaskService() // 与正在执行的任务管理相关的service
.createTaskQuery() // 创建任务查询对象
/**查询条件**/
.taskAssignee(assignee) // 根据个人查询任务
// .taskCandidateUser(candidateUser)//组任务
// .processDefinitionId(processDefinitionId)//流程定义id
// .processInstanceId(processInstanceId)//流程实例id
// .executionId(executionId)//执行对象id
/**排序**/
.orderByTaskCreateTime().desc()
/**结果集**/
// .singleResult()//返回唯一结果值
// .count()//返回结果集的数量
// .listPage(firstResult, maxResults)//分页返回
.list();
if (tasks != null && !tasks.isEmpty())
{
for (Task task : tasks)
{
System.out.println("任务ID:" + task.getId());
System.out.println("任务名称:" + task.getName());
System.out.println("创建时间:" + task.getCreateTime());
System.out.println("任务的办理人:" + task.getAssignee());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("执行对象ID:" + task.getExecutionId());
System.out.println("---------------------");
}
}
}

/**
* 完成我的任务
*/
@Test
public void completeMyPersonalTask()
{
String taskId = "22504";
processEngine.getTaskService()
.complete(taskId);
System.out.println("完成任务:" + taskId);
}

/**
* 查询流程实例是否结束
*
*/
@Test
public void isProcessEnd()
{
String processInstanceId = "25001";
ProcessInstance processInstance = processEngine.getRuntimeService()
.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();

if (processInstance == null)
{
System.out.println("流程结束");
}
else
{
System.out.println("流程进行中");
}
}

/**
* 查询历史任务
*/
@Test
public void queryHistoryTask()
{
String assignee = "孙悟空";
List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据相关的service
.createHistoricTaskInstanceQuery()//创建历史任务查询实例
.taskAssignee(assignee)//指定历时任务的办理人
.list();

if (list != null && !list.isEmpty())
{
for (HistoricTaskInstance historicTaskInstance : list)
{
System.out.println(historicTaskInstance.getId());
System.out.println(historicTaskInstance.getProcessDefinitionId());
System.out.println(historicTaskInstance.getProcessInstanceId());
System.out.println(historicTaskInstance.getTenantId());
System.out.println(historicTaskInstance.getStartTime());
System.out.println(historicTaskInstance.getEndTime());
System.out.println(historicTaskInstance.getDurationInMillis());
System.out.println("----------------------------------");
}
}
}

/**
* 查询历时流程实例
*
*/
@Test
public void queryHistoryProcessInstance()
{
String processInstanceId = "22501";
HistoricProcessInstance historicProcessInstance = processEngine.getHistoryService()
.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();

System.out.println(historicProcessInstance.getId());
System.out.println(historicProcessInstance.getProcessDefinitionId());
System.out.println(historicProcessInstance.getStartUserId());
System.out.println(historicProcessInstance.getStartTime());
System.out.println(historicProcessInstance.getEndTime());
System.out.println(historicProcessInstance.getDurationInMillis());
}
}


Execution   执行对象
 按流程定义的规则执行一次的过程.
 对应的表:
  act_ru_execution: 正在执行的信息
  act_hi_procinst:已经执行完的历史流程实例信息
  act_hi_actinst:存放历史所有完成的活动
ProcessInstance  流程实例
 特指流程从开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有1个。
 
注意
    (1)如果是单例流程,执行对象ID就是流程实例ID
    (2)如果一个流程有分支和聚合,那么执行对象ID和流程实例ID就不相同
    (3)一个流程中,流程实例只有1个,执行对象可以存在多个。
 
Task 任务
 执行到某任务环节时生成的任务信息。
 对应的表:
  act_ru_task:正在执行的任务信息
  act_hi_taskinst:已经执行完的历史任务信息
0 0
原创粉丝点击