Activity 學習(二) 搭建第一個Activity流程框架


本次示例使用的IDER測試完成

測試背景 : xx餓了去飯店吃飯  需要先和服務員點餐  點完餐后服務員將菜品傳遞給廚師制作  制作完成后吃飽

一 :創建流程圖

  創建上一篇測試成功出現的BpmnFile

  測試環境不需要那么復雜,暫且先用到這幾個控件 其他的在此不做演示 可以自己進行測試

  1:開始畫流程圖

    1.StartEvent 開始按鈕(表明現在餓了要去吃飯)
    2.UserTask 任務按鈕(首先應該先到飯店進行點餐)
    3.UserTask 任務按鈕(服務員點完餐后要將菜品傳遞給廚師)
    4.UserTask 任務按鈕(廚師獲得菜品后制作菜品)
    5.EndEvent 結束按鈕(上菜 吃飽了)

  2:按鈕配置詳情   

  將按鈕參數賦值(我這里只測試了 Id 和 Name  這里如果填寫的話   之后生成的數據庫數據就不是null了)

  3:流程按鈕配置完成后用連接線連接(這里我沒有給線起名字  后面也不妨礙)

  4:將創建的eat.bpmn生成一個png格式的圖片,上一篇也說了 IDEA與Eclipse有一點不一樣。 IDEA中需要手動進行生成。

  5:將bpmn后綴改為xml格式(這里有可能出現亂碼情況)

    解決亂碼

    5.1:首先打開ider安裝目錄的bin文件夾下的這兩個文件

    5.2:添加這句代碼    -Dfile.encoding=UTF-8

  保存內容,然后重啟IDEA,就會發現不會亂碼了。效果如圖:

  6:右鍵xml文件  選擇Diagrams ---- Show BPMN 2.0 Designer...

  7:點擊上方Export to File

         保存到對應的工程下面即可。就會看到有個eat.png的圖片出現

  其實改不改回來格式都一樣,除非你再去修改流程圖

  下面到了代碼階段(碰了好多壁,直接粘測試好的內容吧)

  8:添加依賴(這里引用的是gradle的)

    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40'

    compile group: 'org.activiti', name: 'activiti-engine', version: '5.22.0'
    compile group: 'org.activiti', name: 'activiti-spring', version: '5.22.0'
    compile group: 'org.activiti', name: 'activiti-bpmn-model', version: '5.22.0'

  9:在src目錄下創建一個activiti.cfg.xml文件,這個主要是用於存放后面acitivi部署流程中,創建的相關聯的一些表。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=utf8"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="root"></property>
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>
</beans>

  10:創建一個數據庫生成的測試。(注意:要保證本地有對應名字的數據庫)

/**
 * 創建一個數據庫生成的測試類.(注意:要保證本地有對應名字的數據庫)
 */
public class ActivitiTable {

    /**
     * 創建Activiti流的相關的數據庫表
     */
    @Test
    public void creatTable(){
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
                .buildProcessEngine();
    }
}

  如果,運行測試方法成功之后,再進入數據庫,我們會看到產生了如下多張數據表(看別人的都是23張 我的出來25張  最之前jar包引的太亂出現表還不正確也是煩的一批)

表的詳解就不在這說了網上都有的就不做分析了

  11:進行流程部署的重點開發(按照下面的流程步驟11進行)------------畫重點考試要考的

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.task.Task;
import org.junit.Test;

import java.util.List;

/**
 * 用於進行演示Activiti的首例程序,即描述如何在代碼中實現學生進行請假申請,班主任審核,教務處審核
 **/
public class ActivitiTest {


    /**
     * 1、部署流程
     * 2、啟動流程實例
     * 3、餓了的人發出點餐申請
     * 4、服務員查看任務
     * 5、服務員點餐
     * 6、廚師做飯
     */



    /**
     * 1:部署一個Activiti流程
     * 運行成功后,查看之前的數據庫表,就會發現多了很多內容
     */
    @Test
    public void creatActivitiTask(){
        //加載的那兩個內容就是我們之前已經弄好的基礎內容哦。
        //得到了流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRepositoryService()
                .createDeployment()
                .addClasspathResource("eat.xml")
                .addClasspathResource("eat.png")
                .deploy();
    }
    /**
     * 2:啟動流程實例
     */
    @Test
    public void testStartProcessInstance(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRuntimeService()
                .startProcessInstanceById("myProcess_1:1:4");  //這個是查看數據庫中act_re_procdef表ID值
    }
    /**
     * 完成點餐申請
     */
    @Test
    public void testOrder(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getTaskService()
                .complete("2504"); //查看act_ru_task表ID
    }

    /**
     * 餓了 服務員小張查詢當前正在執行任務
     */
    @Test
    public void testQueryTask(){
        //下面代碼中的小張,就是我們之前設計那個流程圖中添加的服務員內容
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        List<Task> tasks = processEngine.getTaskService()
                .createTaskQuery()
                .taskAssignee("小張")
                .list();
        for (Task task : tasks) {
            System.out.println(task.getName());
        }
    }

    /**
     * 服務員小張完成任務
     */
    @Test
    public void testFinishTask_manager(){
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        engine.getTaskService()
                .complete("5002"); //查看act_ru_task數據表ID
    }

    /**
     * 廚師老李完成的任務
     */
    @Test
    public void testFinishTask_Boss(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getTaskService()
                .complete("7502");  //查看act_ru_task數據表ID
    }

}

  一個一個Test方法來注意表的變化(字段有的太多了就不放兩張圖了,測試的時候自己注意下)

  下面就放圖看一下數據變化吧!

  多圖警告!后方高能!!!

 

第一步

  獲取流程引擎:注意這幾張表的數據變化

bytearray表

deployment表

procdef表

第二步

  啟動流程示例,注意這幾張表的變化

actinst表

procinst表

taskinst表

execution表

task表

第三步

actinst表

taskinst表

identitylink表

execution表

identitylink表

task表

第四步

第五步

actinst表

identitylink表

taskinst表

execution表

identitylink表

task表

第六步

actinst表

taskinst表

execution表

identitylink表

task表

一個個@Test測試過來,看出其中的規律了嗎,自己嘗試測試看一下吧!

 最后附上測試代碼 僅供參考:提取碼: n7cj


免責聲明!

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



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