《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > 基于jBPM4的臨時動態性需求研究
基于jBPM4的臨時動態性需求研究
蘇 展,劉 鋒
(安徽大學 計算機科學與技術學院,安徽 合肥 230039)
摘要: 介紹了國內目前的工作流領域特點,尤其對臨時動態性需求(會簽、撤銷、任意回退等)的各種場景進行了分析,提出了基于jBPM4的解決思路及一種動態路由的方法,以解決臨時回退的問題。
Abstract:
Key words :

摘  要: 介紹了國內目前的工作流領域特點,尤其對臨時動態性需求(會簽、撤銷、任意回退等)的各種場景進行了分析,提出了基于jBPM4的解決思路及一種動態路由的方法,以解決臨時回退的問題。
關鍵詞: jBPM;臨時動態性需求;動態路由

    工作流管理技術[1-2]作為一種過程建模和過程管理的核心技術,是新興于20世紀90年代的一種信息化技術。隨著近些年國內企業、政府信息化的建設,工作流技術被越來越廣泛地應用于業務流程管理(BPM)領域。jBPM是一種輕量級的J2EE開源框架,具有良好的可擴展性。其最新版本較jBPM3.2版本,在核心引擎等方面都有較大改動,本文總結了新版本的特點。結合國內工作流領域的應用特點,本文特別針對臨時動態性需求,分析了各種場景的情況,給出了應用jBPM4的解決思路,為解決臨時回退的問題,提出了一種動態路由的方法,該方法亦可以用于解決各種臨時動態性需求的場景。
1 jBPM4特點
    jBPM是JBoss眾多開源項目中的一個工作流開源項目,也是目前應用最廣泛的工作流項目。在2009年7月10日,JBoss jBPM團隊發布了jBPM4的正式版本。jBPM4完全基于流程虛擬機(PVM)的機制,對核心引擎進行了重新設計,而PVM的引入也使jBPM4可以支持多流程語言[3]。jBPM4特點如下:
    (1)在流程定義的對象上,節點類型劃分更清晰。
    (2)基于觀察者模式的事件監聽(Event-Listener)機制。在jBPM4中活動節點對象(ActivityImpl)、轉移對象(TransitionImpl)、流程定義對象(ProcessDefinitionImpl),全都繼承了ObservableElementImpl對象,因此,組成流程定義的3個主要元素都可作為觀察者模式中的被觀察者來觀察,而這些對象本身就直接支持注冊各種事件(Event),然后由監聽器(Listener)來監聽這些Event。
    (3)基于ExecutionImpl、Command模式和AtomicOperation實現的內核引擎在jBPM4中用ExcutionImpl代替jBPM3中Token機制。流程的流轉依賴于ExcutionImpl調用各個AtomicOperation原子操作,如ExecuteActivity、MoveToParentActivity、TransitionTake、TransitionStartActivity、ExecuteEventListener、TransitionEndActivity進行推進,而ExecutionImpl在各個實例對象之間進行轉移。
    (4)加入了歷史庫,但還不完善。
2 國內工作流領域的特點
    目前國內在工作流領域[4]主要的應用是人工工作流,也就是以人工任務密集型的工作流為主。隨著國內企業和公共組織的信息化發展越來越快,IT系統的積累和建設經驗也越來越豐富,以自動任務密集型為主的應用將會逐漸增多。人工任務密集型工作流的應用主要集中在以下領域:電子政務,行政審批,企業協同辦公,電信、電力的工單,企業采購、合同、銷售等。
    從功能需求上,這些人工任務密集型流程的典型特點主要有:(1)用戶友好的流程定義工具。(2)表單能夠自定義。(3)靈活的臨時動態性需求,例如:任意回退、會簽、撤銷等。這些需求,存在很強的人為性因素。
    國內專注于工作流產品方面的公司起步較國外晚,其產品大多只專注于某個行業的具體需求,如:有生博大的工作流產品主要定位于“電子政務系統中的審批流”;西安協同的工作流產品偏重于“電信行業”;信雅達的工作流產品偏重于“金融行業”;上海東蘭的工作流產品則偏重于“協同領域”等等。
3 各種臨時動態性需求情況的解決思路
    jBPM4是由國外開源小組領導的項目,流程定義工具和表單設計并不是其項目的特點,但其在流程處理方面的思想有其特色,特別是流程核心引擎的架構很值得學習研究。筆者在學習研究的過程中,對國內靈活的各種臨時動態性需求的場景進行了模擬分析,提出了如何應用jBPM4來解決問題的思路。
3.1 會簽
    會簽在政府或企業都是必不可少的功能,尤其是審批流中。會簽可以分為單步會簽(只有1個審批環節)及多步會簽(每1個子審批流有多個審批環節)。單步會簽:在流程的某個環節需要由多個辦理人(多個不同部門的領導)共同辦理或者簽署意見,這是企業或政府的內部最為常見的情況。多步會簽(也稱為并聯審批):其實質就是一個單步的審批環節變為了在部門內部一個比較復雜的審批流程,這個審批流程有多個審批環節。
    多步會簽的情況較為復雜,本文只提供應用jBPM4解決單步會簽的思路:即對TaskService進行擴展開發,實現動態任務實例的創建,參照TaskActivity類中的方法進行擴展,擴展后再調用addTaskParticipatingUser( )或addTaskParticipatingGroup( )方法實現動態增加任務辦理人,此時即實現了單步會簽功能。
3.2 撤銷
    撤銷是指任務在發送給下一個辦理人之后,發現任務發送錯誤,此時在下一個辦理人還沒有辦理之前,可以撤回當前任務,而重新選擇其他人進行辦理。串行流程如圖1所示。

    節點2的處理人(假設是王二)辦理完畢之后,將任務提交,此時任務到達了節點3(假設李三辦理),這時李三就會收到一個待辦任務,在李三還沒有辦理之前,王二突然發現,有1個業務數據填寫錯誤,或者粘貼的附件錯誤,這時王二需要將發送給李三的任務撤銷,重新更正數據后或修改粘貼的附件后再發送給李三審批。此外,假設節點3的辦理人有2個人(李三和趙五),那么王二需要在運行期間根據業務特性手動地選擇任務是提交給李三還是趙五,但由于王二的誤操作,把本來應該發給趙五的辦理任務錯發送給了李三,此時,在李三辦理之前,王二也可以將發送給李三的任務撤銷,然后重新發送給趙五。
    對于上述模擬的撤銷,jBPM4解決思路如下:
    (1)刪除需要撤銷的任務實例及其與此任務實例相關的所有工作流實例。在文件TaskServiceImpl.java中,jBPM4提供了級聯刪除任務實例的相關方法:
    public void deleteTaskCascade(String taskId) {
        commandService.execute(new DeleteTaskCmd(taskId,true));
    }
    (2)修改當前任務實例的狀態。即將張三的已經辦理完畢的節點2對應的TaskInstance的狀態更改為待辦狀態:(Task.STATE_OPEN)
    task.setState(ask.STATE_OPEN);
    taskService.saveTask(task);
3.3 任意回退
    回退作為審批流最常見的需求,每1個審批環節都有可能會有審批通過、不通過2種情況。審批不通過時,一般是回退到上一個環節,但是在某些情況下,有可能跨環節回退,而到底回退到哪個環節,可以由用戶根據業務需求進行自定義,并且在回退環節工作完成之后,其下一步的方向也可以由用戶自定義。下面根據各種不同的回退分別模擬并給出解決思路。
3.3.1 串行流程
    串行流程,最直接的方式就是在需要回退的各個節點之間建立回退線,如圖2所示。如果需要從節點4回退到節點2,則直接在節點4之后加1個分支決策節點,連接2個分支,1個是流向節點5,1個是返回節點2。

    對于節點2,在jBPM4中,其參與模式又分為4種:task-assignee(assignee user、assignee expression)、task candidates(candidate-groups、candidate-users)、task assignment handler、task swimlanes。
    (1)task-assignee任務的辦理人的值可以直接指向1個特指的用戶的ID或者1個關聯到業務中某個特指用戶的表達式(如order.owner)。此時,如果assignee賦予了1個特指用戶的ID,回退時不用做任何處理;如果assignee賦予了1個業務表達式,在回退時,需要保證業務表達式的運算邏輯能夠正確執行。
    (2)如果task candidates任務的辦理人為幾個特定的組的集合或者用戶的集合,實際上就是俗稱的“競辦”。這樣的任務被稱為groupTask,必須被某一個組或者用戶拾取才能進行辦理,因此,如果回退到這樣的節點時,需要把任務回退給當時的拾取人。而拾取人需要到HistoryTask和HistoryDetailImpl 2個實體對應的歷史庫中取得。
       (3)task assignment handler任務的辦理人通過用戶自己編寫的代碼來實現,當回退到這樣的節點時,也不需要做特殊處理,只要保證自己的代碼(AssignmentHandler)在執行回退邏輯時同樣能夠正確執行即可。
    (4)task swimlanes任務的辦理人為“泳道”,回退到這樣的節點時,任務的辦理人可以自動取得,同樣不需要做任何處理。
    以上4種情況,在回退之后的處理又分為2種情況:一種是按照原來的路徑重新執行,即節點2→節點3→節點4;另一種是,節點2辦理完畢后,直接返回給節點4。對于第1種情況,不需要做處理。而對于第2種情況,由于在節點2和節點4之間并沒有一個轉移存在,因此jBPM4也沒有提供支持。針對這種情況可以通過動態路由(即動態創建轉移)的思路來實現(具體實現思路見第4節),實際上回退也可以用動態創建轉移來實現,但不用畫回退線了。
3.3.2 M選N分支流程
    M選N分支流程中,N必須滿足M>N?叟1,假設回退前流程的執行路徑為節點1→節點2→節點4→節點5,如圖3所示,此時回退有2種情況:
    (1)由節點5回退到節點1,而節點1在進行業務數據的修改后,直接返回給節點5的處理人進行辦理或審批。
    (2)由節點5回退到節點1,而節點1在進行業務數據的修改后,重新按照節點1→節點2→節點4→節點5的路徑再執行1遍。
    情況(2)與情況(1)不同的是:在回退之后繼續審批時,需要考慮分支節點的決策條件,在自動決策時要保證決策邏輯正確執行;在人工決策時,需要記錄原來的執行路徑(保證重走節點1→節點2→節點4→節點5)。


3.3.3 同步分裂、“與”匯聚流程
    同步分裂、“與”匯聚流程如圖4所示,回退前執行的路徑為節點1→節點2→(節點3、節點4)→節點5→節點6。此時回退有4種不同的情況:
    (1)由節點6(或節點5)回退到節點2(或節點1),節點2重新辦理完畢后,直接返回給節點6的處理人進行辦理或審批。
    (2)由節點6(或節點5)回退到節點2(或節點1),節點2重新辦理完畢后,重新按照節點2→(節點3、節點4)→節點5→節點6的路徑再次執行1遍。
    (3)由節點6(或節點5)回退到節點3(或節點4),節點3(或節點4)辦理完畢后,直接返回給節點6。
    (4)由節點6(或節點5)回退到節點3(或節點4),節點3(或節點4)辦理完畢后,按照節點3(或節點4)→節點5→節點6的執行路徑,再次執行。

    情況(1)、(2)和(3)處理起來沒有什么問題。但情況4中,當流程由節點6回退到節點3,節點3辦理完畢后,重走路徑節點3→節點5→節點6時,在“與節點”的“與”運算邏輯就會無法執行,因為另1個“與”分支(節點4)并沒有新的實例產生,流程就會僵死此處。所以可以通過修改JoinActivity.java這個類文件中的方法:
    protected boolean isComplete(List<executionimpl> joined
Executions,Activity activity)
在此方法中加入對該情況的處理代碼即可。
3.3.4 同步分裂、“或”匯聚流程
    同步分裂、“或”匯聚流程如圖5所示,回退前執行的路徑為節點1→節點2→(節點3、節點4)→節點5→節點6。此時回退同樣有4種不同的情況:
    (1)由節點6(或節點5)回退到節點2(或節點1),節點2重新辦理完畢后,直接返回給節點6的處理人進行辦理或審批。
    (2)由節點6(或節點5)回退到節點2(或節點1),節點2重新辦理完畢后,重新按照節點2→(節點3、節點4)→節點5→節點6的路徑再次執行1遍。
    (3)由節點6(或節點5)回退到節點3(或節點4),節點3(或節點4)辦理完畢后,直接返回給節點6。
    (4)由節點6(或節點5)回退到節點3(或節點4),節點3(或節點4)辦理完畢后,按照節點3→節點5→節點6的執行路徑,再次執行。


    由于是“或”匯聚,因此在實現上不需要做任何其他處理了。
    綜合以上情況,回退本身在理論上有各種各樣的情況存在,再加上業務的回退(或者業務邏輯補償,如果需要就必須在流程的每個環節進行業務快照的備份,在回退時調用這個快照進行補償),此時回退可以說是整個流程體系中最復雜的。但是在真實的業務情況中,有些可能是根本不會出現或者很少出現,因此要考慮的是能不能通過變通的方式處理。
4 動態路由的思路
    針對于特定的業務實例,有時需要在原本沒有轉移關系的環節之間進行特定的跳轉,例如在圖1中的串行流程中(1-2-3-4-5),節點4與節點2之間是沒有任何轉移存在的,但是針對于某個運行期的特定業務實例,臨時要求環節直接從節點4回退跳轉到節點2(而略過了節點3)。此時就需要在節點4和節點2之間由程序動態地創建一個轉移(transition),并設定為優先級最高,如圖6所示。


    因此在執行takeTransition( )方法時,按照優先級將優先執行動態創建的轉移,然后對外暴露1個jumpTransition(String destinationActivityName)方法給客戶端。應用jBPM4實現時可按照如下步驟進行擴展:
    (1)參照文件CompleteTaskCmd.java擴展開發用于跳轉的cmd:JumpTaskCmd。
    (2)參照文件TransitionStartActivity.java的原子操作,定制開發用于跳轉的原子操作JumpTransitionStartActivity。
    由于jBPM4中的執行動作都是基于Command模式實現的,因此在擴展開發自己的跳轉動作時,就可以做到對jBPM4本身的代碼不做侵入修改而實現。這種臨時建立動態路由的思路不僅可以用于回退,同樣可以用于重新操作后的跳轉的實現。
    jBPM作為目前應用最廣泛的開源工作流產品,其最新的第4版有著很好的架構及擴展性。但是由于國外的流程應用與國內的應用有所不同,因此要想讓jBPM4更好地滿足國內的流程應用的需求,還需要做一定的定制開發。本文針對國內的流程應用的典型特點進行了較詳細的分析,特別針對臨時動態性需求的各種情況,給出了基于jBPM4的解決思路(限于篇幅文中并沒有給出很詳細的可以運行的代碼)。本文所做的工作只是工作流應用技術研究的一小部分,還有很多方面需要繼續學習和實踐,需要進行深入的研究。
參考文獻
[1] 范玉順.工作流管理技術基礎[M].北京:清華大學出版社,2001.
[2] WfMC-TC00-1003v1. 1. The workflow reference model[S]. 1995.
[3] JBoss官方.jBPM Documentation[EB/OL].http://www.jboss.org/jbossjbpm.2009-09.
[4] 胡長城.工作流講解[EB/OL].www.javafox.org.2009-09.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲第一区在线| 国产精品v日韩精品v欧美精品网站| 欧美视频免费在线观看| 亚洲欧美日韩国产成人精品影院| 国内伊人久久久久久网站视频| 欧美久久精品午夜青青大伊人| 国产香蕉久久精品综合网| 亚洲国产天堂网精品网站| 亚洲国产成人精品女人久久久| 国产精品久久久久77777| 欧美视频精品在线观看| 欧美电影在线| 亚洲人成网站色ww在线| 亚洲一区网站| 久久夜色精品亚洲噜噜国产mv| 狠狠网亚洲精品| 国产精品久久久久久模特| 欧美在线视频观看免费网站| 国产欧美视频一区二区| 麻豆成人91精品二区三区| 亚洲欧美中文另类| 曰韩精品一区二区| 国产在线麻豆精品观看| 国产精品一区二区久久久久| 久久久久综合网| 国产一区二区三区在线观看视频| 性欧美大战久久久久久久免费观看| 午夜精品短视频| 欧美另类69精品久久久久9999| 亚洲国产视频一区| 欧美极品在线播放| 亚洲国产精品热久久| 欧美视频第二页| 亚洲精品视频一区二区三区| 99国产精品久久久| 亚洲午夜久久久久久久久电影院| 亚洲乱码精品一二三四区日韩在线| 国产亚洲亚洲| 久久成人av少妇免费| 一区二区三区蜜桃网| 91久久国产综合久久| 国产欧美精品日韩| 亚洲激情电影在线| 一区二区动漫| 亚洲欧美成人在线| 欧美成人综合网站| 欧美黄色网络| 一色屋精品视频免费看| 亚洲精品一品区二品区三品区| 欧美11—12娇小xxxx| 国产视频在线观看一区二区| 欧美一级黄色录像| 欧美—级高清免费播放| 日韩亚洲精品电影| 欧美不卡视频一区发布| 国产精品极品美女粉嫩高清在线| 亚洲夫妻自拍| 国产精品久久久久久久久婷婷| 欧美日韩免费观看一区=区三区| 99精品国产高清一区二区| 久久一区二区三区国产精品| 午夜精品久久久久久久久久久久| 亚洲图片欧洲图片日韩av| 亚洲欧美日韩综合aⅴ视频| 欧美国产日韩精品| 亚洲精品视频免费在线观看| 亚洲一区二区免费在线| 亚洲综合成人在线| 久久激情视频| 欧美日韩视频在线观看一区二区三区| 久久精品91久久久久久再现| 国产偷自视频区视频一区二区| 亚洲久久一区二区| 欧美色偷偷大香| 新狼窝色av性久久久久久| 亚洲欧美清纯在线制服| 欧美中文字幕第一页| 一区二区三区黄色| 亚洲欧美乱综合| 欧美伦理影院| 亚洲日本va在线观看| 欧美aⅴ99久久黑人专区| 一区二区三区不卡视频在线观看| 欧美大片在线观看一区| 黑丝一区二区三区| 亚洲国产日韩欧美一区二区三区| 亚洲视频图片小说| 欧美高清自拍一区| 欧美精品aa| 国产毛片精品国产一区二区三区| 91久久精品日日躁夜夜躁欧美| 亚洲一区视频在线观看视频| 亚洲第一精品在线| 国产精品美女久久久久久2018| 欧美日韩国产一区二区三区| 欧美四级电影网站| 亚洲欧美三级在线| 欧美人与性禽动交情品| 久久成人羞羞网站| 亚洲欧美久久久久一区二区三区| 免费不卡在线观看av| 伊人久久大香线| 国产一区二区三区久久久久久久久| 亚洲国产精品久久91精品| 国产精品自拍三区| 欧美一区二区三区免费视频| 性色av一区二区三区红粉影视| **网站欧美大片在线观看| 亚洲香蕉在线观看| 亚洲伊人观看| 欧美高清日韩| 合欧美一区二区三区| 久久久亚洲一区| 欧美日韩一区二区免费视频| 亚洲国产精品www| 国内精品嫩模av私拍在线观看| 亚洲伦理中文字幕| 国产精品99久久久久久有的能看| 亚洲一区二区三区午夜| 欧美日韩免费高清| 午夜精品美女久久久久av福利| 欧美亚洲视频在线看网址| 欧美日韩一区二区精品| 日韩视频在线免费观看| 亚洲清纯自拍| 欧美精品自拍| 亚洲免费网址| 亚洲午夜女主播在线直播| 亚洲高清资源综合久久精品| 亚洲二区视频| 欧美日本亚洲视频| 亚洲一区二区三区色| 日韩视频免费观看| 国产精品视频一区二区三区| 国产揄拍国内精品对白| 在线视频你懂得一区| 欧美精品少妇一区二区三区| 一区二区高清在线| 欧美日韩一区二区在线观看| 欧美第一黄色网| 亚洲婷婷综合色高清在线| 日韩亚洲不卡在线| 99国产精品99久久久久久| 欧美精品一区二区三区在线播放| 亚洲国产精品www| 中文欧美日韩| 老司机免费视频一区二区三区| 欧美午夜精品久久久久久浪潮| 在线亚洲欧美专区二区| 亚洲激情视频在线观看| 欧美一区二区三区播放老司机| 久久只精品国产| 国产亚洲欧美中文| 欧美一级视频| 亚洲三级影片| 国产精品久久久久久久浪潮网站| 亚洲国产精品悠悠久久琪琪| 亚洲经典三级| 亚洲国产欧美另类丝袜| 99在线视频精品| 免费观看成人| 亚洲狠狠丁香婷婷综合久久久| 欧美日韩一区二区三区在线观看免| 国产精品美女久久久久久2018| 国产一区二区三区久久精品| 国产精品久久久久99| 国产一区再线| 激情久久影院| 久久精品日韩欧美| 亚洲国产三级网| 国产精品一区二区三区久久| 欧美成人一区在线| 久久综合色综合88| 欧美亚洲免费| 久久久久久久久久久久久9999| 国产欧美精品xxxx另类| 亚洲欧洲日本mm| 欧美日韩在线一区| 国产亚洲精品久久久久久| 国产丝袜美腿一区二区三区| 久久av老司机精品网站导航| 国产嫩草影院久久久久| 在线日韩精品视频| 国内精品视频一区| 久久手机免费观看| 久久精品欧美日韩| 国产精品一区二区久久久| 亚洲国产精品黑人久久久| 在线观看91久久久久久| 99精品视频免费在线观看| 久久久久免费观看| 欧美在线观看你懂的| 久久久99国产精品免费| 激情视频一区二区三区| 欧美精品在线视频| 欧美日韩另类视频| 9人人澡人人爽人人精品| 亚洲国产日韩综合一区| 国产亚洲欧美aaaa| 国产精品露脸自拍| 欧美性大战久久久久| 欧美成人黑人xx视频免费观看| 国产精品日韩精品| 久久久国产91| 在线观看视频欧美| 久久露脸国产精品| 欧美日韩精品在线| 欧美婷婷久久| 美女日韩在线中文字幕| 国产精品一区免费视频| 亚洲国产精品成人久久综合一区| 另类人畜视频在线| 欧美一级电影久久| 国产女主播视频一区二区| 国产精品日韩欧美| 你懂的一区二区| 99在线观看免费视频精品观看| 久久久人成影片一区二区三区| 国产精品毛片大码女人| 久久成人精品| 国产精品r级在线| 夜色激情一区二区| 欧美久久影院| 国产亚洲欧美日韩美女| 国产精品美女视频网站| 欧美性色视频在线| 韩国精品一区二区三区| 久久国产主播| 欧美日韩天天操| 欧美精品国产精品| 亚洲第一精品久久忘忧草社区| 制服丝袜亚洲播放| 国产精品永久免费| 浪潮色综合久久天堂| 国内精品模特av私拍在线观看| 国产一区二区三区成人欧美日韩在线观看| 国产精品色在线| 久久一区二区三区四区| 久久精品人人| 欧美日韩色婷婷| 欧美中文字幕在线视频| 亚洲欧美国产va在线影院| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲欧美三级在线| 国产夜色精品一区二区av| 欧美一区二区精美| 久久精品成人一区二区三区蜜臀| 艳妇臀荡乳欲伦亚洲一区| 麻豆国产va免费精品高清在线| 国产精品草莓在线免费观看| 麻豆精品在线视频| 亚洲美女免费精品视频在线观看| 亚洲欧美日韩国产另类专区| 亚洲在线一区二区三区| 亚洲精品日韩在线| 美女脱光内衣内裤视频久久网站| 国精产品99永久一区一区| 在线成人av| 国产精品伊人日日| 亚洲性线免费观看视频成熟| 久久久www成人免费无遮挡大片| 久久人人97超碰精品888| 国产主播一区二区| 99香蕉国产精品偷在线观看| 国产精品日韩电影| 国产一区二区电影在线观看| 欧美日本在线视频| 欧美一区二区三区在线观看视频| 可以免费看不卡的av网站| 国产亚洲网站| 韩日欧美一区二区三区| 免费av成人在线| 国产精品羞羞答答xxdd| 亚洲电影中文字幕| 国产精品亚洲不卡a| 亚洲综合成人在线| 国产精品中文字幕在线观看| 欧美国产1区2区| 国产欧美一区二区精品婷婷| 亚洲国产天堂久久综合网| 国产精品女人网站| 欧美在线中文字幕| 麻豆视频一区二区| 亚洲第一黄色网| 国产精品极品美女粉嫩高清在线| 国产一区二区三区日韩| 欧美日本韩国一区| 亚洲美洲欧洲综合国产一区| 欧美国产综合一区二区| 欧美成人精品在线观看| 久热精品视频在线免费观看| 国产精品羞羞答答xxdd| 好看的亚洲午夜视频在线| 欧美精品久久一区| 国产精品一区二区三区观看| 中国成人在线视频| 日韩视频一区二区三区在线播放免费观看| 欧美精品久久久久久久免费观看| 美女福利精品视频| 久久久蜜桃精品| 国产精品盗摄久久久| 亚洲欧洲在线视频| 亚洲午夜电影网| 亚洲一区二区三区国产| 在线亚洲免费视频| 午夜精品成人在线视频| 欧美色视频一区| 一区二区三区国产精华| 香蕉久久精品日日躁夜夜躁| 亚洲国产免费| 欧美体内she精视频| 亚洲国内自拍| 午夜在线视频一区二区区别| 久久伊人免费视频| 欧美亚日韩国产aⅴ精品中极品| **欧美日韩vr在线| 午夜精品久久久久久久男人的天堂| 性欧美超级视频| 亚洲人成人一区二区三区| 国产日韩欧美日韩| 亚洲免费激情| 亚洲一区二区影院| 欧美精品99| 欧美亚洲在线视频| 国产又爽又黄的激情精品视频| 国产精品福利网站| 99国产精品久久久久久久久久| 午夜精品久久久久久久|