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

一行代碼搞定 SpringBoot 極簡審批流!

開發 前端
Flowable 用 “一行代碼” 實現了審批流的極簡開發,同時保留了高度的靈活性和擴展性。無論是簡單的請假流程,還是復雜的多級審批,Flowable 都能輕松應對。?

兄弟們,今天咱們聊個職場剛需 —— 審批流。大家有沒有過這樣的經歷?寫個請假系統,為了實現 “員工提交→領導審批→HR 終審” 的流程,寫了幾百行 if-else,結果需求一變(比如超過 3 天要二級審批),代碼改得面目全非,最后自己都看不懂。

這還不算完,一旦流程復雜起來,什么狀態機、任務分配、分支判斷…… 簡直讓人頭禿。

但今天,我要告訴你一個秘密:審批流可以優雅到只用一行代碼!沒錯,就是那種 “寫完直接摸魚,需求隨便改” 的神器。

一、核心武器:Flowable,審批界的瑞士軍刀

1. 為什么是 Flowable?

在 Java 領域,提到審批流,繞不開兩個名字:Activiti 和 Flowable。

Activiti 是老前輩,但 Flowable 更像 “改良版”—— 它繼承了 Activiti 的核心團隊,還做了這些升級:

  • 更輕量:移除了冗余模塊,專注 BPMN、CMMN、DMN 三大核心引擎。
  • 更強兼容性:完美支持 Spring Boot 3.x,和最新的 Java 17 無縫對接。
  • 更智能:內置動態流程定義、狀態監聽、郵件通知等功能,開箱即用。

2. 一行代碼的魔法:自動部署與默認配置

Flowable 有個 “懶人模式”:只要把流程定義文件(BPMN)放在 classpath:/processes 目錄下,Spring Boot 啟動時會自動部署。

舉個栗子:

創建一個 leave.bpmn 文件,畫個簡單的請假流程(員工提交→領導審批→結束),然后在代碼里只需要:

ProcessInstance instance = runtimeService.startProcessInstanceByKey("leave");

就這一行,流程直接跑起來!Flowable 會自動解析 BPMN 文件,創建流程實例,分配任務,甚至生成數據庫表(沒錯,它會自動建表)。

這就像點外賣:你只需要下單(寫一行代碼),剩下的做菜、配送全交給外賣小哥(Flowable)。

二、實戰:用 Flowable 實現請假審批

1. 環境搭建:3 分鐘搞定依賴

首先,在 pom.xml 里加兩行依賴:

<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter</artifactId>
    <version>7.0.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

然后在 application.properties 里配置數據庫(這里用 H2 演示):

spring.datasource.url=jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1
spring.h2.console.enabled=true

啟動項目,訪問 http://localhost:8080/h2-console,就能看到 Flowable 自動創建的 28 張表(別慌,大部分不用管)。

2. 流程設計:用流程圖代替代碼

打開 IDEA,安裝 actiBPM 插件,畫個請假流程:

  • 開始事件 → 用戶任務(員工提交) → 排他網關 → 用戶任務(領導審批) → 結束事件

關鍵配置:

  • 在 “員工提交” 任務里,設置 candidateGroups 為 employee(表示員工組可處理)。
  • 在排他網關里,添加條件:${day > 3}(如果請假天數超過 3 天,進入下一級審批)。
  • 在 “領導審批” 任務里,設置 candidateGroups 為 manager。

畫完保存到 src/main/resources/processes/leave.bpmn,Flowable 會自動部署。

3. 代碼實現:從提交到審批,絲滑體驗

(1)提交申請:啟動流程

@RestController
public class LeaveController {
    @Autowired
    private RuntimeService runtimeService;
    @PostMapping("/apply")
    public String applyLeave(@RequestParam Integer day) {
        // 啟動流程,傳遞變量(請假天數)
        runtimeService.startProcessInstanceByKey("leave", Collections.singletonMap("day", day));
        return "申請已提交,等待領導審批";
    }
}

Flowable 做了什么?

  • 解析 leave.bpmn,創建流程實例。
  • 自動分配 “員工提交” 任務給 employee 組的用戶。
  • 根據 day 變量判斷是否觸發二級審批。

(2)審批操作:處理任務

@Autowired
private TaskService taskService;
@PostMapping("/approve")
public String approveTask(@RequestParam String taskId, @RequestParam boolean approved) {
    Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
    // 完成任務,傳遞審批結果
    taskService.complete(taskId, Collections.singletonMap("approved", approved));
    return approved ? "審批通過" : "審批駁回";
}

Flowable 又做了什么?

  • 找到對應的任務(根據 taskId)。
  • 完成任務后,自動推進流程到下一個節點。
  • 如果審批駁回,流程直接結束;如果通過,繼續下一步。

4. 查看狀態:流程走到哪了?

Flowable 提供了強大的查詢 API:

@Autowired
private HistoryService historyService;
@GetMapping("/status/{processInstanceId}")
public List<HistoricActivityInstance> getProcessStatus(@PathVariable String processInstanceId) {
    return historyService.createHistoricActivityInstanceQuery()
            .processInstanceId(processInstanceId)
            .orderByHistoricActivityInstanceStartTime().asc()
            .list();
}

返回的列表會告訴你流程經過了哪些節點,每個節點的處理時間,甚至審批人是誰。這就像快遞單號:你可以隨時查詢流程到哪了,有沒有被卡在某個環節。

三、進階玩法:讓審批流更智能

1. 動態流程:需求變了?不用改代碼!

有時候,流程需要根據業務規則動態調整。比如:

  • 請假超過 3 天,需要 HR 審批。
  • 報銷金額超過 1 萬,需要財務總監審批。

Flowable 支持動態修改流程定義,甚至在運行時替換流程。

舉個栗子:

創建一個 dynamic.bpmn,在排他網關里添加條件:

<conditionExpression xsi:type="tFormalExpression">
    ${amount > 10000}
</conditionExpression>

然后在代碼里啟動流程時傳遞 amount 變量:

runtimeService.startProcessInstanceByKey("dynamic", Collections.singletonMap("amount", 15000));

Flowable 會自動根據 amount 判斷是否觸發財務總監審批。這就像點菜:你可以根據預算(變量)選擇不同的菜品(流程分支)。

2. 狀態監聽:流程出事了?我來通知你!

Flowable 允許你在流程的關鍵節點(如任務創建、完成、流程結束)添加監聽器。

舉個栗子:

在 BPMN 文件里給 “領導審批” 任務添加一個監聽器:

<userTask id="managerApproval" name="領導審批">
    <extensionElements>
        <activiti:taskListener event="complete" class="com.example.listener.ApprovalListener"/>
    </extensionElements>
</userTask>

然后實現監聽器:

public class ApprovalListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        boolean approved = (boolean) delegateTask.getVariable("approved");
        if (!approved) {
            // 發送郵件通知員工
            sendEmail(delegateTask.getVariable("employeeEmail"), "審批被駁回");
        }
    }
}

這樣,當領導駁回申請時,員工會收到郵件通知。這就像智能門鎖:有人開門(任務完成),手機會收到提醒。

3. 郵件通知:審批結果自動發郵件

Flowable 內置郵件任務,只需在 BPMN 里拖一個 “服務任務”,配置郵件參數:

<serviceTask id="sendEmail" name="發送郵件" flowable:class="org.flowable.email.service.impl.EmailTaskExecutor">
    <extensionElements>
        <flowable:field name="to">${employeeEmail}</flowable:field>
        <flowable:field name="subject">請假審批結果</flowable:field>
        <flowable:field name="text">您的請假申請已 ${approved ? "通過" : "駁回"}</flowable:field>
    </extensionElements>
</serviceTask>

然后在 application.properties 里配置郵件服務器:

spring.mail.host=smtp.qq.com
spring.mail.username=your@qq.com
spring.mail.password=your-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

流程走到這個節點時,會自動發送郵件。這就像快遞簽收:包裹到了(流程結束),自動發個短信通知你。

四、深度解析:Flowable 的底層邏輯

1. 流程定義:BPMN 文件里的秘密

BPMN 是一種 XML 格式的流程定義語言,它定義了流程的節點、流向、條件等。

關鍵元素:

  • StartEvent:流程起點。
  • UserTask:需要人工處理的任務。
  • ExclusiveGateway:條件分支(類似 if-else)。
  • ServiceTask:自動執行的任務(如發送郵件)。
  • EndEvent:流程終點。

Flowable 會解析 BPMN 文件,生成一個 ProcessDefinition 對象,包含流程的所有信息。

2. 流程實例:每個申請都是一個實例

當調用 startProcessInstanceByKey 時,Flowable 會創建一個 ProcessInstance,它是流程定義的 “運行時副本”。

每個流程實例有自己的變量、任務列表、執行路徑。

就像工廠流水線:流程定義是生產線圖紙,流程實例是正在生產的產品。

3. 任務分配:如何找到正確的審批人

Flowable 支持多種任務分配方式:

  • 固定用戶:直接指定 assignee 為 zhangsan。
  • 用戶組:設置 candidateGroups 為 manager,組內用戶都能處理。
  • 表達式:用 EL 表達式動態計算審批人,如 ${employee.manager}。

舉個栗子:

在 BPMN 里給任務設置 assignee 為 ${managerId},啟動流程時傳遞 managerId 變量:

runtimeService.startProcessInstanceByKey("leave", Collections.singletonMap("managerId", "li4"));

Flowable 會自動把任務分配給 li4。

五、避坑指南:新手常犯的 3 個錯誤

1. 流程定義文件放錯位置

Flowable 只掃描 classpath:/processes 目錄下的 BPMN 文件。如果放在其他地方(如 resources/bpmn),不會自動部署。

解決方案:檢查文件路徑,或者手動部署:

repositoryService.createDeployment()
    .addClasspathResource("bpmn/leave.bpmn")
    .deploy();

2. 變量名與 BPMN 中的不一致

比如在 BPMN 里用 ${day > 3} 判斷,而啟動流程時傳遞的變量名是 days,會導致條件不生效。

解決方案:嚴格保持變量名一致,建議用 IDE 的插件校驗 BPMN 文件。

3. 數據庫連接問題

Flowable 默認使用 H2 內存數據庫,重啟后數據會丟失。如果需要持久化,換成 MySQL:

spring.datasource.url=jdbc:mysql://localhost:3306/flowable?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456

六、高級技巧:讓審批流飛起來

1. 動態生成流程定義

如果流程需要根據用戶輸入動態變化(如審批節點數量),可以用代碼生成 BpmnModel:

BpmnModel bpmnModel = new BpmnModel();
Process process = bpmnModel.createProcess("dynamicProcess");

// 添加開始事件
StartEvent startEvent = new StartEvent();
startEvent.setId("start");
process.addFlowElement(startEvent);

// 添加用戶任務
UserTask task = new UserTask();
task.setId("task1");
task.setName("審批任務");
task.setAssignee("zhangsan");
process.addFlowElement(task);

// 添加結束事件
EndEvent endEvent = new EndEvent();
endEvent.setId("end");
process.addFlowElement(endEvent);

// 連線
process.addFlowElement(new SequenceFlow("start", "task1"));
process.addFlowElement(new SequenceFlow("task1", "end"));

// 部署流程
Deployment deployment = repositoryService.createDeployment()
    .addBpmnModel("dynamic.bpmn", bpmnModel)
    .deploy();

這樣就能動態生成流程,無需手動畫 BPMN 文件。

2. 流程監控與調優

Flowable 提供了強大的監控 API:

// 查詢所有運行中的流程實例
runtimeService.createProcessInstanceQuery().list();

// 查詢任務積壓情況
taskService.createTaskQuery().taskAssignee("zhangsan").count();

// 查看數據庫性能
historyService.createHistoricProcessInstanceQuery().averageDuration();

通過這些數據,可以優化流程設計,比如調整任務分配策略,減少審批延遲。

3. 與 Spring Security 集成

如果需要基于用戶權限控制審批,集成 Spring Security:

@Autowired
private SecurityContextHolder securityContextHolder;

@PostConstruct
public void init() {
    FlowableSecurity.setAuthenticationProvider((Authentication authentication) -> {
        return securityContextHolder.getContext().getAuthentication();
    });
}

然后在 BPMN 里用 candidateGroups 關聯 Spring Security 的角色。

七、總結

Flowable 用 “一行代碼” 實現了審批流的極簡開發,同時保留了高度的靈活性和擴展性。無論是簡單的請假流程,還是復雜的多級審批,Flowable 都能輕松應對。

責任編輯:武曉燕 來源: 石杉的架構筆記
相關推薦

2025-02-12 09:55:01

Java代碼性能

2021-02-24 14:30:59

JavaScript語言開發

2024-05-31 14:04:18

2023-11-10 09:41:44

Python代碼

2024-09-18 06:10:00

條件表達式判斷代碼Python

2022-02-24 10:40:14

Python代碼

2025-04-09 11:20:00

LINQ代碼數據處理

2016-12-02 08:53:18

Python一行代碼

2025-05-09 08:00:00

JavaScript代碼防抖節流

2021-10-29 10:38:20

代碼 PILPython

2024-12-30 08:10:00

C++17代碼文件

2017-04-05 11:10:23

Javascript代碼前端

2022-04-09 09:11:33

Python

2014-02-12 13:43:50

代碼并行任務

2021-11-11 23:02:16

電腦垃圾軟件

2025-04-27 03:00:00

Spring集成測試

2023-08-14 08:42:41

2022-08-26 00:35:31

Java工作流系統

2021-11-02 16:25:41

Python代碼技巧

2020-09-09 16:00:22

Linux進程
點贊
收藏

51CTO技術棧公眾號

免费成人黄色| 亚洲大尺度在线观看| 国产精品久久久网站| 精品国产户外野外| 日本精品一区二区三区视频| 亚洲一区精品在线观看| 国自产拍偷拍福利精品免费一| 亚洲精品久久久久久久久久久久 | 午夜国产欧美理论在线播放| 日韩av在线天堂网| 中文字幕免费高清在线| 美女av在线免费看| 中文字幕色av一区二区三区| 国产区欧美区日韩区| 最近中文字幕在线观看| 好看的亚洲午夜视频在线| 国产亚洲欧洲高清一区| 影音先锋资源av| 国产福利亚洲| 精品欧美国产一区二区三区| 夜夜爽www精品| 欧洲成人av| 成人一区二区三区视频 | 国产一二三四五| 最新中文字幕第一页| 永久亚洲成a人片777777| 亚洲视频网站在线观看| 亚洲av无码专区在线播放中文| 成人精品国产亚洲| 黑人精品xxx一区| www.国产亚洲| 蜜桃av在线免费观看| 国产情人综合久久777777| 成人高清av| 欧美精品亚洲一区二区在线播放| av天堂永久资源网| av午夜在线观看| 一区二区三区欧美日| 亚洲高清乱码| 激情在线视频| 久久综合久久综合久久| 国产精品区二区三区日本| 99国产在线播放| 久久66热偷产精品| 国产精品一区二区性色av| 免费的毛片视频| 翔田千里一区二区| 68精品国产免费久久久久久婷婷 | 俺要去色综合狠狠| 亚洲人成网在线播放| 久久久久久久无码| 果冻天美麻豆一区二区国产| 欧美精品一区二区久久久| 无码人妻一区二区三区精品视频| 日韩欧美一级| 精品日韩一区二区三区免费视频| 黄色片子免费看| 日韩激情欧美| 亚洲变态欧美另类捆绑| 亚洲成a人无码| 成人香蕉社区| 亚洲国产中文字幕在线观看| 中文字幕在线播放一区| 卡通动漫国产精品| 亚洲精品福利在线观看| 国产交换配乱淫视频免费| 亚洲精品蜜桃乱晃| 中文字幕视频一区二区在线有码 | 日韩免费在线看| 日韩 国产 欧美| 蜜桃精品视频在线观看| 国产专区精品视频| 国产女人爽到高潮a毛片| 国内精品不卡在线| 国产伦精品一区二区三区高清版| 色久视频在线播放| 国产精品免费网站在线观看| 亚洲毛片aa| 2021国产在线| 欧美日韩亚洲一区二| 国产一区二区视频免费在线观看| 黄色精品视频| 日韩午夜激情免费电影| 星空大象在线观看免费播放| 国产精品一线天粉嫩av| 日韩资源在线观看| 久久午夜无码鲁丝片| 午夜在线视频一区二区区别| 国产在线播放不卡| 免费观看成年人视频| 久久久久99精品国产片| av动漫免费观看| 97人澡人人添人人爽欧美| 日本丶国产丶欧美色综合| 色91精品久久久久久久久| 国产精品qvod| 色婷婷av一区二区三区在线观看| 麻豆91精品91久久久| 亚洲免费中文| 91视频8mav| 日本精品专区| 一区二区三区在线视频免费观看| 欧美日韩亚洲一二三| 美女日韩一区| 中文字幕日韩欧美在线| 国产成人无码精品亚洲| 久久精品国产免费看久久精品| 国产精品乱码视频| 日本网站在线免费观看视频| 午夜精品久久久久久久99水蜜桃| 北条麻妃在线视频| 国内精品免费| 久久亚洲精品网站| 波多野结衣小视频| www.色综合.com| 中文字幕精品一区日韩| 爱情电影社保片一区| 欧美www视频| 欧美性生交大片| 亚洲影院在线| 国产精品久久久久久久小唯西川 | 国产免费一区二区三区免费视频| 91啦中文在线观看| 97超碰国产精品| 四虎成人精品一区二区免费网站| 亚洲欧美中文日韩在线| 日本特黄一级片| 福利电影一区二区| 国产欧美综合一区| 亚洲精品大全| 中文字幕亚洲自拍| 亚洲欧美一二三区| 不卡一区二区在线| 国产成人免费高清视频| 亚洲最大的免费视频网站| 亚洲天堂网站在线观看视频| 1级黄色大片儿| 成人av在线网站| 成人av在线播放观看| www.成人| 欧美成人精品不卡视频在线观看| 国产精品一区二区黑人巨大| 国产精品激情偷乱一区二区∴| 五月婷婷狠狠操| 久久不见久久见中文字幕免费| 欧美亚洲另类在线| 婷婷av一区二区三区| 午夜欧美大尺度福利影院在线看| 亚洲一区二区三区黄色| 国产精品啊啊啊| 成人免费视频网站| av影视在线| 日韩av一区二区在线| 四虎成人在线观看| 91久色porny| 日av中文字幕| 欧洲乱码伦视频免费| 国产精品电影观看| 在线免费观看黄色av| 在线播放/欧美激情| 欧美国产日韩在线观看成人| 国产成人高清视频| 日韩成人手机在线| 欧美激情网址| 日本成人激情视频| av在线播放av| 欧美一区二区三区男人的天堂| 欧美日韩在线观看免费| 成人夜色视频网站在线观看| 黄色一级片播放| 国产欧美日韩在线一区二区 | 嫩呦国产一区二区三区av | 蜜臀国产一区| 这里只有精品丝袜| 99久久一区二区| 午夜日韩在线电影| 国产7777777| 国产传媒日韩欧美成人| 日韩欧美一区三区| 凹凸成人精品亚洲精品密奴| 97自拍视频| 2022成人影院| 欧美成人h版在线观看| 成人毛片在线免费观看| 色婷婷精品久久二区二区蜜臀av| 亚洲欧美精品久久| 不卡的av在线| 嫩草影院国产精品| 一区视频在线| 先锋影音一区二区三区| 亚洲精品观看| 国产精品欧美一区二区| 人交獸av完整版在线观看| 日韩电影中文 亚洲精品乱码| 中文字幕久久网| 亚洲国产日韩在线一区模特| 亚洲成人黄色av| 成人性生交大合| 在线观看免费黄网站| 一区福利视频| 日韩影片在线播放| 岛国av一区| 91精品久久久久久综合乱菊 | 国产免费观看久久黄| 欧美videos另类精品| 在线一区二区日韩| 天天射天天色天天干| 91精品福利在线一区二区三区| 欧美一区二区三区网站| 一区二区三区欧美久久| 青青青视频在线免费观看| 91在线观看污| 韩国av中国字幕| 蓝色福利精品导航| 116极品美女午夜一级| 很黄很黄激情成人| 熟妇熟女乱妇乱女网站| 精品国产aⅴ| 久久国产精品免费一区| 日本高清久久| 国产日韩欧美中文| 成人在线视频免费| 青草青草久热精品视频在线网站 | 国产精品视频一区二区三区四| 国产亚洲成av人片在线观看 | 婷婷社区五月天| 国产欧美一区二区精品婷婷| 国产偷人妻精品一区| 成人午夜在线视频| 亚洲欧美日韩中文字幕在线观看| 蜜臀久久99精品久久久久久9| 91黄色小网站| 亚洲欧美日韩一区在线观看| 国产 日韩 欧美在线| 欧美国产先锋| 欧美少妇一区二区三区| 97精品国产一区二区三区| 亚洲黄色一区二区三区| 不卡中文字幕| 色乱码一区二区三在线看| 欧美极品在线观看| 欧美日韩亚洲一区二区三区在线观看| 少妇高潮一区二区三区| 久久久久网址| 偷拍亚洲色图| 欧美三级网色| 欧美亚洲激情| 一区二区三区免费看| 999视频精品| 中文字幕在线乱| 91精品天堂福利在线观看| 一级一片免费播放| 一区二区日韩欧美| bt天堂新版中文在线地址| 激情亚洲网站| 日韩激情免费视频| 久久av一区二区三区| 日韩视频免费在线播放| 美国欧美日韩国产在线播放| 日韩av一卡二卡三卡| 国产一区二区三区观看| 无码人妻丰满熟妇区毛片蜜桃精品 | 日本特黄a级片| 久久精品国产成人一区二区三区| 日日干日日操日日射| 国产高清在线观看免费不卡| 日本一卡二卡在线| 久久精品亚洲精品国产欧美kt∨| av中文字幕免费观看| 国产欧美日韩另类一区| 久久国产波多野结衣| 亚洲一区二区三区四区在线 | 国产精品实拍| 久久久久久网址| 亚洲综合在线电影| 成人中文字幕在线观看| jizz久久精品永久免费| 蜜桃av久久久亚洲精品| 欧美xxxxx视频| 国产手机免费视频| 日韩精品乱码av一区二区| 五月花丁香婷婷| 99久久精品99国产精品| 亚洲av毛片基地| 一区二区三区久久| 亚洲熟女综合色一区二区三区| 欧美日韩aaaaaa| 少妇喷水在线观看| 中文字幕亚洲欧美日韩在线不卡| 先锋成人av| 日韩美女写真福利在线观看| 99er精品视频| 麻豆91蜜桃| 欧美不卡高清| 欧美日韩大尺度| 国产激情91久久精品导航 | 亚洲激情av在线| 欧美a视频在线观看| 日韩欧美精品三级| 国产视频福利在线| 久久久久久久久亚洲| 成人福利一区二区| 国模精品一区二区三区| 水蜜桃精品av一区二区| 每日在线更新av| 国产美女av一区二区三区| 久久只有这里有精品| 亚洲黄色尤物视频| 99re热视频| 亚洲激情国产精品| 99在线播放| 成人羞羞国产免费| 精品一区二区三区的国产在线观看| 国内少妇毛片视频| 国产一区二区看久久| 俄罗斯毛片基地| 欧美日韩免费观看中文| www.香蕉视频| 久久久av网站| 国产精品天堂蜜av在线播放| 久久综合九九| 亚洲精品人人| 337p日本欧洲亚洲大胆张筱雨| 国产精品二区一区二区aⅴ污介绍| 欧美特黄aaaaaa| 亚洲激情免费观看| 男人添女人下部高潮视频在线观看| 国产日韩亚洲欧美| 日韩国产综合| 无码粉嫩虎白一线天在线观看| 国产精品夜夜嗨| 人人澡人人澡人人看| 欧美影院一区二区三区| 四虎精品成人影院观看地址| 性欧美在线看片a免费观看| 午夜久久av| 亚洲中文字幕无码一区二区三区 | 亚洲伊人一本大道中文字幕| 清纯唯美日韩| 99sesese| 日韩一区有码在线| 中文字幕有码无码人妻av蜜桃| 国产亚洲精品高潮| 久久91导航| 日韩高清国产精品| 男女男精品视频网| 长河落日免费高清观看| 欧美无人高清视频在线观看| h网站视频在线观看| 国产精品视频最多的网站| 日本一区二区三区视频| 中国黄色片免费看| 日韩一区中文字幕| 国产成人a人亚洲精品无码| 色综合色综合网色综合| avtt综合网| 夫妻免费无码v看片| 国产亚洲精品精华液| 这里只有久久精品视频| 中文字幕日韩欧美在线视频| 亚洲伦理网站| 五月天激情图片| 国产成人在线电影| 日本学生初尝黑人巨免费视频| 亚洲国产欧美在线成人app | 中文字幕一区二区三区人妻不卡| 欧美午夜精品久久久久久浪潮 | 亚洲2区在线| 黄色一级视频在线播放| 99久久久久久| 国产美女www爽爽爽| 久久精品91久久久久久再现| 日韩精品免费视频一区二区三区 | 蜜桃视频在线观看播放| 日韩免费三级| 国产一区不卡在线| 精品在线播放视频| 永久免费精品影视网站| 国产精品一区三区在线观看| 国产精品久久中文字幕| 国产欧美视频在线观看| 国产99视频在线| 91成人在线播放| 色男人天堂综合再现| 国产成人精品一区二区三区在线观看| 日韩欧美精品在线观看| 成人在线网址| 久久精品日韩精品| 国产一区二区视频在线播放| 久久久久久久久久影院| 日韩在线中文字| 欧美成人基地| 小明看看成人免费视频| 精品成人在线视频| 欧美猛烈性xbxbxbxb| 久久99国产精品99久久| 国产原创一区二区三区| www.国产毛片| 欧美黑人国产人伦爽爽爽| 精品国精品国产自在久国产应用 |