(六)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開頭的表)數據修改 或者增加了數據

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM