博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五、activiti工作流-学生请假流程
阅读量:5352 次
发布时间:2019-06-15

本文共 4245 字,大约阅读时间需要 14 分钟。

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

    记住,一个正在执行的流程,他的流程定义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("=================");
    }
  }
}

 

转载于:https://www.cnblogs.com/binghuaZhang/p/10777965.html

你可能感兴趣的文章
学习中印象最深的一个error
查看>>
聚石塔中查询数据库是否有锁
查看>>
eclipse创建android项目,无法正常预览布局文件的相关问题
查看>>
Moinmoin wiki 中文附件名的解决办法
查看>>
poj 2187 Beauty Contest
查看>>
linux 环境下 gdb 附加进程调试程序
查看>>
PHP实现用户登录页面
查看>>
硬盘格式化后想要数据恢复的详细步骤攻略
查看>>
hibernate操作数据库总结
查看>>
php:修改NetBeans默认字体
查看>>
Intel的X86芯片段式管理历史起源(CS、DS、ES、SS)——避免产品公司的小九九
查看>>
leecode 937 Reorder Log Files (模拟)
查看>>
JavaScript(三、DOM文档对象模型)
查看>>
AngularJS XMLHttpRequest
查看>>
兼容性积累
查看>>
Redux 源码解读--createStore,js
查看>>
循环语句习题 20140819
查看>>
31.SUM() 函数
查看>>
Winform中Checkbox与其他集合列表类型之间进行关联
查看>>
SQL语句整理(一) 数据库查询语言DQL
查看>>