zoukankan      html  css  js  c++  java
  • 工作流笔记第三天_流程实例

    0、流程实例的表

    -- 流程实例,执行对象,任务
    -- 1、解析.bpmn后得到的流程定义规则的信息,工作流系统就是按照流程定义的规则执行的。
    select * FROM act_ru_execution; -- 正在执行的执行对象表
    select * FROM act_hi_procinst; -- 流程实例的历史表
    select * FROM act_ru_task; -- 正在执行的任务表(只有节点是UserTask的时候,该表中存在数据)
    select * FROM act_hi_taskinst; -- 任务历史表(只有节点是UserTask的时候,该表中存在数据)
    select * FROM act_hi_actinst; -- 所有活动节点的历史表

    1、结论:

    (1)如果是单例流程(没有分支和聚合),那么流程实例ID和执行对象ID是相同的;

    (2)一个流程实例只有一个,执行对象可以有多个

    代码实现:

    package itheima.processDefinition;

    import java.io.InputStream;
    import java.util.List;
    import java.util.zip.ZipInputStream;

    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.history.HistoricProcessInstance;
    import org.activiti.engine.history.HistoricTaskInstance;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.task.Task;
    import org.junit.Test;

    public class ProcessInstance {
    // 获得工作流引擎对象
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /* 部署流程定义(从zip中部署流程定义)

    把helloWord.bpmn和helloWord.png压缩成helloWord.zip放在src/main/resources/diagrams文件夹下

    */
    @Test
    public void deloymentProcessDefinitionFromZip() {
    // 根据反射获取zip文件转换成对应的流
    InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloWord.zip");
    // 创建流对象
    ZipInputStream zipInputStream = new ZipInputStream(in);
    // 部署对象
    Deployment deploy = processEngine.getRepositoryService()// 与流程定义相关的service
    .createDeployment()// 创建部署对象
    .name("helloWord入门程序")// 添加部署名称
    .addZipInputStream(zipInputStream)// 指定zip格式的文件完成部署
    .deploy();// 完成部署;
    System.out.println("部署id:" + deploy.getId());
    System.out.println("部署名称:" + deploy.getName());
    }

    /* 启动流程实例 */
    @Test
    public void startProcessInstance() {
    // 流程定义的key
    String processDefinitionKey = "helloWord";
    org.activiti.engine.runtime.ProcessInstance processInstance = processEngine.getRuntimeService()// 与正在执行的流程实例和流程对象有关的service
    .startProcessInstanceByKey(processDefinitionKey);
    // 使用流程定义的key启动流程实例,key与helloWord.bpmn中的id值相同
    System.out.println("流程实例id:" + processInstance.getId());
    System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());
    }

    /* 完成我的任务 */
    @Test
    public void completeMyTask() {
    // 任务id
    String taskId = "1002";
    processEngine.getTaskService()// 获取与正在执行任务的service
    .complete(taskId);
    System.out.println("完成任务,任务编号是:" + taskId);
    }

    /* 查询当前人的个人任务 */
    @Test
    public void findMyPersonalTask() {
    String assignee = "王五";
    List<Task> list = processEngine.getTaskService()// 获取与正在执行任务的service
    .createTaskQuery()// 创建任务查询对象
    .taskAssignee(assignee)// 指定个人任务查询,指定办理人
    // .taskCandidateUser(candidateUser)//组任务的办理人查询
    // .processDefinitionId("helloWord:1:704")// 按照流程定义id查询
    // .executionId("801")//按照执行对象id查询
    // .processInstanceId("801")// 流程实例id查询
    .orderByTaskCreateTime().asc()// 按照任务创建时间的升序排列
    // .singleResult()//唯一结果集
    .list(); // 返回结果集列表
    if (list != null && list.size() > 0) {
    for (Task task : list) {
    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.getProcessInstanceId());
    System.out.println("执行对象id:" + task.getExecutionId());
    System.out.println("流程定义id:" + task.getProcessDefinitionId());
    }
    }
    }

    /* 查询流程状态(判断流程正在执行还是已经结束) */
    @Test
    public void isProcessEnd() {
    String processInstanceId = "801";
    org.activiti.engine.runtime.ProcessInstance singleResult = processEngine.getRuntimeService()
    .createProcessInstanceQuery()// 创建流程实例查询对象
    .processInstanceId(processInstanceId)// 根据流程实例id查询
    .singleResult();// 返回唯一结果集
    if (singleResult != null) {
    System.out.println("流程还没有执行结束。");
    } else {
    System.out.println("流程已经执行结束!");
    }
    }

    /* 查询历史任务 */
    @Test
    public void queryHistoryTask() {
    String taskAssignee = "张三";
    List<HistoricTaskInstance> list = processEngine.getHistoryService()// 创建于历史有关的服务对象
    .createHistoricTaskInstanceQuery()// 创建查询历史任务实例对象
    .taskAssignee(taskAssignee)// 办理任务的人
    .list();
    if (list != null && list.size() > 0) {
    for (HistoricTaskInstance his : list) {
    System.out.println(his.getProcessInstanceId() + " " + his.getAssignee() + " "
    + his.getTaskDefinitionKey() + " " + his.getName() + " " + his.getStartTime() + " "
    + his.getEndTime() + " " + his.getDurationInMillis());
    }
    }
    }

    /* 查询历史流程实例 */
    @Test
    public void queryHistoryProcessInstance() {
    String processInstanceId = "801";
    HistoricProcessInstance his = processEngine.getHistoryService()// 创建于历史相关的服务对象
    .createHistoricProcessInstanceQuery()// 创建查询流程实例对象
    .processInstanceId(processInstanceId).singleResult();
    if (his != null) {
    System.out.println(his.getId() + " " + his.getProcessDefinitionId() + " " + his.getStartTime()
    + " " + his.getEndTime() + " " + his.getDurationInMillis());
    }
    }
    }

  • 相关阅读:
    Go对比其他语言新特性2(函数、包、错误处理)
    计算机基础知识
    GO的下载和环境配置,Goland编译器的配置和初始化项目
    软件工程第五次作业
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    软件工程结对第二次作业
    软件工程结对第一次作业
  • 原文地址:https://www.cnblogs.com/smile-nn/p/7376331.html
Copyright © 2011-2022 走看看