日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activiti最全入门教程

發布時間:2025/3/21 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activiti最全入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工作流(Workflow),就是“業務過程的部分或整體在計算機應用環境下的自動化”,它主要解決的是“使在多個參與者之間按照某種預定義的規則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現”。?
工作流管理系統(Workflow Management System, WfMS)是一個軟件系統,它完成工作量的定義和管理,并按照在系統中預先定義好的工作流規則進行工作流實例的執行。工作流管理系統不是企業的業務系統,而是為企業的業務系統的運行提供了一個軟件的支撐環境。?
工作流管理聯盟(WfMC,Workflow Management Coalition)給出的關于工作流管理系統的定義是:工作流管理系統是一個軟件系統,它通過執行經過計算的流程定義去支持一批專門設定的業務流程。工作流管理系統被用來定義、管理、和執行工作流程。?
工作流管理系統的目標:管理工作的流程以確保工作在正確的時間被期望的人員所執行——在自動化進行的業務過程中插入人工的執行和干預。?
3:Activiti介紹?
Activiti5是由Alfresco軟件在2010年5月17日發布的業務流程管理(BPM)框架,它是覆蓋了業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。Activiti基于Apache許可的開源BPM平臺,創始人Tom Baeyens是JBoss jBPM的項目架構師,它特色是提供了eclipse插件,開發人員可以通過插件直接繪畫出業務?
流程圖。?

3.1:工作流引擎?
ProcessEngine對象,這是Activiti工作的核心。負責生成流程運行時的各種實例及數據、監控和管理流程的運行。?
3.2:BPMN?
業務流程建模與標注(Business Process Model and Notation,BPMN) ,描述流程的基本符號,包括這些圖元如何組合成一個業務流程圖(Business Process Diagram)

3.3:數據庫(先了解后看)?
Activiti數據庫支持:?
Activiti的后臺是有數據庫的支持,所有的表都以ACT_開頭。 第二部分是表示表的用途的兩個字母標識。 用途也和服務的API對應。?
ACT_RE_*: ‘RE’表示repository。 這個前綴的表包含了流程定義和流程靜態資源 (圖片,規則,等等)。?
ACT_RU_*: ‘RU’表示runtime。 這些運行時的表,包含流程實例,任務,變量,異步任務,等運行中的數據。 Activiti只在流程實例執行過程中保存這些數據, 在流程結束時就會刪除這些記錄。 這樣運行時表可以一直很小速度很快。?
ACT_ID_*: ‘ID’表示identity。 這些表包含身份信息,比如用戶,組等等。?
ACT_HI_*: ‘HI’表示history。 這些表包含歷史數據,比如歷史流程實例, 變量,任務等等。?
ACT_GE_*: 通用數據, 用于不同場景下,如存放資源文件。

表結構操作:?
3.3.1:資源庫流程規則表?
1) act_re_deployment 部署信息表?
2) act_re_model 流程設計模型部署表?
3) act_re_procdef 流程定義數據表?
3.3.2:運行時數據庫表?
1) act_ru_execution 運行時流程執行實例表?
2) act_ru_identitylink 運行時流程人員表,主要存儲任務節點與參與者的相關信息?
3) act_ru_task 運行時任務節點表?
4) act_ru_variable 運行時流程變量數據表?
3.3.3:歷史數據庫表?
1) act_hi_actinst 歷史節點表?
2) act_hi_attachment 歷史附件表?
3) act_ih_comment 歷史意見表?
4) act_hi_identitylink 歷史流程人員表?
5) act_hi_detail 歷史詳情表,提供歷史變量的查詢?
6) act_hi_procinst 歷史流程實例表?
7) act_hi_taskinst 歷史任務實例表?
8) act_hi_varinst 歷史變量表?
3.3.4:組織機構表?
1) act_id_group 用戶組信息表?
2) act_id_info 用戶擴展信息表?
3) act_id_membership 用戶與用戶組對應信息表?
4) act_id_user 用戶信息表?
這四張表很常見,基本的組織機構管理,關于用戶認證方面建議還是自己開發一套,組件自帶的功能太簡單,使用中有很多需求難以滿足?
3.3.5:通用數據表?
1) act_ge_bytearray 二進制數據表?
2) act_ge_property 屬性數據表存儲整個流程引擎級別的數據,初始化表結構時,會默認插入三條記錄,?
3.4:activiti.cfg.xml(activiti的配置文件)?
Activiti核心配置文件,配置流程引擎創建工具的基本參數和數據庫連接池參數。?
定義數據庫配置參數:?
? jdbcUrl: 數據庫的JDBC URL。?
? jdbcDriver: 對應不同數據庫類型的驅動。?
? jdbcUsername: 連接數據庫的用戶名。?
? jdbcPassword: 連接數據庫的密碼。?
基于JDBC參數配置的數據庫連接 會使用默認的MyBatis連接池。 下面的參數可以用來配置連接池(來自MyBatis參數):?
? jdbcMaxActiveConnections: 連接池中處于被使用狀態的連接的最大值。默認為10。?
? jdbcMaxIdleConnections: 連接池中處于空閑狀態的連接的最大值。?
? jdbcMaxCheckoutTime: 連接被取出使用的最長時間,超過時間會被強制回收。 默認為20000(20秒)。?
? jdbcMaxWaitTime: 這是一個底層配置,讓連接池可以在長時間無法獲得連接時, 打印一條日志,并重新嘗試獲取一個連接。(避免因為錯誤配置導致沉默的操作失敗)。 默認為20000(20秒)。?
示例數據庫配置:?

也可以使用javax.sql.DataSource。 (比如,Apache Commons的DBCP):?
?
3.5:logging.properties(日志處理)?
日志的配置文件,Activiti操作數據庫的時候,整合的日志文件?
4:準備環境?
4.1:activiti5 軟件環境?
1) JDK1.6或者更高版本?
2) 支持的數據庫有:h2, mysql, oracle, postgres, mssql, db2等。?
3) 支持activiti5運行的jar包?
4) 開發環境為Eclipse3.7或者以上版本,myeclipse為8.6版本?
4.2:相關資源下載?
1) JDK可以到sun的官網下載?
http://www.oracle.com/technetwork/java/javase/downloads/index.html?
2) 數據庫,例如:mysql可以在官網上下載。?
http://www.mysql.com?
3) activiti也可以到Activiti官方網站下載得到。?
http://activiti.org/download.html?
4) Eclipse3.7或者MyEclipse8.6也可以到相應的網站上獲得下載。?
4.3:安裝流程設計器(eclipse插件)?
4.3.1:安裝方式一?
在有網絡的情況下,安裝流程設計器步驟如下:?
1) 打開 Help -> Install New Software. 在如下面板中:?

2) 在如下Install界面板中,點擊Add按鈕:?
?
配置新裝插件的地址和名稱

3) 然后填入下列字段?
Name: Activiti BPMN 2.0 designer?
Location:?http://activiti.org/designer/update/?
?
4) 回到Install界面,在面板正中列表中把所有展示出來的項目都勾上:?
?
5) 點擊復選框?
在Detail部分記得選中 “Contact all updates sites..” , 因為它會檢查所有當前安裝所需要的插件并可以被Eclipse下載.

6) 安裝完以后,點擊新建工程new->Other…打開面板,如果看到下圖內容:?
?
說明安裝成功了。?
4.3.2:安裝方式二?
在沒有網絡的情況下,安裝流程設計器步驟如下:?
1) 解壓老師發給大家的 壓縮包?
2) 把壓縮包中的內容放入eclipse根目錄的dropins文件夾下?
3) 重啟eclipse,點擊新建工程new->Other…打開面板,如果看到下圖內容:?
?
說明安裝成功了?
4.4:對流程設計器的使用說明?
打開菜單Windows->Preferences->Activiti->Save下流程流程圖片的生成方式:?
?
雖然流程引擎在單獨部署bpmn文件時會自動生成圖片,但在實際開發過程中,自動生成的圖片會導致和BPMN中的坐標有出入,在實際項目中展示流程當前位置圖會有問題。?
所在完成以上配置后,會由我們自己來管理流程圖片。在發布流程時把流程規則文件和流程圖片一起上傳就行了。?
4.5:準備Activiti5開發環境?
4.5.1:添加Activiti5的jar包?
在activiti-5.13->wars目錄下是一些示例項目,解壓activiti-rest項目,導入activiti-rest目錄中WEB-INF\lib下所有包。添加到classpath中。?
由于我們使用的是Mysql數據庫,Mysql數據庫的鏈接驅動Activiti官方包中并沒有提供,需要我們自己導入。手動導入mysql-connector-java.jar,添加到classpath下。?
4.5.2:初始化數據庫?

在Activiti中,在創建核心的流程引擎對象時會自動建表。如果程序正常執行,mysql會自動建庫,然后創建23張表。

4.5.3:添加并制定配置文件?
在Actiiti5中定制流程必定會操作到數據庫,如果都像上面那樣寫一大段代碼會非常麻煩,所以我們可以把數據庫連接配置寫入配置文件。?
在Activiti5的官方示例中并沒有現成的配置文件,所以先得找到activiti-rest\WEB-INF\classes下有:

4.5.3.1:activiti-context.xml :?
一個類似spring結構的配置文件,清空內容后改名為activiti.cfg.xml,用來做流程引擎的相關配置。?
按照上面代碼配置ProcessEngineConfiguration對象,主要定義數據庫的連接配置和建表策略,配置文件代碼如下:?

Java代碼如下:?

createProcessEngineConfigurationFromResource的參數值為我們添加的配置文件activiti.cfg.xml的名稱,執行java代碼,流程引擎對象創建成功運行后數據庫會自動建表。

?
  • /**使用代碼創建工作流需要的23張表*/

  • @Test

  • public void createTable(){

  • ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();

  • //連接數據庫的配置

  • processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");

  • processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/shareniu?useUnicode=true&characterEncoding=utf8");

  • processEngineConfiguration.setJdbcUsername("root");

  • processEngineConfiguration.setJdbcPassword("root");

  • ?
  • /**

  • public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自動創建表,需要表存在

  • public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先刪除表再創建表

  • public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自動創建表

  • */

  • processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

  • //工作流的核心對象,ProcessEnginee對象

  • ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();

  • System.out.println("processEngine:"+processEngine);

  • }

  • ?
  • /**使用配置文件創建工作流需要的23張表*/

  • @Test

  • public void createTable_2(){

  • // ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");

  • // //工作流的核心對象,ProcessEnginee對象

  • // ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();

  • ?
  • ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml") //

  • .buildProcessEngine();

  • System.out.println("processEngine:"+processEngine);

  • }

  • 4.5.3.2:log4j.properties 日志配置文件?
    把兩個文件放入resource目錄下即可。

    5:核心API?
    5.1:ProcessEngine?
    說明:?
    1) 在Activiti中最核心的類,其他的類都是由他而來。?
    2) 產生方式:

    在前面看到了兩種創建ProcessEngine(流程引擎)的方式,而這里要簡化很多,調用ProcessEngines的getDefaultProceeEngine方法時會自動加載classpath下名為activiti.cfg.xml文件。?
    3) 可以產生RepositoryService

    4) 可以產生RuntimeService

    5) 可以產生TaskService

    各個Service的作用:?
    RepositoryService 管理流程定義?
    RuntimeService 執行管理,包括啟動、推進、刪除流程實例等操作?
    TaskService 任務管理?
    HistoryService 歷史管理(執行完的數據的管理)?
    IdentityService 組織機構管理?
    FormService 一個可選服務,任務表單管理?
    ManagerService

    5.2:RepositoryService?
    是Activiti的倉庫服務類。所謂的倉庫指流程定義文檔的兩個文件:bpmn文件和流程圖片。?
    1) 產生方式

    2) 可以產生DeploymentBuilder,用來定義流程部署的相關參數

    3) 刪除流程定義

    5.3:RuntimeService?
    是activiti的流程執行服務類。可以從這個服務類中獲取很多關于流程執行相關的信息。?
    5.4:TaskService?
    是activiti的任務服務類??梢詮倪@個類中獲取任務的信息。?
    5.5:HistoryService?
    是activiti的查詢歷史信息的類。在一個流程執行完成后,這個對象為我們提供查詢歷史信息。?
    5.6:ProcessDefinition?
    流程定義類??梢詮倪@里獲得資源文件等。?
    5.7:ProcessInstance?
    代表流程定義的執行實例。如范冰冰請了一天的假,她就必須發出一個流程實例的申請。一個流程實例包括了所有的運行節點。我們可以利用這個對象來了解當前流程實例的進度等信息。流程實例就表示一個流程從開始到結束的最大的流程分支,即一個流程中流程實例只有一個。?
    5.8:Execution?
    Activiti用這個對象去描述流程執行的每一個節點。在沒有并發的情況下,Execution就是同ProcessInstance。流程按照流程定義的規則執行一次的過程,就可以表示執行對象Execution。?
    如圖為ProcessInstance的源代碼:?

    從源代碼中可以看出ProcessInstance就是Execution。但在現實意義上有所區別:?
    ?
    在單線流程中,如上圖的貸款流程,ProcessInstance與Execution是一致的。?
    ?
    這個例子有一個特點:wire money(匯錢)和archive(存檔)是并發執行的。 這個時候,總線路代表ProcessInstance,而分線路中每個活動代表Execution。?
    總結:?
    * 一個流程中,執行對象可以存在多個,但是流程實例只能有一個。?
    * 當流程按照規則只執行一次的時候,那么流程實例就是執行對象。

    6:HelloWorld程序(模擬流程的執行)?
    6.1:流程圖:

    ?
    6.2:部署流程定義?
    ?
    這里使用RepositoryService部署流程定義?
    addClasspathResource表示從類路徑下加載資源文件,一次只能加載一個文件?
    6.3:啟動流程實例?
    ?
    這里使用RuntimeService啟動流程實例?
    6.4:查看我的個人任務?
    ?
    這里使用TaskService完成任務的查詢?
    6.5:完成我的個人任務?
    ?
    這里使用TaskService完成任務的辦理

    7:管理流程定義?
    7.1:設計流程定義文檔?
    7.1.1:流程圖?
    ?
    7.1.2:bpmn文件?
    BPMN 2.0根節點是definitions節點。 這個元素中,可以定義多個流程定義(不過我們建議每個文件只包含一個流程定義, 可以簡化開發過程中的維護難度)。 一個空的流程定義看起來像下面這樣。注意,definitions元素 最少也要包含xmlns 和 targetNamespace的聲明。 targetNamespace可以是任意值,它用來對流程實例進行分類。?
    ?
    說明:流程定義文檔有兩部分組成:?
    1) bpmn文件?
    流程規則文件。在部署后,每次系統啟動時都會被解析,把內容封裝成流程定義放入項目緩存中。Activiti框架結合這個xml文件自動管理流程,流程的執行就是按照bpmn文件定義的規則執行的,bpmn文件是給計算機執行用的。?
    2) 展示流程圖的圖片?
    在系統里需要展示流程的進展圖片,圖片是給用戶看的。

    7.2:部署流程定義(classpath路徑加載文件)?
    ?
    說明:?
    1) 先獲取流程引擎對象:在創建時會自動加載classpath下的activiti.cfg.xml

    2) 首先獲得默認的流程引擎,通過流程引擎獲取了一個RepositoryService對象(倉庫對象)?
    3) 由倉庫的服務對象產生一個部署對象配置對象,用來封裝部署操作的相關配置。?
    4) 這是一個鏈式編程,在部署配置對象中設置顯示名,上傳流程定義規則文件?
    5) 向數據庫表中存放流程定義的規則信息。?
    6) 這一步在數據庫中將操作三張表:?
    a) act_re_deployment(部署對象表)?
    存放流程定義的顯示名和部署時間,每部署一次增加一條記錄。?
    ?

    Deployment deployment = processEngine.getRepositoryService()//?
    .createDeployment().name(“入門程序”)//?
    .addClasspathResource(“hello/helloworld.bpmn”)// 從classpath的資源中加載,一次只能加載一個文件?
    // .addClasspathResource(“diagrams/helloworld.png”)//?
    // 從classpath的資源中加載,一次只能加載一個文件?
    .deploy();?
    b) act_re_procdef(流程定義表)?
    存放流程定義的屬性信息,部署每個新的流程定義都會在這張表中增加一條記錄。?
    注意:當流程定義的key相同的情況下,使用的是版本升級?
    ?

    對應的封裝類:

    ?
  • public interface ProcessDefinition {

  • ?
  • String getId();

  • String getCategory();

  • String getName();

  • String getKey();

  • String getDescription();

  • int getVersion();

  • String getResourceName();

  • String getDeploymentId();

  • String getDiagramResourceName();

  • boolean hasStartFormKey();

  • boolean isSuspended();

  • }

  • 代碼的操作:?
    /* 查詢流程定義?/

    ?
  • @Test

  • public void findProcessDefinition() {

  • List<ProcessDefinition> list = processEngine.getRepositoryService()// 與流程定義和部署對象相關的Service

  • .createProcessDefinitionQuery()// 創建一個流程定義的查詢

  • /** 指定查詢條件,where條件 */

  • // .deploymentId(deploymentId)//使用部署對象ID查詢

  • // .processDefinitionId(processDefinitionId)//使用流程定義ID查詢

  • // .processDefinitionKey(processDefinitionKey)//使用流程定義的key查詢

  • // .processDefinitionNameLike(processDefinitionNameLike)//使用流程定義的名稱模糊查詢

  • ?
  • /** 排序 */

  • .orderByProcessDefinitionVersion().asc()// 按照版本的升序排列

  • // .orderByProcessDefinitionName().desc()//按照流程定義的名稱降序排列

  • ?
  • /** 返回的結果集 */

  • .list();// 返回一個集合列表,封裝流程定義

  • // .singleResult();//返回惟一結果集

  • // .count();//返回結果集數量

  • // .listPage(firstResult, maxResults);//分頁查詢

  • if (list != null && list.size() > 0) {

  • for (ProcessDefinition pd : list) {

  • System.out.println("流程定義ID:" + pd.getId());// 流程定義的key+版本+隨機生成數

  • System.out.println("流程定義的名稱:" + pd.getName());// 對應helloworld.bpmn文件中的name屬性值

  • System.out.println("流程定義的key:" + pd.getKey());// 對應helloworld.bpmn文件中的id屬性值

  • System.out.println("流程定義的版本:" + pd.getVersion());// 當流程定義的key值相同的相同下,版本升級,默認1

  • System.out.println("資源名稱bpmn文件:" + pd.getResourceName());

  • System.out.println("資源名稱png文件:" + pd.getDiagramResourceName());

  • System.out.println("部署對象ID:" + pd.getDeploymentId());

  • System.out

  • .println("#########################################################");

  • }

  • }

  • }

  • 程序的輸出:?
    流程定義ID:helloworld:1:4?
    流程定義的名稱:helloworldProcess?
    流程定義的key:helloworld?
    流程定義的版本:1?
    資源名稱bpmn文件:hello/helloworld.bpmn?
    資源名稱png文件:hello/helloworld.helloworld.png?
    部署對象ID:1?
    c) act_ge_bytearray(資源文件表)?
    存儲流程定義相關的部署信息。即流程定義文檔的存放地。每部署一次就會增加兩條記錄,一條是關于bpmn規則文件的,一條是圖片的(如果部署時只指定了bpmn一個文件,activiti會在部署時解析bpmn文件內容自動生成流程圖)。兩個文件不是很大,都是以二進制形式存儲在數據庫中。?

    7.3:部署流程定義(zip格式文件)?
    ?
    ?
    將?
    壓縮成zip格式的文件,使用zip的輸入流用作部署流程定義

    7.4:查看流程定義?
    查詢流程定義的信息?
    ?
    結果:?
    ?
    再部署一次運行結果為:?
    ?
    可以看到流程定義的key值相同的情況下,版本是從1開始逐次升級的?
    流程定義的Id是【key:版本:生成ID】?
    說明:?
    1) 流程定義和部署對象相關的Service都是RepositoryService。?
    2) 創建流程定義查詢對象,可以在ProcessDefinitionQuery上設置查詢的相關參數?
    3) 調用ProcessDefinitionQuery對象的list方法,執行查詢,獲得符合條件的流程定義列表?
    4) 由運行結果可以看出:?
    Key和Name的值為:bpmn文件process節點的id和name的屬性值?
    ?
    5) key屬性被用來區別不同的流程定義。?
    6) 帶有特定key的流程定義第一次部署時,version為1。之后每次部署都會在當前最高版本號上加1?
    7) Id的值的生成規則為:{processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 這里的generated-id是一個自動生成的唯一的數字?
    8) 重復部署一次,deploymentId的值以一定的形式變化?
    規則act_ge_property表生成?
    ?
    7.5:刪除流程定義?
    刪除部署到activiti中的流程定義。?
    ?
    說明:?
    1) 因為刪除的是流程定義,而流程定義的部署是屬于倉庫服務的,所以應該先得到RepositoryService?
    2) 如果該流程定義下沒有正在運行的流程,則可以用普通刪除。如果是有關聯的信息,用級聯刪除。項目開發中使用級聯刪除的情況比較多,刪除操作一般只開放給超級管理員使用。?
    7.6:獲取流程定義文檔的資源(查看流程圖附件)?
    查詢出流程定義文檔。主要查的是圖片,用于顯示流程用。?
    ?
    說明:?
    1) deploymentId為流程部署ID?
    2) resourceName為act_ge_bytearray表中NAME_列的值?
    3) 使用repositoryService的getDeploymentResourceNames方法可以獲取指定部署下得所有文件的名稱?
    4) 使用repositoryService的getResourceAsStream方法傳入部署ID和資源圖片名稱可以獲取部署下指定名稱文件的輸入流?
    5) 最后的有關IO流的操作,使用FileUtils工具的copyInputStreamToFile方法完成流程流程到文件的拷貝,將資源文件以流的形式輸出到指定文件夾下?
    7.7:附加功能:查詢最新版本的流程定義?
    ?
    Key value保存 key 為key value為流程定義?
    代碼:?
    /*附加功能:查詢最新版本的流程定義*/

    ?
  • @Test

  • public void findLastVersionProcessDefinition(){

  • List<ProcessDefinition> list = processEngine.getRepositoryService()//

  • .createProcessDefinitionQuery()//

  • .orderByProcessDefinitionVersion().asc()//使用流程定義的版本升序排列

  • .list();

  • /**

  • * Map<String,ProcessDefinition>

  • map集合的key:流程定義的key

  • map集合的value:流程定義的對象

  • map集合的特點:當map集合key值相同的情況下,后一次的值將替換前一次的值

  • */

  • Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();

  • if(list!=null && list.size()>0){

  • for(ProcessDefinition pd:list){

  • map.put(pd.getKey(), pd);

  • }

  • }

  • List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());

  • if(pdList!=null && pdList.size()>0){

  • for(ProcessDefinition pd:pdList){

  • System.out.println("流程定義ID:"+pd.getId());//流程定義的key+版本+隨機生成數

  • System.out.println("流程定義的名稱:"+pd.getName());//對應helloworld.bpmn文件中的name屬性值

  • System.out.println("流程定義的key:"+pd.getKey());//對應helloworld.bpmn文件中的id屬性值

  • System.out.println("流程定義的版本:"+pd.getVersion());//當流程定義的key值相同的相同下,版本升級,默認1

  • System.out.println("資源名稱bpmn文件:"+pd.getResourceName());

  • System.out.println("資源名稱png文件:"+pd.getDiagramResourceName());

  • System.out.println("部署對象ID:"+pd.getDeploymentId());

  • System.out.println("#########################################################");

  • }

  • }

  • }

  • 7.8:附加功能:刪除流程定義(刪除key相同的所有不同版本的流程定義)?

    ?
  • @Test

  • public void deleteProcessDefinitionByKey() {

  • // 流程定義的key

  • String processDefinitionKey = "helloworld";

  • // 先使用流程定義的key查詢流程定義,查詢出所有的版本

  • List<ProcessDefinition> list = processEngine.getRepositoryService()//

  • .createProcessDefinitionQuery()//

  • .processDefinitionKey(processDefinitionKey).list();//

  • // 遍歷,獲取每個流程定義的部署ID

  • if (list != null && list.size() > 0) {

  • for(ProcessDefinition pd:list){

  • //獲取部署ID

  • String deploymentId = pd.getDeploymentId();

  • processEngine.getRepositoryService()//

  • .deleteDeployment(deploymentId, true);

  • }

  • }

  • }

  • 7.9:總結?
    Deployment 部署對象?
    1、一次部署的多個文件的信息。對于不需要的流程可以刪除和修改。?
    2、對應的表:?
    act_re_deployment:部署對象表?
    act_re_procdef:流程定義表?
    act_ge_bytearray:資源文件表?
    act_ge_property:主鍵生成策略表

    ProcessDefinition 流程定義?
    1、解析.bpmn后得到的流程定義規則的信息,工作流系統就是按照流程定義的規則執行的。

    8:流程實例、任務的執行?
    8.1:流程圖?
    ?
    8.2:部署流程定義?
    ?
    8.3:啟動流程實例?

    說明:?
    1) 操作數據庫的act_ru_execution表,如果是用戶任務節點,同時也會在act_ru_task添加一條記錄?
    act_ru_execution表,#正在執行的執行對象表 任務結束的之前只有 一個 變化的字段是act_id?

    8.4:查詢我的個人任務?

    ?
  • @Test

  • public void findMyPersonalTask(){

  • String assignee = "王五";

  • List<Task> list = processEngine.getTaskService()//與正在執行的任務管理相關的Service

  • .createTaskQuery()//創建任務查詢對象

  • /**查詢條件(where部分)*/

  • .taskAssignee(assignee)//指定個人任務查詢,指定辦理人

  • // .taskCandidateUser(candidateUser)//組任務的辦理人查詢

  • // .processDefinitionId(processDefinitionId)//使用流程定義ID查詢

  • // .processInstanceId(processInstanceId)//使用流程實例ID查詢

  • // .executionId(executionId)//使用執行對象ID查詢

  • /**排序*/

  • .orderByTaskCreateTime().asc()//使用創建時間的升序排列

  • /**返回結果集*/

  • // .singleResult()//返回惟一結果集

  • // .count()//返回結果集的數量

  • // .listPage(firstResult, maxResults);//分頁查詢

  • .list();//返回列表

  • if(list!=null && list.size()>0){

  • for(Task task:list){

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

  • System.out.println("執行對象ID:"+task.getExecutionId());

  • System.out.println("流程定義ID:"+task.getProcessDefinitionId());

  • System.out.println("########################################################");

  • }

  • }

  • }

  • 輸出:?
    任務ID:504?
    任務名稱:提交申請?
    任務的創建時間:Sat Aug 09 08:50:20 CST 2014?
    任務的辦理人:張三?
    流程實例ID:501?
    執行對象ID:501?
    流程定義ID:helloworld:1:404?
    接口:

    ?
  • public interface Task {

  • int DEFAULT_PRIORITY = 50;

  • String getId(); String getName();

  • void setName(String name);

  • String getDescription();

  • void setDescription(String description);

  • int getPriority();

  • void setPriority(int priority);

  • String getOwner();

  • void setOwner(String owner);

  • String getAssignee();

  • void setAssignee(String assignee); DelegationState getDelegationState();

  • void setDelegationState(DelegationState delegationState);

  • String getProcessInstanceId();

  • String getExecutionId();

  • String getProcessDefinitionId();

  • Date getCreateTime();

  • String getTaskDefinitionKey();

  • Date getDueDate();

  • void setDueDate(Date dueDate);

  • void delegate(String userId);

  • void setParentTaskId(String parentTaskId);

  • String getParentTaskId();

  • boolean isSuspended();

  • Map<String, Object> getTaskLocalVariables();

  • Map<String, Object> getProcessVariables();

  • }

  • 說明:?
    1) 因為是任務查詢,所以從processEngine中應該得到TaskService?
    2) 使用TaskService獲取到任務查詢對象TaskQuery?
    3) 為查詢對象添加查詢過濾條件,使用taskAssignee指定任務的辦理者(即查詢指定用戶的代辦任務),同時可以添加分頁排序等過濾條件?
    4) 調用list方法執行查詢,返回辦理者為指定用戶的任務列表?
    5) 任務ID、名稱、辦理人、創建時間可以從act_ru_task表中查到。?
    6) Execution與ProcessInstance見5.6和5.7章節的介紹。在這種情況下,ProcessInstance相當于Execution?
    7) 如果assignee屬性為部門經理,結果為空。因為現在流程只到了”填寫請假申請”階段,后面的任務還沒有執行,即在數據庫中沒有部門經理可以辦理的任務,所以查詢不到。?
    8) 一個Task節點和Execution節點是1對1的情況,在task對象中使用Execution_來表示他們之間的關系?
    9) 任務ID在數據庫表act_ru_task中對應“ID_”列

    附加:?
    在activiti任務中,主要分為兩大類查詢任務(個人任務和組任務):?
    1.確切指定了辦理者的任務,這個任務將成為指定者的私有任務,即個人任務。?
    2.無法指定具體的某一個人來辦理的任務,可以把任務分配給幾個人或者一到 多個小組,讓這個范圍內的用戶可以選擇性(如有空余時間時)來辦理這類任務,即組任務。?
    先知道個人任務的查詢和辦理,組任務的操作后面講

    8.5:辦理任務?

    說明:?
    1) 是辦理任務,所以從ProcessEngine得到的是TaskService。?
    2) 當執行完這段代碼,再以員工的身份去執行查詢的時候,會發現這個時候已經沒有數據了,因為正在執行的任務中沒有數據。?
    3) 對于執行完的任務,activiti將從act_ru_task表中刪除該任務,下一個任務會被插入進來。?
    4) 以”部門經理”的身份進行查詢,可以查到結果。因為流程執行到部門經理審批這個節點了。?
    5) 再執行辦理任務代碼,執行完以后以”部門經理”身份進行查詢,沒有結果。?
    6) 重復第3和4步直到流程執行完。?
    act_ru_task表:?

    8.6:查詢流程狀態(判斷流程正在執行,還是結束)?
    ?
    /* 查詢流程狀態(判斷流程正在執行,還是結束)?/

    ?
  • @Test

  • public void isProcessEnd() {

  • String processInstanceId = "501";

  • ProcessInstance pi = processEngine.getRuntimeService()// 表示正在執行的流程實例和執行對象

  • .createProcessInstanceQuery()// 創建流程實例查詢

  • .processInstanceId(processInstanceId)// 使用流程實例ID查詢

  • .singleResult();

  • if (pi == null) {

  • System.out.println("流程已經結束");

  • } else {

  • System.out.println("流程沒有結束");

  • }

  • }

  • ?
  • 在流程執行的過程中,創建的流程實例ID在整個過程中都不會變,當流程結束后,流程實例將會在正在執行的執行對象表中(act_ru_execution)被刪除

  • 說明:

  • 1) 因為是查詢流程實例,所以先獲取runtimeService?
    2) 創建流程實例查詢對象,設置實例ID過濾參數?
    3) 由于一個流程實例ID只對應一個實例,使用singleResult執行查詢返回一個唯一的結果,如果結果數量大于1,則拋出異常?
    4) 判斷指定ID的實例是否存在,如果結果為空,則代表流程結束,實例在正在執行的執行對象表中已被刪除,轉換成歷史數據。?
    8.7:附加功能:查詢歷史任務(后面講)?
    ?
    /*查詢歷史任務(后面講)/

    ?
  • @Test

  • public void findHistoryTask(){

  • String taskAssignee = "張三";

  • List<HistoricTaskInstance> list = processEngine.getHistoryService()//與歷史數據(歷史表)相關的Service

  • .createHistoricTaskInstanceQuery()//創建歷史任務實例查詢

  • .taskAssignee(taskAssignee)//指定歷史任務的辦理人

  • .list();

  • if(list!=null && list.size()>0){

  • for(HistoricTaskInstance hti:list){

  • System.out.println(hti.getId()+" "+hti.getName()+" "+hti.getProcessInstanceId()+" "+hti.getStartTime()+" "+hti.getEndTime()+" "+hti.getDurationInMillis());

  • System.out.println("################################");

  • }

  • }

  • }

  • 表《HistoricTaskInstance》?
    8.8:附加功能:查詢歷史流程實例(后面講)

    ?
    8.9:總結?
    Execution 執行對象?
    按流程定義的規則執行一次的過程.?
    對應的表:?
    act_ru_execution: 正在執行的信息?
    act_hi_procinst:已經執行完的歷史流程實例信息?
    act_hi_actinst:存放歷史所有完成的活動?
    ProcessInstance 流程實例?
    特指流程從開始到結束的那個最大的執行分支,一個執行的流程中,流程實例只有1個。

    注意?
    (1)如果是單例流程,執行對象ID就是流程實例ID?
    (2)如果一個流程有分支和聚合,那么執行對象ID和流程實例ID就不相同?
    (3)一個流程中,流程實例只有1個,執行對象可以存在多個。

    Task 任務?
    執行到某任務環節時生成的任務信息。?
    對應的表:?
    act_ru_task:正在執行的任務信息?
    act_hi_taskinst:已經執行完的歷史任務信息

    9:流程變量?
    9.1:流程圖?
    ?
    流程變量在整個工作流中扮演很重要的作用。例如:請假流程中有請假天數、請假原因等一些參數都為流程變量的范圍。流程變量的作用域范圍是只對應一個流程實例。也就是說各個流程實例的流程變量是不相互影響的。流程實例結束完成以后流程變量還保存在數據庫中。?
    例如:?

    即:

    9.2:部署流程定義?
    ?
    說明:?
    ? 輸入流加載資源文件的3種方式?
    ?

    9.3:啟動流程實例?
    ?
    9.4:設置流程變量?

    說明:?
    1) 流程變量的作用域就是流程實例,所以只要設置就行了,不用管在哪個階段設置?
    2) 基本類型設置流程變量,在taskService中使用任務ID,定義流程變量的名稱,設置流程變量的值。?
    3) Javabean類型設置流程變量,需要這個javabean實現了Serializable接口?
    4) 設置流程變量的時候,向act_ru_variable這個表添加數據

    9.5:獲取流程變量?

    說明:?
    1) 流程變量的獲取針對流程實例(即1個流程),每個流程實例獲取的流程變量時不同的?
    2) 使用基本類型獲取流程變量,在taskService中使用任務ID,流程變量的名稱,獲取流程變量的值。?
    3) Javabean類型設置獲取流程變量,除了需要這個javabean實現了Serializable接口外,還要求流程變量對象的屬性不能發生變化,否則拋出異常。?
    解決方案,在javabean對象中添加:?
    private static final long serialVersionUID = 6757393795687480331L;?
    9.6:模擬流程變量的設置和獲取的場景?
    ?
    說明:?
    1) RuntimeService對象可以設置流程變量和獲取流程變量?
    2) TaskService對象可以設置流程變量和獲取流程變量?
    3) 流程實例啟動的時候可以設置流程變量?
    4) 任務辦理完成的時候可以設置流程變量?
    5) 流程變量可以通過名稱/值的形式設置單個流程變量?
    6) 流程變量可以通過Map集合,同時設置多個流程變量?
    Map集合的key表示流程變量的名稱?
    Map集合的value表示流程變量的值

    9.7:查詢歷史的流程變量?
    ?
    說明:?
    1)歷史的流程變量查詢,指定流程變量的名稱,查詢act_hi_varinst表(也可以針對,流程實例ID,執行對象ID,任務ID查詢)

    9.8:流程變量的支持的類型?
    如圖是從官網列出來的流程變量的類型:?
    ?
    從圖中可以看出包括了大部分封裝類型和Date、String和實現了Serializable接口的類的類型。?
    9.9:總結?
    ? 1:流程變量?
    在流程執行或者任務執行的過程中,用于設置和獲取變量,使用流程變量在流程傳遞的過程中傳遞業務參數。?
    對應的表:?
    act_ru_variable:正在執行的流程變量表?
    act_hi_varinst:流程變量歷史表

    ? 2:擴展知識:setVariable和setVariableLocal的區別?
    setVariable:設置流程變量的時候,流程變量名稱相同的時候,后一次的值替換前一次的值,而且可以看到TASK_ID的字段不會存放任務ID的值?
    setVariableLocal:?
    1:設置流程變量的時候,針對當前活動的節點設置流程變量,如果一個流程中存在2個活動節點,對每個活動節點都設置流程變量,即使流程變量的名稱相同,后一次的版本的值也不會替換前一次版本的值,它會使用不同的任務ID作為標識,存放2個流程變量值,而且可以看到TASK_ID的字段會存放任務ID的值?
    例如act_hi_varinst 表的數據:不同的任務節點,即使流程變量名稱相同,存放的值也是不同的。?
    如圖:?

    2:還有,使用setVariableLocal說明流程變量綁定了當前的任務,當流程繼續執行時,下個任務獲取不到這個流程變量(因為正在執行的流程變量中沒有這個數據),所有查詢正在執行的任務時不能查詢到我們需要的數據,此時需要查詢歷史的流程變量。

    10:流程執行歷史記錄?
    10.1:查詢歷史流程實例?
    查找按照某個流程定義的規則一共執行了多少次流程?
    ?
    10.2:查詢歷史活動?
    某一次流程的執行一共經歷了多少個活動?
    ?
    10.3:查詢歷史任務?
    某一次流程的執行一共經歷了多少個任務?
    ?
    10.4:查詢歷史流程變量?
    某一次流程的執行一共設置的流程變量?
    ?
    10.5:總結?
    由于數據庫中保存著歷史信息以及正在運行的流程實例信息,在實際項目中對已完成任務的查看頻率遠不及對代辦和可接任務的查看,所以在activiti采用分開管理,把正在運行的交給RuntimeService、TaskService管理,而歷史數據交給HistoryService來管理。?
    這樣做的好處在于,加快流程執行的速度,因為正在執行的流程的表中數據不會很大。

    總結

    以上是生活随笔為你收集整理的Activiti最全入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    久久久久久久电影 | 在线观看黄色av | 国产欧美精品xxxx另类 | 国产成人精品一区二区三区 | 国产精品99久久99久久久二8 | 婷婷九月激情 | 国产精品久久久久久久妇 | 国产精品久久久久久久久久妇女 | 久久精品国产精品亚洲 | 91久久国产露脸精品国产闺蜜 | 9999在线视频 | 一区二区三区精品在线视频 | 欧美激情另类 | 亚洲国产电影在线观看 | 亚洲欧美日韩在线看 | 天天插夜夜操 | 啪啪午夜免费 | 亚洲国产97在线精品一区 | 国产精品 亚洲精品 | 中文字幕综合在线 | 国产午夜精品一区二区三区嫩草 | 久av电影| 九九九热精品免费视频观看 | 久久av在线播放 | 日韩草比| 天堂av免费观看 | 国产在线a视频 | 亚洲国产视频直播 | 91大神电影 | 青青草国产在线 | 久久久穴| 国产色秀视频 | 国产一区在线不卡 | 日韩精品久久一区二区 | 少妇搡bbbb搡bbb搡69 | 亚洲精品99| 国产又黄又爽又猛视频日本 | 久久综合狠狠综合久久激情 | 96精品视频 | 国产亚洲精品久久久久久网站 | 五月天婷婷免费视频 | 国产中文伊人 | 国产一级黄色电影 | 久久精品视频2 | 看全黄大色黄大片 | 久久久免费毛片 | 国产在线免费观看 | 视频国产区 | 精品国产伦一区二区三区免费 | 欧美婷婷综合 | 日日干激情五月 | 在线观看国产日韩 | 欧美日韩精品在线 | 成人av片免费看 | 久久精品123 | 成人影音av | av在线中文 | 黄色毛片大全 | 草久视频在线观看 | 日日摸日日碰 | 91精品黄色| 亚洲网站在线 | 精品久久久久国产免费第一页 | 亚洲精品影视 | 99精品在线直播 | 97视频在线观看免费 | 在线国产视频一区 | 亚洲国产精品免费 | 99视频在线免费播放 | 亚洲高清色综合 | 久久精品牌麻豆国产大山 | 欧美成人精品xxx | 国产又粗又猛又爽又黄的视频先 | 奇米网444 | 最新国产精品拍自在线播放 | 色综合激情久久 | 成人h动漫精品一区二 | 日韩中文字幕免费视频 | 亚洲精品玖玖玖av在线看 | 国产不卡av在线播放 | 天天天天射 | 韩国一区二区三区在线观看 | 中文av免费 | 日韩天天综合 | 国产精品va在线播放 | 久草在线视频新 | 国产精品igao视频网入口 | 夜夜天天干| av电影免费看 | 欧美成人tv | 日本久草电影 | 国产亚洲一级高清 | 精品久久久久久久久久国产 | 亚洲精品永久免费视频 | 在线观看视频三级 | 国产高清精 | 欧美伦理电影一区二区 | 亚洲欧美日韩在线看 | avove黑丝| 天天操天天操天天操天天操天天操天天操 | 99热这里有 | 久久爱资源网 | 久久黄色精品视频 | 国产第一页在线观看 | 国产日韩欧美在线观看 | 欧洲高潮三级做爰 | 国产日韩三级 | 在线看黄网站 | 欧美色插| 在线观看日韩一区 | 日韩欧美91| 成人久久久久久久久 | 国产激情电影综合在线看 | 黄色小说在线免费观看 | 一区二区视频在线看 | 五月婷婷六月丁香在线观看 | 日韩视频在线观看视频 | 日韩中字在线 | 免费av黄色 | 国产香蕉视频 | 欧美另类xxxx | 欧美日韩国产一区 | 精品亚洲免费 | 六月丁香久久 | 激情久久一区二区三区 | 成人影片在线播放 | 久久久久久高潮国产精品视 | 久久伊人五月天 | 国产69久久精品成人看 | 字幕网资源站中文字幕 | 91精品欧美 | 91人人在线| 国产精品一区免费看8c0m | 激情在线网址 | av大全免费在线观看 | 日日摸日日 | 一级黄色a视频 | 一区二区三区在线视频观看58 | 激情婷婷| 69国产盗摄一区二区三区五区 | 天天弄天天操 | 99视频网址 | 国产精品久久99综合免费观看尤物 | 91热这里只有精品 | 久久久蜜桃一区二区 | 超碰97国产精品人人cao | 视频一区二区精品 | 成人av在线网 | 98涩涩国产露脸精品国产网 | 在线精品视频免费观看 | 日韩av免费观看网站 | 色欧美综合 | 91免费在线 | 黄色免费高清视频 | 国产精品夜夜夜一区二区三区尤 | 一区二区三区免费网站 | 手机在线永久免费观看av片 | 免费av的网站 | 日韩美女av在线 | 欧美精品乱码久久久久 | 丁香五月网久久综合 | 国产一级免费播放 | 国产精品字幕 | 成人毛片在线观看视频 | av中文字幕在线电影 | 91九色视频在线播放 | 国产亚洲精品久久久久久无几年桃 | 国产午夜精品一区二区三区在线观看 | 免费视频黄 | 性日韩欧美在线视频 | 成人亚洲综合 | 国产精品久久久久久久久久直播 | 日韩在线免费 | 国产亚洲精品美女久久 | 亚洲黄色av网址 | 色偷偷男人的天堂av | 97国产大学生情侣白嫩酒店 | 久久成人国产精品免费软件 | 人人澡人 | www.com操| japanese黑人亚洲人4k | 免费看黄在线观看 | 欧美在线一级片 | 国产精品久久久久9999吃药 | 久久爱导航 | 国产亲近乱来精品 | av网址最新| 天天综合天天综合 | 午夜精品成人一区二区三区 | 欧美日韩中文在线观看 | 欧美一级特黄高清视频 | 久久只有精品 | 国产黄色观看 | 五月香视频在线观看 | japanese黑人亚洲人4k | 97国产大学生情侣酒店的特点 | 亚洲视频 中文字幕 | 国产精品一区二区久久久久 | 色偷偷88888欧美精品久久久 | 91精品伦理| 欧美激情综合五月色丁香 | 中文av在线天堂 | 日本电影黄色 | 欧美最猛性xxxxx(亚洲精品) | 久久精品导航 | 91综合视频在线观看 | 色婷婷一区 | 美女视频黄色免费 | 中文字幕一二三区 | 激情综合网在线观看 | 中文字幕xxxx | 亚洲在线成人精品 | 久久婷婷一区 | 人人盈棋牌 | 日韩乱码中文字幕 | 五月天色站 | 国产成人精品一区二区三区福利 | 狠狠色噜噜狠狠狠合久 | 中文字幕在线乱 | 日韩精品一区二区久久 | 欧美另类tv | 亚洲a色 | 黄色特级片| 在线看日韩 | 国产综合视频在线观看 | 三上悠亚一区二区在线观看 | 国产高清免费视频 | 91成人网页版 | 又黄又色又爽 | 91亚洲夫妻| 黄色成人在线 | 91福利视频久久久久 | 青青五月天 | 国产在线观看污片 | 色综久久| 久草剧场| 亚洲不卡av一区二区三区 | 久久久国产精品麻豆 | 国产精品对白一区二区三区 | av在线网站免费观看 | 亚洲综合色婷婷 | 在线影院中文字幕 | 成人黄色大片网站 | 91在线视频网址 | 欧美极品裸体 | 激情 婷婷| 亚洲精品九九 | 国产破处在线视频 | 久久亚洲私人国产精品 | 二区精品视频 | 国产精品系列在线播放 | 色综合天天狠天天透天天伊人 | 一区二区三区中文字幕在线观看 | 麻豆视频在线免费观看 | 二区三区在线观看 | 精品产品国产在线不卡 | 久久久精品视频成人 | 中文字幕一区二区三区视频 | 天天曰天天爽 | 91高清免费| 久久久久激情 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 成人黄色小说视频 | 久久视频一区 | 天天在线操 | 免费看成人片 | 在线播放第一页 | 正在播放 国产精品 | 天堂成人在线 | 国产成人一区二区在线观看 | 国产成人精品一区在线 | 成人免费 在线播放 | 天天躁日日躁狠狠躁 | 日韩视频一区二区 | 色偷偷97 | 欧美日韩不卡在线视频 | 特级免费毛片 | 91在线播放综合 | 婷婷在线免费视频 | 五月婷婷激情网 | 日本精品久久久久影院 | 在线视频福利 | 久久狠狠一本精品综合网 | 欧美在线资源 | 国产精品久久久精品 | 欧美贵妇性狂欢 | 欧美日韩中文字幕在线视频 | 91在线网站| 在线观看免费福利 | 国产精品18久久久 | 亚洲欧洲精品一区 | 久草在线观 | 日本精品视频免费观看 | 日日躁夜夜躁aaaaxxxx | 亚洲成熟女人毛片在线 | av电影av在线 | 久久天天躁夜夜躁狠狠85麻豆 | 婷婷视频在线播放 | 少妇bbw搡bbbb搡bbbb | 久久99久久99精品免观看粉嫩 | 免费视频你懂的 | 女女av在线 | 超碰97在线资源 | 国产在线自| 精品久久久久一区二区国产 | 91精品成人| 黄a在线看 | 国产精品欧美一区二区三区不卡 | 亚洲激情小视频 | 亚洲成人家庭影院 | 欧美日韩国产亚洲乱码字幕 | 日韩高清免费无专码区 | 蜜桃视频色| 国产在线a不卡 | 久久伦理电影网 | 91香蕉国产在线观看软件 | 91福利免费 | 骄小bbw搡bbbb揉bbbb | 欧美视频二区 | 日日干天天操 | 欧美精选一区二区三区 | 人人干网站| 国产精品久久久久久久久久久不卡 | 美女视频永久黄网站免费观看国产 | 欧美日韩视频在线观看一区二区 | 深夜视频久久 | 在线免费观看亚洲视频 | 91九色在线视频观看 | 日韩啪视频 | 久久综合婷婷 | 天天操天天干天天摸 | 97超碰超碰 | 夜夜操夜夜干 | 日日射天天射 | av888av.com | 香蕉精品视频在线观看 | 特黄一级毛片 | 天堂网一区| 综合网中文字幕 | 黄色在线观看污 | 亚洲最新合集 | 婷婷丁香色 | 国产一区免费在线观看 | 色老板在线视频 | 亚洲综合婷婷 | 在线免费91 | 欧美另类色图 | 欧美天天射 | 麻豆视频免费入口 | 婷婷开心久久网 | 国产精品一区二区三区免费视频 | 808电影 | 婷香五月| 欧美孕交vivoestv另类 | 色婷婷狠狠五月综合天色拍 | 特级黄色视频毛片 | 欧美人操人 | 久久草在线视频国产 | 国产一级在线 | 国产精品久久久久久超碰 | 国产亚洲人 | 久久精品免费 | 日韩一区二区三区免费视频 | 欧美a级在线播放 | 中文字幕黄色网址 | 黄色av观看| 免费看黄的视频 | 国产一区精品在线观看 | 免费观看黄色12片一级视频 | 在线a视频免费观看 | 成人免费看片98欧美 | 91精品国自产在线 | 玖玖视频精品 | 99色视频在线 | 人人天天夜夜 | 日本中文不卡 | 91丨九色丨国产丨porny精品 | 亚洲视频资源在线 | 就色干综合 | 国产精品免费在线观看视频 | 国产精品婷婷午夜在线观看 | 99精品视频在线 | 99久久精品视频免费 | 日韩欧美在线国产 | 久久免费的精品国产v∧ | 日韩精品播放 | 精品视频在线播放 | 狠狠狠色丁香婷婷综合激情 | a爱爱视频| 最新日韩电影 | 欧美日韩一二三四区 | 欧美福利久久 | 成人动漫一区二区三区 | 中文字幕最新精品 | 超级碰碰视频 | 国产在线一区观看 | 国产精品日韩在线播放 | 国产xvideos免费视频播放 | 欧美一区三区四区 | 国产手机视频 | 伊人天天综合 | 国产日韩av在线 | 91成人精品一区在线播放69 | 永久免费在线 | 久久久网页 | 中文字幕观看视频 | 中文字幕在线观看完整版 | 亚洲黄网站 | 日韩欧美视频免费观看 | 久久午夜影院 | 久草在线观看视频免费 | www.一区二区三区 | 深夜国产在线 | 亚洲欧美日本一区二区三区 | 欧美日韩视频免费看 | 日日噜噜噜噜夜夜爽亚洲精品 | 99精品视频免费看 | 久草在线视频首页 | 中文在线8资源库 | 国产日韩精品视频 | 亚洲三级在线免费观看 | 久久av免费电影 | 蜜臀av性久久久久av蜜臀妖精 | 久久国产精品视频观看 | 中文字幕在线视频一区 | 91黄色小视频 | 国产成人精品一区二区三区福利 | 国产在线毛片 | 久久精品一区二区三区中文字幕 | 日韩精品五月天 | 超碰人人超 | 97在线超碰 | 国产乱视频 | 国产免费不卡av | 国产亚洲精品久久久久久网站 | 中文字幕91视频 | 成人精品一区二区三区电影免费 | 久久精品国产久精国产 | 久久爱影视i | 欧美日韩高清一区二区 国产亚洲免费看 | 色噜噜在线观看 | 黄色毛片视频免费 | www麻豆视频 | 三级免费黄色 | 丁香九月激情综合 | 日本中文乱码卡一卡二新区 | 久久一区国产 | va视频在线 | 久久免费视频4 | 亚洲精品九九 | 国产成人精品久久久久 | 在线视频 国产 日韩 | 黄色h在线观看 | 超碰人人草人人 | 99在线精品视频在线观看 | 久久视频免费 | 97成人精品 | 97超碰总站 | 亚洲jizzjizz日本少妇 | 国产在线不卡 | 一级性视频 | 三级a视频 | 色婷婷综合久色 | 久久久久久久久久久免费视频 | 久久久久久久久久久黄色 | 日韩精品一区二区三区丰满 | 91精品网站| 国产又粗又硬又爽视频 | 国产精品麻豆果冻传媒在线播放 | 91视频高清| 久草在线在线 | 在线看片视频 | 国产精品国产三级国产aⅴ无密码 | 国产视频综合在线 | 在线播放国产一区二区三区 | 日韩三区在线观看 | 91香蕉视频污在线 | 色婷婷在线视频 | 99re亚洲国产精品 | 亚洲欧美国产视频 | 中文字幕专区高清在线观看 | 干亚洲少妇 | 国产高清在线a视频大全 | 九九九视频在线 | 国产99久久精品一区二区永久免费 | 成人动漫一区二区三区 | 日本成人中文字幕在线观看 | 色国产在线 | 欧美精品中文在线免费观看 | 日韩av有码在线 | 麻豆传媒视频在线播放 | 91污污视频在线观看 | 欧美 亚洲 另类 激情 另类 | 久久久久欧美精品999 | 免费中午字幕无吗 | 欧美日韩一区二区三区在线免费观看 | 精品国产视频在线观看 | 在线观看久 | 天天做天天爱天天综合网 | 中文av在线免费观看 | 色噜噜日韩精品欧美一区二区 | 国产女教师精品久久av | 九九九在线观看视频 | 欧美二区在线播放 | 国内精品久久久久 | 狠狠干,狠狠操 | 少妇bbb搡bbbb搡bbbb | 99欧美 | 日韩啪啪小视频 | 精品免费 | 国产精品美女久久久久久网站 | 四虎永久免费在线观看 | 4438全国亚洲精品观看视频 | 国产国产人免费人成免费视频 | 99国产情侣在线播放 | 日本巨乳在线 | 97成人啪啪网 | 五月激情av | 97在线观看免费 | 欧美三人交 | 久久av在线 | 日韩精品在线免费播放 | 国产在线观看99 | 天天色 天天 | 亚洲天天草| 五月婷婷激情 | 97超碰国产精品 | 久草综合在线观看 | 在线小视频国产 | 69精品在线| 国产精品久久久久婷婷二区次 | 激情婷婷在线 | 999国内精品永久免费视频 | 一区二区三区在线看 | 激情视频一区 | 国产一级淫片免费看 | 91探花国产综合在线精品 | 欧美日韩一区二区三区在线免费观看 | www.99热精品 | 欧美大香线蕉线伊人久久 | 久草久草在线 | 91在线视频免费播放 | 国产精品成人免费一区久久羞羞 | 六月丁香社区 | 九九天堂 | 久产久精国产品 | 亚洲综合色站 | 亚洲欧美日韩精品一区二区 | 一级成人在线 | 日韩精品一区二区在线观看视频 | 亚洲一区二区三区四区精品 | www国产亚洲精品久久网站 | 国产99一区视频免费 | 国产黄色片久久久 | 婷婷久久一区二区三区 | 97综合网 | 久久96国产精品久久99软件 | 亚洲欧美日韩国产一区二区 | 高清久久久久久 | 91亚洲影院 | 久久久影片 | 91高清视频在线 | 天堂va在线高清一区 | 99热网站| 这里只有精品视频在线观看 | a黄色大片| 色婷婷视频 | 九九热只有精品 | 中文字幕在线不卡国产视频 | 精品伊人久久久 | 色播激情五月 | 国产久草在线观看 | 精品视频免费 | 亚洲精品久久久久久中文传媒 | 最新免费中文字幕 | 国产剧情一区二区 | 亚洲精品视频中文字幕 | 久久久亚洲影院 | 成人在线你懂得 | 亚洲黄色av | 日韩精品在线看 | 国产精品美 | 亚洲免费国产视频 | 最新真实国产在线视频 | 久久精品这里都是精品 | 免费av观看| 亚洲日本va中文字幕 | 高清av网站 | 探花视频免费在线观看 | 国产精品久久三 | 香蕉视频网站在线观看 | 久久久精品久久 | 欧美精品天堂 | 99成人免费视频 | 日韩欧美精品一区二区 | av中文字幕网 | 欧美a在线免费观看 | 17婷婷久久www | 久久影视网 | 国产区在线 | 国产美女精品视频 | 一区二区三区精品久久久 | 丁香五月缴情综合网 | 亚洲乱亚洲乱亚洲 | 免费欧美 | 91欧美精品 | 蜜臀av一区 | 免费高清无人区完整版 | 99久久综合国产精品二区 | 最近高清中文在线字幕在线观看 | 香蕉视频在线视频 | 国产精品一区二区久久久 | 2021国产视频| 久久精品理论 | 成人91在线 | 精品91久久久久 | 国产福利一区二区在线 | 久久精品网 | av一区二区三区在线 | 日韩视频在线观看视频 | 精品欧美一区二区三区久久久 | 狠狠色狠狠色合久久伊人 | 亚洲理论在线观看电影 | 日韩激情片在线观看 | 久久九九影视网 | 日本久久中文字幕 | 97超碰在线资源 | 九九日韩 | 丝袜美腿亚洲 | 国产亚洲精品成人av久久影院 | 日韩免费播放 | 中文字幕av在线播放 | 中文字幕国语官网在线视频 | 国产不卡精品视频 | 综合色在线观看 | 天天综合网国产 | 久草在线91 | 国产69久久久 | 国产成人精品久久亚洲高清不卡 | 久久精品免费观看 | 成人免费观看在线视频 | www黄在线 | 不卡av在线免费观看 | 人操人| 国产天天综合 | 毛片的网址 | 欧美怡红院 | 天堂网中文在线 | 日韩影视在线 | 免费日韩 精品中文字幕视频在线 | 97免费中文视频在线观看 | 最近中文字幕免费av | 最新日韩精品 | 久久xxxx | 国产精品久久一区二区三区, | 国产黄视频在线观看 | 中文字幕一区二区三区精华液 | 日韩三级视频在线看 | 国产99久久精品一区二区永久免费 | 久草在线免费色站 | 国产一区二区三区免费视频 | 亚洲视频99 | 日韩精品一区二区三区外面 | 天天操福利视频 | 免费 在线 中文 日本 | 国产精品女主播一区二区三区 | 精品96久久久久久中文字幕无 | 麻豆国产露脸在线观看 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国产性xxxx | 91九色porny在线 | 亚洲乱码精品久久久久 | 久久99精品久久只有精品 | 综合色天天| 国产婷婷 | 久久久精品一区二区 | 日韩久久一区 | 午夜性盈盈| 亚洲国内精品在线 | 精品国产伦一区二区三区 | 亚欧日韩成人h片 | 精品亚洲va在线va天堂资源站 | 美女啪啪图片 | 免费在线日韩 | 成人免费在线网 | 国产精品网红福利 | 久久久国产一区二区三区 | 久久精品久久精品久久 | 日韩欧美亚州 | 香蕉影视app | 亚洲一级电影在线观看 | 97精品国产91久久久久久 | 日韩免费电影网 | 99r国产精品 | 婷婷去俺也去六月色 | 久久久久免费精品 | 在线观看视频精品 | 永久中文字幕 | 天天干天天射天天操 | 欧美日韩在线视频一区 | 国产大片免费久久 | 91女人18片女毛片60分钟 | 狠狠操欧美 | 国产在线精品区 | 黄网站色 | 狠狠干狠狠操 | 97精品国产97久久久久久免费 | 中文有码在线视频 | 91亚洲国产成人久久精品网站 | 69视频国产 | 亚洲精品视频在线看 | 国产视频一区二区在线播放 | 久久精品久久久久久久 | 国产成人l区 | 一区二区三区在线免费观看 | 中文欧美字幕免费 | 日韩电影在线观看一区二区 | 国产小视频免费观看 | 伊人久久一区 | 亚洲精品免费播放 | 91精品中文字幕 | 国产一区二区三区视频在线 | 欧美日韩高清免费 | 中文字幕在线字幕中文 | 婷婷亚洲五月 | 国产高清视频免费在线观看 | .精品久久久麻豆国产精品 亚洲va欧美 | 成年一级片 | 国产香蕉av | 天天插天天操天天干 | 欧美亚洲精品一区 | 在线视频一区二区 | 综合色综合 | 麻豆91精品91久久久 | 亚洲天堂毛片 | 91中文字幕网 | 激情偷乱人伦小说视频在线观看 | 激情综合色综合久久综合 | 久草在线视频免费资源观看 | 国产精品久久久久永久免费观看 | 久久久九九 | 国产一区成人在线 | 色婷婷综合成人av | 中文字幕在线观看三区 | 欧美一级日韩免费不卡 | 久久区二区 | 国产精品久久久久久爽爽爽 | 国内丰满少妇猛烈精品播 | 成年美女黄网站色大片免费看 | 亚洲精品在线免费 | 国产视频在 | 久久九九网站 | 亚洲精品国偷自产在线99热 | 国内外成人免费在线视频 | av免费在线网站 | 一区二区三区中文字幕在线 | 亚洲精品久久久久久中文传媒 | 国产999精品久久久久久绿帽 | 欧美久久久久 | 久久精品中文字幕免费mv | 91九色九色| 99精品国产99久久久久久97 | 69av国产 | 在线观看你懂的网址 | 一级α片免费看 | 丝袜制服天堂 | 亚洲精品视频观看 | 一级性视频 | 精品视频区 | 免费高清在线视频一区· | 色综合天天狠天天透天天伊人 | 日本精品在线 | 96看片 | 色天天综合网 | 激情婷婷色 | 97网站| 天天干天天干天天干天天干天天干天天干 | 国产四虎影院 | 99久久er热在这里只有精品15 | 特黄特黄的视频 | 探花在线观看 | av中文字幕在线免费观看 | 视频一区二区免费 | 99久久er热在这里只有精品66 | 色婷婷一| 欧美大片在线观看一区 | 免费特级黄色片 | 一区在线观看 | 九九九热精品免费视频观看 | 国产精品电影一区 | 欧美激情第十页 | 在线视频第一页 | 一级一级一片免费 | 亚洲自拍自偷 | 久久精品99精品国产香蕉 | 欧美 日韩 国产 成人 在线 | 亚洲一级电影 | 亚洲毛片一区二区三区 | 99综合电影在线视频 | 欧美日韩99| 亚洲成a人片在线观看网站口工 | 久久久久成人免费 | 国产区网址 | 久久综合九色欧美综合狠狠 | 2022久久国产露脸精品国产 | 91成人免费在线视频 | 一区二区三区精品久久久 | 免费观看视频的网站 | 中文资源在线观看 | 国产黄色电影 | 亚洲国产操 | 欧美国产91 | 亚洲手机av | 九色在线| 精品在线免费观看 | 国产亚洲91 | 91丨九色丨国产丨porny精品 | 国产91粉嫩白浆在线观看 | 五月婷婷丁香网 | 国产精品一区二区久久精品 | 国产精品综合久久久久 | 成年人在线免费看 | 在线播放国产一区二区三区 | 视频在线亚洲 | 亚洲aⅴ在线 | 日韩大片在线看 | 99热免费在线 | 久久久免费 | 狠狠88综合久久久久综合网 | 精品久久久久久亚洲综合网站 | 激情深爱 | 日韩精品免费一区二区 | 国产96av| 色综合久久久久综合99 | 国产 日韩 在线 亚洲 字幕 中文 | 国产 日韩 在线 亚洲 字幕 中文 | 成人免费电影 | 91看片麻豆 | 婷婷成人亚洲综合国产xv88 | 黄色大全在线观看 | 黄色av一区二区 | jizz欧美性9| 色黄www小说 | 国产在线欧美 | 在线免费观看国产黄色 | 国产精品视频99 | 久久久国产精品视频 | 天天射天天操天天色 | 成人免费观看av | 99久热在线精品 | 国产中文字幕第一页 | 欧美日韩高清国产 | 永久免费精品视频 | 一区二区三区在线免费观看视频 | 欧美另类交人妖 | 91成人免费| 久久久国产影院 | 国产在线观看污片 | 亚洲精品午夜国产va久久成人 | 在线性视频日韩欧美 | 亚洲欧美视频 | 91xav| 精品国产乱码一区二 | 超级碰碰免费视频 | 欧美日韩视频在线观看一区二区 | 久久精品视频播放 | 丁香国产视频 | 国产精品久久久久久久久久久杏吧 | 中文字幕日本在线观看 | 国产精品69久久久久 | 在线观看黄色小视频 | 九九亚洲精品 | 激情av资源 | 亚洲天堂色婷婷 | 久操久| 99久久精品免费看国产 | 国产999免费视频 | 日韩剧情 | 香蕉网在线播放 | 久久99久久99精品免费看小说 | 中文在线8资源库 | 97视频免费在线看 | 中文字幕av免费观看 | 亚洲人视频在线 | 91视频免费网站 | 久久久国产高清 | 天天曰天天射 | 婷婷久久一区二区三区 | 天天操天天干天天综合网 | 久久欧洲视频 | www.夜夜| 国产日产在线观看 | 久草视频资源 | 中文免费观看 | 97视频入口免费观看 | 欧美日韩在线视频一区 | 69精品视频在线观看 | 人人狠狠综合久久亚洲 | 五月综合色 | 国产美女网站视频 | 欧美小视频在线 | 91网页版在线观看 | 久久免费视频3 | 精品欧美一区二区在线观看 | 亚洲成av人片在线观看无 | 日韩精品免费在线播放 | 有码中文字幕 | 欧美久久久久久久久久 | 国产系列精品av | 亚洲天天干 | www.五月天婷婷 | 亚洲国产手机在线 | 中文字幕亚洲精品日韩 | 国产美女搞久久 | 中文字幕欧美三区 | 999毛片| 91传媒激情理伦片 | 亚洲视频观看 | 69亚洲精品 | 欧美高清成人 | 91精品视频在线 | 久久综合干 | 久久久久久久久久影院 | 2023av| 久久免费看av | 91精品伦理 | 亚洲国产影院 | av电影免费在线 | 99热这里只有精品8 久久综合毛片 | 久久综合久久综合久久综合 | 亚洲一级黄色av | 成人教育av | 四虎永久免费在线观看 | 日韩精品一区二区三区免费视频观看 | 成人av免费在线看 | 96在线 | 久久天天躁狠狠躁亚洲综合公司 | bbbbb女女女女女bbbbb国产 | 深夜免费福利网站 | 久久久久久久久久国产精品 | 欧美激情综合色综合啪啪五月 | 美女久久99 | a天堂最新版中文在线地址 久久99久久精品国产 | 亚洲免费永久精品国产 | 在线欧美小视频 | 欧美成人区 | 97在线观看免费视频 | 2019中文最近的2019中文在线 | 成人av网站在线观看 | 精品国产乱码久久久久久天美 | 亚洲欧美日本国产 | 国产精品mv | 欧美资源 | 国产精品 亚洲精品 | 天天干亚洲 | 一区二区三区在线不卡 | 日韩精品一区二区三区电影 | 97在线观看免费观看 | 一级免费av | 九九99靖品 | 999日韩 | 永久免费看av | 中文字幕在线一区观看 | av九九| 免费看污片 | 天天干天天干天天干天天干天天干天天干 | 久久久久福利视频 | 在线播放视频一区 | 国产精品igao视频网入口 | 高潮久久久久久久久 | 日韩精品一区在线播放 | 中文字幕av播放 | 99精品免费久久久久久久久 | 韩日av在线 | 国产精品av在线免费观看 | 欧美另类巨大 | 在线免费黄色av | 99热手机在线观看 | 亚洲狠狠婷婷综合久久久 | 三三级黄色片之日韩 | 69久久夜色精品国产69 | 999久久久精品视频 日韩高清www | 日日爱av| 天堂中文在线视频 | 99爱视频在线观看 | 97在线精品国自产拍中文 | 久久综合免费视频影院 | 久草综合在线观看 | 视频福利在线 | 国产精品久久久久久久久久久杏吧 | 日本黄色大片免费 | 五月婷婷激情五月 | 亚洲国产丝袜在线观看 | 韩国精品福利一区二区三区 | 日韩三级视频在线看 | 1024久久 | 国产成人精品午夜在线播放 | 色偷偷男人的天堂av |