zoukankan      html  css  js  c++  java
  • 五、activiti工作流-学生请假流程

     有了上一节的基础,这节主要讲如何创建一个学生请假流程、部署、运行流程实例、查看任务、执行任务、判断流程实例状态、历史任务(实例)查询、历史活动节点查询

        记住,一个正在执行的流程,他的流程定义id无论到哪一个环节都是一样的,流程实例id也是无论到了哪一个环节都是一样,变得是任务id

     先在resources-disgrams下面创建一个学生请假流程设计图,

             

      绘制流程设计图

                     

    学生委派人设置为张三,班长为李四,班主任为王五

      

    流程图设计好后,现在开始创建一个学生请假的类

      

    package com.java.activiti.flow;

    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 {

    /**
    * 获取默认流程引擎实例,会自动读取avtiviti.cfg.xml文件
    * */
    private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); //获取流程引擎

    //部署流程定义,把数据写到数据库中去,这种是通过classpath加载方式部署
    @Test
    public void deploy() {
      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都是一样的
    * */
    @Test
    public void start() {
      ProcessInstance pi = processEngine.getRuntimeService() //运行service
      .startProcessInstanceByKey("studentLeaveProcess"); //流程定义表里面的key
      System.out.println("流程实例id:"+pi.getId());
      System.out.println("流程定义id:"+pi.getProcessDefinitionId());
    }

    /**
    * 查看任务,查看某个人的任务
    * */
    @Test
    public void findTask() {
      List<Task> taskList = processEngine.getTaskService() //任务相关的service
      .createTaskQuery() //创建任务查询S
      .taskAssignee("张三") //指定某个人有没有任务
      .list();
      for (Task task : taskList) {
        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());
    }
    }

    /**
    * 执行任务,执行的id是任务的id,张三执行完后,在任务表中已经没有了张三,有的是李四(班长),因为已经流到了下一个节点,上面那个方法查张三是查不到的
    * 任务执行完,运行时的表全部清空
    * */
    @Test
    public void complete() {
      processEngine.getTaskService() //任务相关
      .complete("47502");
    }

    /**
    * 判断流程实例状态(正在你执行或者已经执行结束),判断某一个流程实例状态
    */
    @Test
    public void processState() {
      ProcessInstance pi = processEngine.getRuntimeService() //获取运行时service
      .createProcessInstanceQuery() //创建执行对象
      .processInstanceId("42501") //用流程实例id查询
      .singleResult();

      if(pi!=null) {
        System.out.println("流程正在执行");
      }else {
        System.out.println("流程已经结束");
      }

    }


    /**
    * 历史流程任务查询
    */
    @Test
    public void historyTaskList() {
      List<HistoricTaskInstance> list = processEngine.getHistoryService() //历史相关的service
        .createHistoricTaskInstanceQuery() //创建历史任务实例查询
        .processInstanceId("42501") //用流程实例id查询
        .finished() //查已经完成流程的历史任务
        .list();

      for (HistoricTaskInstance hti : list) {
        System.out.println("委派人:"+hti.getAssignee());
        System.out.println("历史任务id:"+hti.getId());
        System.out.println("历史流程名称:"+hti.getName());
        System.out.println("历史流程实例id:"+hti.getProcessInstanceId());
        System.out.println("历史流程名称:"+hti.getProcessInstanceId());
        System.out.println("历史流程开始时间:"+hti.getStartTime());
        System.out.println("历史流程开始时间:"+hti.getEndTime());
        System.out.println("=================");
      }
    }

    /**
    * 历史活动节点查询,开发之中这个用的最多,针对是某一个完整的过程
    */

    @Test
    public void historyAcInstanceList() {
      List<HistoricActivityInstance> list = processEngine.getHistoryService() //历史相关的接口
        .createHistoricActivityInstanceQuery() //创建历史活动实例查询
        .processInstanceId("42501") //指定流程实例id
        .finished()
        .list();

      for (HistoricActivityInstance hisac : list) {
        System.out.println("办理人:"+hisac.getAssignee());
        System.out.println("活动id:"+hisac.getId());
        System.out.println("活动流程名称:"+hisac.getActivityName());
        System.out.println("活动流程实例id:"+hisac.getProcessInstanceId());
        System.out.println("活动流程开始时间:"+hisac.getStartTime());
        System.out.println("活动流程结束时间:"+hisac.getEndTime());
        System.out.println("=================");
        }
      }
    }


  • 相关阅读:
    python3 爬虫继续爬笔趣阁 ,,,,,,,
    sql server 能按照自己规定的字段顺序展示
    文件下载功能django+js
    Django 实现文件下载
    队列,循环队列,乒乓队列区别
    文件系统常用操作(df, du)
    Raw与ProRes Raw(二、深入挖掘)
    图片格式入门(RAW, TIFF, JPEG)
    什么是ProRes Raw?(一、管中窥豹)
    linux的top命令分析
  • 原文地址:https://www.cnblogs.com/binghuaZhang/p/10777965.html
Copyright © 2011-2022 走看看