精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Flowable 已經執行完畢的流程去哪找?

開發 前端
如果我們將歷史日志記錄的級別改為 activity,那么就會記錄下來流程信息以及活動信息,但是像執行的 Task 這些信息都是沒有的(ACT_HI_TASKINST),包括流程參與者的信息(ACT_HI_IDENTITYLINK)等都不會記錄下來。

在之前的文章中松哥和小伙伴們聊過,正在執行的流程信息是保存在以 ACT_RU_ 為前綴的表中,執行完畢的流程信息則保存在以 ACT_HI_ 為前綴的表中,也就是流程歷史信息表,當然這個歷史信息表繼續細分的話,還有好多種,今天我們就來聊一聊這個話題。

假設我有如下一個流程:

圖片

當這個流程執行完畢后,以 ACT_RU_ 為前綴的表中的數據均已清空,現在如果想查看剛剛執行過的流程信息,我們就得去以 ACT_HI_ 為前綴的表中。

1. 歷史流程信息

歷史流程信息查看,方式如下:

@Test
void test05(){
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().finished().list();
for (HistoricProcessInstance hpi : list) {
logger.info("name:{},startTime:{},endTime:{}",hpi.getName(),hpi.getStartTime(),hpi.getEndTime());
}
}

調用的時候執行的 finished() 方法表示查詢已經執行完畢的流程信息(從這里也可以看出,對于未執行完畢的流程信息也會保存在歷史表中)。

我們來看下這個查詢對應的 SQL,如下:

SELECT RES.* , DEF.KEY_ as PROC_DEF_KEY_, DEF.NAME_ as PROC_DEF_NAME_, DEF.VERSION_ as PROC_DEF_VERSION_, DEF.DEPLOYMENT_ID_ as DEPLOYMENT_ID_ from ACT_HI_PROCINST RES left outer join ACT_RE_PROCDEF DEF on RES.PROC_DEF_ID_ = DEF.ID_ WHERE RES.END_TIME_ is not NULL order by RES.ID_ asc

從這個 SQL 中可以看到,這個查詢本質上就是查詢的 ACT_HI_PROCINST 表。如下圖:

圖片

如果我們在查詢的時候不限制流程是否執行完畢,那么我們的查詢方法如下:

@Test
void test05(){
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery().list();
for (HistoricProcessInstance hpi : list) {
logger.info("name:{},startTime:{},endTime:{}",hpi.getName(),hpi.getStartTime(),hpi.getEndTime());
}
}

對應的查詢 SQL 如下:

SELECT RES.* , DEF.KEY_ as PROC_DEF_KEY_, DEF.NAME_ as PROC_DEF_NAME_, DEF.VERSION_ as PROC_DEF_VERSION_, DEF.DEPLOYMENT_ID_ as DEPLOYMENT_ID_ from ACT_HI_PROCINST RES left outer join ACT_RE_PROCDEF DEF on RES.PROC_DEF_ID_ = DEF.ID_ order by RES.ID_ asc

和前面的 SQL 相比,后面的 SQL 少了 WHERE RES.END_TIME_ is not NULL 條件,也就是說,判斷一個流程是否執行完畢,就看它的 END_TIME_ 是否為空,不為空就表示流程已經執行結束了,為空就表示流程尚在執行中。

2. 歷史任務查詢

剛剛我們查詢的是歷史流程,接下來我們來看下歷史任務,也就是查詢一個流程中執行過的 Task 信息,如下表示查詢所有的歷史流程任務:

@Test
void test06(){
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().list();
for (HistoricTaskInstance hti : list) {
logger.info("name:{},assignee:{},createTime:{},endTime:{}",hti.getName(),hti.getAssignee(),hti.getCreateTime(),hti.getEndTime());
}
}

這個查詢對應的 SQL 如下:

SELECT RES.* from ACT_HI_TASKINST RES order by RES.ID_ asc

可以看到,歷史任務表就是 ACT_HI_TASKINST,如下圖:

圖片

當然,這里還有很多其他的玩法,例如查詢某一個流程已經執行完畢的歷史任務,如下:

@Test
void test07(){
List<HistoricProcessInstance> instanceList = historyService.createHistoricProcessInstanceQuery().list();
for (HistoricProcessInstance hpi : instanceList) {
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().processInstanceId(hpi.getId()).finished().list();
for (HistoricTaskInstance hti : list) {
logger.info("name:{},assignee:{},createTime:{},endTime:{}", hti.getName(), hti.getAssignee(), hti.getCreateTime(), hti.getEndTime());
}
}
}

這個里邊的查詢歷史任務的 SQL 如下:

SELECT RES.* from ACT_HI_TASKINST RES WHERE RES.PROC_INST_ID_ = ? and RES.END_TIME_ is not null order by RES.ID_ asc

可以看到,跟前面相比,多了兩個條件:

  • 流程實例 ID
  • 流程結束時間不為 null

從這里也可以看出來,這個 finish 方法的執行邏輯跟我們前面講的是一樣的。

3. 歷史活動查詢

歷史任務就是各種 Task,歷史活動則包括跟多內容,像開始/結束節點,連線等等這些信息都算是活動,這個在之前的文章中松哥已經和大家介紹過了。

查詢代碼如下:

@Test
void test08(){
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().list();
for (HistoricActivityInstance hai : list) {
logger.info("name:{},startTime:{},assignee:{},type:{}",hai.getActivityName(),hai.getStartTime(),hai.getAssignee(),hai.getActivityType());
}
}

這個查詢對應的 SQL 如下:

SELECT RES.* from ACT_HI_ACTINST RES order by RES.ID_ asc

可以看到,ACT_HI_ACTINST 表中保存了歷史活動信息。

4. 歷史變量查詢

查詢流程執行的歷史變量,方式如下:

@Test
void test09(){
HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().singleResult();
List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().processInstanceId(pi.getId()).list();
for (HistoricVariableInstance hvi : list) {
logger.info("name:{},type:{},value:{}", hvi.getVariableName(), hvi.getVariableTypeName(), hvi.getValue());
}
}

這個查詢對應的 SQL 如下:

SELECT RES.* from ACT_HI_VARINST RES WHERE RES.PROC_INST_ID_ = ? order by RES.ID_ asc

可以看到流程的歷史變量信息保存在 ACT_HI_VARINST 表中。

5. 歷史日志查詢

有的小伙伴看到日志這兩個字可能會覺得奇怪,咦?流程執行還有日志嗎?沒聽說過呀!

其實歷史日志查詢就是前面那幾種的一個集大成者,用法如下:

@Test
void test10(){
HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().singleResult();
ProcessInstanceHistoryLog historyLog = historyService.createProcessInstanceHistoryLogQuery(pi.getId())
//包括歷史活動
.includeActivities()
//包括歷史任務
.includeTasks()
//包括歷史變量
.includeVariables()
.singleResult();
logger.info("id:{},startTime:{},endTime:{}", historyLog.getId(), historyLog.getStartTime(), historyLog.getEndTime());
List<HistoricData> historicData = historyLog.getHistoricData();
for (HistoricData data : historicData) {
if (data instanceof HistoricActivityInstance) {
HistoricActivityInstance hai = (HistoricActivityInstance) data;
logger.info("name:{},type:{}", hai.getActivityName(), hai.getActivityType());
}
if (data instanceof HistoricTaskInstance) {
HistoricTaskInstance hti = (HistoricTaskInstance) data;
logger.info("name:{},assignee:{}", hti.getName(), hti.getAssignee());
}
if (data instanceof HistoricVariableInstance) {
HistoricVariableInstance hvi = (HistoricVariableInstance) data;
logger.info("name:{},type:{},value:{}", hvi.getVariableName(), hvi.getVariableTypeName(), hvi.getValue());
}
}
}

這個里邊,首先是查詢基本的流程日志信息,這個本質上就是查詢歷史流程實例信息,對應的 SQL 如下:

select RES.*, DEF.KEY_ as PROC_DEF_KEY_, DEF.NAME_ as PROC_DEF_NAME_, DEF.VERSION_ as PROC_DEF_VERSION_, DEF.DEPLOYMENT_ID_ as DEPLOYMENT_ID_ from ACT_HI_PROCINST RES left outer join ACT_RE_PROCDEF DEF on RES.PROC_DEF_ID_ = DEF.ID_ where PROC_INST_ID_ = ?

接下來我寫了三個 include,每一個 include 都對應一句 SQL:

includeActivities 對應的 SQL 如下:

SELECT RES.* from ACT_HI_ACTINST RES WHERE RES.PROC_INST_ID_ = ? order by RES.ID_ asc

includeTasks 對應的 SQL 如下:

SELECT RES.* from ACT_HI_TASKINST RES WHERE RES.PROC_INST_ID_ = ? order by RES.ID_ asc

includeVariables 對應的 SQL 如下:

SELECT RES.* from ACT_HI_VARINST RES WHERE RES.PROC_INST_ID_ = ? order by RES.ID_ asc

最終查詢完成后,調用 getHistoricData 方法可以查看這些額外的數據,List 集合中存放的 HistoricData 也分為不同的類型:

  • includeActivities 方法對應最終查詢出來的類型是 HistoricActivityInstance。
  • includeTasks 方法對應最終查詢出來的類型是 HistoricTaskInstance。
  • includeVariables 方法對應最終查詢出來的類型是 HistoricVariableInstance。

在遍歷的時候通過類型判斷去查看具體是哪一種變量類型。

綜上,這個歷史日志查詢其實就是一個集大成者。

6. 歷史權限查詢

這個是用來查詢流程或者任務的處理人,例如查詢流程的處理人,方式如下:

@Test
void test11(){
HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().singleResult();
List<HistoricIdentityLink> links = historyService.getHistoricIdentityLinksForProcessInstance(pi.getId());
for (HistoricIdentityLink link : links) {
logger.info("userId:{}",link.getUserId());
}
}

這個是查詢流程對應的處理人,對應的 SQL 如下:

select * from ACT_HI_IDENTITYLINK where PROC_INST_ID_ = ?

如果想查詢任務的處理人,對應的方式如下:

@Test
void test12(){
String taskName = "提交請假申請";
HistoricTaskInstance hti = historyService.createHistoricTaskInstanceQuery().taskName(taskName).singleResult();
List<HistoricIdentityLink> links = historyService.getHistoricIdentityLinksForTask(hti.getId());
for (HistoricIdentityLink link : links) {
logger.info("{} 任務的處理人是 {}",taskName,link.getUserId());
}
}

這個查詢對應的 SQL 如下:

select * from ACT_HI_IDENTITYLINK where TASK_ID_ = ?

和前面的相比,其實就多了一個查詢條件 TASK_ID_。

7. 自定義查詢 SQL

和前面講的很多查詢類似,當我們弄懂了每一個歷史查詢的 API 操作的是哪一個數據表,就會發現,歷史數據的查詢,也可以自定義 SQL。

舉個例子和小伙伴們看下,例如查詢某一個流程已經執行完畢的歷史任務:

@Test
void test13(){
List<HistoricProcessInstance> instanceList = historyService.createHistoricProcessInstanceQuery().list();
for (HistoricProcessInstance hpi : instanceList) {
List<HistoricTaskInstance> list = historyService.createNativeHistoricTaskInstanceQuery()
.sql("SELECT RES.* from ACT_HI_TASKINST RES WHERE RES.PROC_INST_ID_ = #{pid} and RES.END_TIME_ is not null order by RES.ID_ asc")
.parameter("pid",hpi.getId()).list();
for (HistoricTaskInstance hti : list) {
logger.info("name:{},assignee:{},createTime:{},endTime:{}", hti.getName(), hti.getAssignee(), hti.getCreateTime(), hti.getEndTime());
}
}
}

flowable 底層是 MyBatis,所有 SQL 中參數的傳遞形式和 MyBatis 一致。

8. 歷史數據記錄級別

Flowable 需要記錄哪些歷史數據,有一個日志級別用來描述這個事情,默認有四種級別:

None: 這個表示不存儲任何歷史信息,好處是流程執行的時候效率會比較快,壞處是流程執行結束后,看不到曾經執行過的流程信息了。

Activity: 這個會存儲所有流程實例和活動實例,在流程實例結束時,頂級流程實例變量的最新值將復制到歷史變量實例中,不會存儲詳細信息。

Audit: 在 Activity 的基礎上,還會存儲歷史詳細信息,包括權限信息等。默認的日志記錄級別即次。

Full: 這個是在 Audit 的基礎上,還會存儲變量的變化信息,這會記錄大量的數據,也會導致流程執行變慢。

一共就這四種級別,在 Spring Boot 項目中,如果我們想要配置這個日志記錄的級別,其實非常方便,直接在 application.properties 中進行配置即可,如下:

flowable.history-level=none

配置加了這個配置,我們隨便啟動一個流程,然后去查詢 ACT_HI_ 系列的表,發現都是空的,沒有數據。

如果我們將歷史日志記錄的級別改為 activity,那么就會記錄下來流程信息以及活動信息,但是像執行的 Task 這些信息都是沒有的(ACT_HI_TASKINST),包括流程參與者的信息(ACT_HI_IDENTITYLINK)等都不會記錄下來。

如果我們將歷史日志記錄的級別改為 audit,則上面提到的這幾種日志就都會記錄下來。但是 ACT_HI_DETAIL 表還是空的,詳細一個流程變量的變化過程不會被記錄下來。

如果我們將日志記錄級別改為 full,那么將會記錄下更多的信息。ACT_HI_DETAIL 表中會記錄下流程變量的詳細信息。

整個過程我就不給小伙伴們演示了大家可以自行嘗試。

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2022-09-27 19:40:09

查詢流程信息

2022-09-24 13:29:42

Spring操作SQL

2022-09-28 21:24:33

SQL字段ID

2018-05-21 11:02:24

Docker硬盤空間

2022-10-27 14:18:13

Flowable流程變量

2009-07-08 10:30:57

WebWork

2022-10-18 10:41:44

Flowable服務任務

2021-08-30 15:44:13

數據中心云端工作負載

2022-09-26 14:25:55

Flowable流程ID

2023-04-10 07:47:01

流程引擎Flowable

2021-01-06 10:50:27

程序員35歲互聯網

2015-08-11 09:51:06

谷歌重組Alphabet

2022-05-06 10:42:09

JavaFlowable引擎

2015-07-08 10:20:51

2024-08-19 14:04:00

2020-10-23 14:10:05

央行數字人民幣數字貨幣

2022-09-05 14:37:14

flowableVue 庫XML

2010-04-26 16:23:52

Oracle dele

2021-05-24 11:55:37

代碼編碼開發

2024-05-23 08:07:05

點贊
收藏

51CTO技術棧公眾號

欧美激情精品久久久久久久变态 | 国内自拍偷拍视频| 麻豆免费在线视频| 国产一区高清在线| 欧美日本黄视频| 国产人妻人伦精品1国产丝袜| 日韩大尺度黄色| 中文字幕一区二区三区视频| 99porn视频在线| 中文字幕视频网站| 99精品国产一区二区三区| 日韩欧美一级二级| 欧美激情成人网| www.久久ai| 97久久超碰精品国产| 国产在线日韩在线| 欧美亚洲精品天堂| 亚洲色图二区| 亚洲午夜av久久乱码| 又黄又爽又色的视频| h片在线观看视频免费| 国产精品久久久爽爽爽麻豆色哟哟| av蓝导航精品导航| 中文字幕乱码中文字幕| 伊人久久亚洲热| 日韩在线视频线视频免费网站| 四川一级毛毛片| 久久精品超碰| 午夜精品久久久久久久| 中文字幕一区二区三区5566| 青草久久伊人| 成人中文字幕合集| 国产在线观看一区二区三区| 夜夜爽妓女8888视频免费观看| 亚洲天堂成人| 色噜噜亚洲精品中文字幕| 亚洲 小说 欧美 激情 另类| youjizz亚洲| 日韩午夜在线观看| 国产免费中文字幕| av成人免费| 日本精品视频一区二区| 妺妺窝人体色www在线小说| 18+激情视频在线| 国产精品女主播av| 亚洲欧美精品在线观看| 精品视频三区| 久久久不卡网国产精品一区| 久久五月天婷婷| 天堂网在线播放| 粉嫩久久99精品久久久久久夜| 成人亚洲综合色就1024| 亚洲一区二区视频在线播放| 日本怡春院一区二区| 欧美一级淫片播放口| 国产女同在线观看| 中文亚洲字幕| 欧美最猛性xxxxx免费| 九九热在线视频播放| 国产手机视频一区二区| 91大神在线播放精品| 日韩精品一区二区在线播放 | 欧美一级视频在线播放| 亚洲小说区图片区都市| 一二三区精品视频| 可以看毛片的网址| 色戒汤唯在线观看| 色综合久久综合网欧美综合网| 国产日韩一区二区在线| 日韩av免费| 欧美日韩国产美| 免费网站在线观看黄| 精品一区二区三区中文字幕| 日韩欧美卡一卡二| 性色av蜜臀av浪潮av老女人 | 亚洲午夜在线观看| 欧美激情午夜| 一区二区三区鲁丝不卡| 无码专区aaaaaa免费视频| 碰碰在线视频| 欧美丝袜自拍制服另类| 欧美又黄又嫩大片a级| 亚洲精品a区| 日韩精品免费观看| 毛片aaaaaa| 欧美在线影院| 97人人模人人爽人人喊中文字| 国产日产精品一区二区三区| 蜜臀av一区二区在线观看| 成人h猎奇视频网站| 蜜桃狠狠色伊人亚洲综合网站| 久久婷婷人人澡人人喊人人爽| 五月婷婷欧美激情| 欧美在线影院| 91国自产精品中文字幕亚洲| 久久久999久久久| 色综合天天色| 亚洲图片自拍偷拍| 蜜臀久久99精品久久久酒店新书 | 国产精品久久久久久久| 欧美激情欧美激情在线五月| 黄色在线免费观看| 激情综合一区二区三区| 国产精品推荐精品| av免费在线一区二区三区| 亚洲精品第1页| 国产a视频免费观看| 国产日韩一区二区三免费高清| 亚洲精品久久7777777| 欧美色视频一区二区三区在线观看| 欧美日本不卡高清| 国产精品精品一区二区三区午夜版| 国产精品国产三级国产普通话对白 | 清纯唯美亚洲综合一区| 欧美激情一区二区三区久久久| 久久久久久无码精品大片| 国产91丝袜在线播放| 日韩欧美一区二区在线观看| а√天堂中文在线资源8| 欧美日韩五月天| 波多野结衣办公室33分钟| 欧美fxxxxxx另类| 国产精品丝袜白浆摸在线 | 青青在线精品| 亚洲欧美中文另类| 日本在线观看视频网站| 国产一区二区三区免费在线观看| 欧美自拍资源在线| 欧美激情20| 精品成人一区二区三区四区| 国产suv精品一区二区68| 日本不卡一区二区三区| 久久国产精品-国产精品| 欧美性受ⅹ╳╳╳黑人a性爽| 欧美日韩激情一区| 黄色三级生活片| 久久久久中文| 久久久一本精品99久久精品| 波多野结衣中文在线| 日韩一级欧美一级| 午夜剧场免费在线观看| 老司机精品视频在线| 欧美一区二区三区在线播放 | 久久久久国产精品午夜一区| 国产精品三区在线| 好吊日av在线| 精品国精品国产尤物美女| 中文字幕在线观看成人| 国产自产v一区二区三区c| 亚洲最新在线| 一区二区三区日本视频| 精品国模在线视频| 国产精品毛片久久久久久久av| 中文字幕中文字幕一区二区| 色片在线免费观看| 久久中文亚洲字幕| 成人观看高清在线观看免费| 成人在线观看黄色| 欧美日韩国产一区二区三区地区| 国产精品18在线| 激情综合色综合久久| 色综合久久久久久久久五月| 成人在线不卡| 久久精品视频网站| 99久久免费国产精精品| 亚洲制服丝袜av| 国产不卡一二三| 视频一区二区三区在线| 天堂精品一区二区三区| 亚洲图片小说区| 欧美日韩国产成人高清视频| 蜜桃视频在线观看www| 欧美日韩中文在线| 中文字幕av久久爽一区| 精品一区二区三区久久久| 国产成人三级视频| 国内精品免费| 国产精品成人国产乱一区| 欧美96在线| 精品福利av导航| 毛片在线免费播放| 亚洲视频每日更新| 人妻在线日韩免费视频| 日韩电影在线观看网站| 潘金莲一级淫片aaaaa免费看| 视频二区欧美| 日本不卡视频在线播放| 久热国产在线| 亚洲精品久久7777777| 中文字幕在线视频免费| 一区二区三区四区高清精品免费观看 | 久久99热精品| 国产在线电影| 欧美岛国在线观看| 亚洲天堂视频在线播放| 亚洲精品菠萝久久久久久久| 日韩人妻无码一区二区三区| 久久97超碰国产精品超碰| 国产精品久久久久9999爆乳| 欧洲美女日日| 国产一级二级三级精品| 国产精品久久久久久久久久齐齐| 欧美精品久久久久a| eeuss影院在线观看| 精品捆绑美女sm三区| 中文字幕福利视频| 性感美女极品91精品| 黄色国产在线播放| 91免费看片在线观看| 91欧美一区二区三区| 久久天堂精品| 波多野结衣综合网| 最新国产精品久久久| 视频一区二区三区免费观看| 啪啪国产精品| 国产精品区一区二区三含羞草| 日韩美香港a一级毛片| 欧洲亚洲在线视频| 激情图片在线观看高清国产| 综合网中文字幕| 三级在线播放| 亚洲第一精品夜夜躁人人爽| 国产又粗又猛又黄又爽| 日韩欧美国产骚| 久久精品欧美一区二区| 亚洲天堂中文字幕| 亚洲激情图片网| 久久精品水蜜桃av综合天堂| 东京热av一区| 国产成人av电影免费在线观看| 思思久久精品视频| 毛片不卡一区二区| 中文久久久久久| 久久这里只有| 国产xxxxx在线观看| 9色国产精品| 奇米影视亚洲色图| 伊人成人在线视频| 亚洲精品久久久久久久蜜桃臀| 亚洲乱码在线| 女同性恋一区二区| 中文字幕日韩一区二区不卡| 一级黄色免费在线观看| 日韩专区精品| 亚洲精品中文综合第一页| 欧洲激情综合| 亚洲一一在线| 99精品全国免费观看视频软件| 一区二区日本伦理| 91亚洲国产高清| 国产精品h视频| 久久久久免费av| 日本a级片在线观看| 欧美在线免费一级片| 国产在线观看欧美| 一区在线视频| 欧美老熟妇喷水| 久久永久免费| 中文字幕资源在线观看| 国产呦萝稀缺另类资源| 亚洲av无码成人精品区| 成人免费毛片app| 欧美 变态 另类 人妖| 久久综合狠狠综合| 亚洲黄色免费视频| 国产精品国产三级国产普通话蜜臀 | 国产精品丝袜高跟| 国产精品日韩精品在线播放| 99re在线视频上| 亚洲va久久久噜噜噜久久| 日韩亚洲欧美精品| 91精品秘密在线观看| 男人添女荫道口喷水视频| 国产欧美午夜| 欧美大尺度做爰床戏| 国产精品自在欧美一区| 人妻av一区二区| 日本一二三四高清不卡| 麻豆视频在线免费看| 午夜国产精品影院在线观看| 免费在线不卡av| 日韩欧美久久一区| 毛片网站在线| 久久久黄色av| 澳门成人av网| 成人网在线观看| 麻豆一区二区| 亚洲欧美日韩国产成人综合一二三区| 亚洲激情久久| 青青视频在线播放| 国内不卡的二区三区中文字幕| 特大黑人巨人吊xxxx| 综合久久国产九一剧情麻豆| 中日韩黄色大片| 91麻豆精品国产91久久久| 天天干天天摸天天操| www.色综合| 色老头在线一区二区三区| 96pao国产成视频永久免费| 婷婷精品在线| 一级性生活视频| 日韩精品成人一区二区三区| 国产精品无码自拍| 中文一区二区在线观看| 日韩特黄一级片| 91精品午夜视频| 精品亚洲综合| 国内自拍欧美激情| 电影中文字幕一区二区| 欧美性bbwbbwbbwhd| 欧美日本一区二区高清播放视频| 另类小说第一页| 97久久超碰国产精品| 麻豆成人在线视频| 欧美伦理视频网站| 黄色片在线免费观看| 欧美亚洲视频在线看网址| 91大神精品| 91看片淫黄大片91| 精品一二三四区| 97在线观看免费视频| 欧美日韩国产一区二区三区| www日本高清视频| 俺去了亚洲欧美日韩| 电影在线观看一区二区| 蜜桃av色综合| 最新成人av网站| wwwxx日本| 一区二区三区中文在线| 91国产精品一区| 色阁综合伊人av| 成人日韩av| 亚洲成人一区二区三区| 玖玖玖国产精品| 欧美色图亚洲激情| 欧美日韩综合视频网址| 少妇人妻一区二区| 国内精品久久久久伊人av| 亚洲国产一区二区三区网站| 色哟哟免费网站| 国产乱人伦偷精品视频不卡| 欧美第一页在线观看| 91精品国产综合久久久久久久久久 | 天天色综合久久| 97国产精品免费视频| 久久亚洲道色| 久久久亚洲精品无码| 99re热视频精品| 丁香六月婷婷综合| 亚洲人成在线观| 在线观看精品| 亚洲精品人成| 韩国视频一区二区| 国产精品白嫩白嫩大学美女| 日韩欧美资源站| av老司机免费在线| 久久久久久草| 日韩av一级电影| 国产精品酒店视频| 91精品蜜臀在线一区尤物| 2020国产在线视频| 国产精品视频入口| 视频一区中文字幕国产| 亚洲一区电影在线观看| 日韩视频在线永久播放| 草美女在线观看| 欧美日韩无遮挡| 久久精品国产亚洲aⅴ| 我家有个日本女人| 亚洲精品99久久久久| 成人免费福利| 亚洲国产精品女人| 不卡的av电影在线观看| av一级在线观看| 久久精品国产欧美激情| www.国产精品一区| 5566日本婷婷色中文字幕97| 超碰免费在线观看| 91系列在线播放| 亚洲激情午夜| 精品熟妇无码av免费久久| 日韩一级大片在线观看| 亚洲福利影院| 中文网丁香综合网| 99视频在线精品| 在线观看中文字幕av| 欧美激情亚洲自拍| 国产欧美日韩精品一区二区免费 | 国产青草视频在线观看| 久久在线观看免费| 91av国产精品| 97视频在线观看视频免费视频 | 自拍偷拍亚洲图片| 免费无码不卡视频在线观看| 中日韩av电影| 少妇av在线播放| 国产精品一区二区久久国产| 亚洲国产高清一区二区三区| 精品人伦一区二区| 精品国产乱码久久久久久浪潮|