zoukankan      html  css  js  c++  java
  • (六)Activiti之实现学生请假流程

    一、实现学生请假流程

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

      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());
        }
    }
    •   结果:

    • 更新流程部署表

     

    • 更新流程定义表

    • 更新资源文件表

     

    • 更新系统配置表

     

      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()); 
        }
        
    • 此时流程学生请假这个节点,等待张三完成任务。
    • 结果

     

    • 更新执行对象表

    • 更新身份联系表,

     

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

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

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

     

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

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

      

      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());
            }
        }
      
    • 结果

     

      1.4  张三完成学生请假任务

        /**
         * 完成任务
         */
        @Test
        public void test_completeTask() {
            processEngine.getTaskService().complete("2504");
        }
    • 结果,张三完成任务之后,流程就从学生请假走到了班长审批这个节点,需要李四完成任务。

    • 更新执行对象表

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

     

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

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

    • 更新历史身份联系表

     

    • 更新历史流程实例表

    • 更新历史任务表

     

       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());
            }
        }
    • 结果

       1.6  李四完成班长审批任务

        /**
         * 完成任务
         */
        @Test
        public void test_completeTask() {
            processEngine.getTaskService().complete("5002");
        }
    • 完成之后,流程就从李四的班长审批节点走到班主任审批节点,需要王五来完成

    • 更新执行对象表

    • 更新身份联系表

     

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

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

    • 更新历史身份联系表

     

    • 更新历史流程实例表

    • 更新历史任务表

     

       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());
            }
        }
    • 结果

       1.8  王五完成任务

        /**
         * 完成任务
         */
        @Test
        public void test_completeTask() {
            processEngine.getTaskService().complete("7502");
        }
    • 结果
    • 当王五完成任务的时候,流程就全部走完了。
    • 当流程结束的时候,运行时的表(以act_ru开头的表)数据全部清空,历史表(以act_hi开头的表)数据修改 或者增加了数据
  • 相关阅读:
    【BZOJ 2124】【CodeVS 1283】等差子序列
    【BZOJ 1036】【ZJOI 2008】树的统计Count
    【BZOJ 1901】【ZJU 2112】Dynamic Rankings
    【BZOJ 3924】【ZJOI 2015】幻想乡战略游戏
    【BZOJ 4103】【THUSC 2015】异或运算
    【BZOJ 4513】【SDOI 2016】储能表
    【HDU 3622】Bomb Game
    【BZOJ 3166】【HEOI 2013】Alo
    【BZOJ 3530】【SDOI 2014】数数
    【BZOJ 4567】【SCOI 2016】背单词
  • 原文地址:https://www.cnblogs.com/shyroke/p/7994688.html
Copyright © 2011-2022 走看看