一、实现学生请假流程

  1.1  用activiti插件生成bpmn和png文件

钉钉学生请假系统javaee 钉钉上学生请假_System

钉钉学生请假系统javaee 钉钉上学生请假_Test_02

 

  1.2  部署流程定义


package com.shyroke.activiti.firstActiviti;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.junit.Test;

public class StudentLeaveProcess {

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

    /**
     * 部署流程定义
     */
    @Test
    public void test_Deploy() {
        Deployment deployment = processEngine.getRepositoryService() // 获取部署相关Service
                .createDeployment()  创建部署
                .addClasspathResource("diagrams/StudentLeaveProcess.bpmn") // 加载资源文件
                .addClasspathResource("diagrams/StudentLeaveProcess.bpmn") // 加载资源文件
                .name("学生请假流程") // 流程名称
                .deploy(); // 部署

        System.out.println("流程部署ID:" + deployment.getId());
        System.out.println("流程部署Name:" + deployment.getName());
    }
}


  •   结果:

钉钉学生请假系统javaee 钉钉上学生请假_数据库_03

  • 更新流程部署表

 

钉钉学生请假系统javaee 钉钉上学生请假_数据库_04

 

  • 更新流程定义表

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_05

  • 更新资源文件表

 

钉钉学生请假系统javaee 钉钉上学生请假_数据库_06

  • 更新系统配置表

 

钉钉学生请假系统javaee 钉钉上学生请假_System_07

  1.2  启动流程实例


/**
     * 启动流程实例
     */
    @Test
    public void start() {
        ProcessInstance instance=processEngine.getRuntimeService() // 运行时Service
            .startProcessInstanceByKey("StudentLeaveProcess");   // 流程定义表act_re_procdef的KEY字段值
        
        System.out.println("流程实例ID:"+instance.getId());
        System.out.println("流程定义ID:"+instance.getProcessDefinitionId()); 
    }


  • 此时流程学生请假这个节点,等待张三完成任务。
  • 结果

 

钉钉学生请假系统javaee 钉钉上学生请假_Test_08

  • 更新执行对象表

钉钉学生请假系统javaee 钉钉上学生请假_System_09

  • 更新身份联系表,

 

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_10

  • 更新 用户任务表,这里是张三的任务

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_11

  • 更新活动节点历史表,如下图可知,张三的任务还没完成,所以END_TIME为空

钉钉学生请假系统javaee 钉钉上学生请假_数据库_12

  • 更新历史身份联系表,流程走到这里暂时只有张三这个用户需要完成任务。

 

钉钉学生请假系统javaee 钉钉上学生请假_后端_13

  • 更新历史流程实例表,因为张三还没完成任务,所以END_TIME为空。

钉钉学生请假系统javaee 钉钉上学生请假_System_14

  • 更新历史任务表,目前只有张三的任务

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_15

  1.3  查看张三的任务


/**
     * 查看任务
     */
    @Test
    public void find_task() {
        
        List<Task> taskList=processEngine.getTaskService().createTaskQuery().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());
        }
    }


  • 结果

 

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_16

  1.4  张三完成学生请假任务


/**
     * 完成任务
     */
    @Test
    public void test_completeTask() {
        processEngine.getTaskService().complete("2504");
    }


  • 结果,张三完成任务之后,流程就从学生请假走到了班长审批这个节点,需要李四完成任务。

钉钉学生请假系统javaee 钉钉上学生请假_Test_17

  • 更新执行对象表

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_18

  • 更新身份联系表 ,这个流程走到现在需要张三和李四两个用户,张三已经完成任务。

 

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_19

 

  • 更新 用户任务表,这里是李四的任务

钉钉学生请假系统javaee 钉钉上学生请假_System_20

  • 更新活动节点历史表,如下图可知,李四的任务还没完成,所以END_TIME为空

钉钉学生请假系统javaee 钉钉上学生请假_System_21

  • 更新历史身份联系表

 

钉钉学生请假系统javaee 钉钉上学生请假_数据库_22

  • 更新历史流程实例表

钉钉学生请假系统javaee 钉钉上学生请假_Test_23

  • 更新历史任务表

 

钉钉学生请假系统javaee 钉钉上学生请假_Test_24

 

   1.5  查看李四的任务


/**
     * 查看任务
     */
    @Test
    public void find_task() {
        
        List<Task> taskList=processEngine.getTaskService().createTaskQuery().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());
        }
    }


  • 结果

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_25

 

   1.6  李四完成班长审批任务


/**
     * 完成任务
     */
    @Test
    public void test_completeTask() {
        processEngine.getTaskService().complete("5002");
    }


  • 完成之后,流程就从李四的班长审批节点走到班主任审批节点,需要王五来完成

钉钉学生请假系统javaee 钉钉上学生请假_数据库_26

 

  • 更新执行对象表

钉钉学生请假系统javaee 钉钉上学生请假_钉钉学生请假系统javaee_27

 

  • 更新身份联系表

 

钉钉学生请假系统javaee 钉钉上学生请假_System_28

  • 更新 用户任务表,这里是王五的任务

钉钉学生请假系统javaee 钉钉上学生请假_Test_29

  • 更新活动节点历史表,如下图可知,王五的任务还没完成,所以END_TIME为空

钉钉学生请假系统javaee 钉钉上学生请假_后端_30

  • 更新历史身份联系表

 

钉钉学生请假系统javaee 钉钉上学生请假_System_31

  • 更新历史流程实例表

钉钉学生请假系统javaee 钉钉上学生请假_后端_32

  • 更新历史任务表

 

钉钉学生请假系统javaee 钉钉上学生请假_System_33

 

   1.7  查看王五任务


/**
     * 查看任务
     */
    @Test
    public void find_task() {
        
        List<Task> taskList=processEngine.getTaskService().createTaskQuery().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());
        }
    }


  • 结果

钉钉学生请假系统javaee 钉钉上学生请假_Test_34

 

   1.8  王五完成任务


/**
     * 完成任务
     */
    @Test
    public void test_completeTask() {
        processEngine.getTaskService().complete("7502");
    }


  • 结果
  • 当王五完成任务的时候,流程就全部走完了。
  • 当流程结束的时候,运行时的表(以act_ru开头的表)数据全部清空,历史表(以act_hi开头的表)数据修改 或者增加了数据