精品欧美一区二区三区在线观看 _久久久久国色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在线| 污免费在线观看| 欧美大片免费高清观看| 中文字幕亚洲不卡| 久久综合中文色婷婷| 国产精选久久久| 丝袜诱惑亚洲看片| 久久久久在线观看| 精品人妻伦九区久久aaa片| 任你躁在线精品免费| 欧美日产在线观看| 91视频最新入口| 怡红院红怡院欧美aⅴ怡春院| 91麻豆国产精品久久| www.成人三级视频| 亚洲无码久久久久久久| 欧美亚洲自偷自偷| 欧美激情图片区| 中国1级黄色片| 伊人久久大香线蕉av不卡| 日韩欧美一二三| 一区二区日本伦理| 深夜福利免费在线观看| 国产成人亚洲综合a∨婷婷图片| 国产v综合ⅴ日韩v欧美大片| 久久免费播放视频| 亚洲欧美网站在线观看| 中文字幕日韩免费视频| 丰满少妇高潮一区二区| 老司机成人在线| 精品国产麻豆免费人成网站| 国产成人美女视频| 欧美一区=区三区| 色狠狠一区二区三区香蕉| 欧美不卡在线播放| 2020av在线| 亚洲成人久久影院| 亚洲精品蜜桃久久久久久| 4438x成人网全国最大| 亚洲图片欧美激情| 水蜜桃亚洲一二三四在线| 天堂在线中文网| www.性欧美| 精品久久精品久久| 亚洲欧美日韩免费| 91视频观看视频| 久久精品国产一区二区三区日韩 | 久久久久久久尹人综合网亚洲| 韩国三级电影久久久久久| 亚洲国产精品成人无久久精品| 国产精品激情| 久久久免费观看| 九九热精品在线观看| 国产精品豆花视频| 欧美大片在线看| 久久免费黄色网址| 亚洲影院在线| 国产精品成人品| 中文字幕+乱码+中文| 久久国产视频网| 亚洲综合小说区| 亚洲经典一区二区| 91视频观看免费| 特级西西444www大精品视频| 午夜激情视频在线观看| 亚洲视频一区在线| 久久久久福利视频| 欧美a级在线观看| 在线免费观看不卡av| 激情黄色小视频| 日韩不卡在线视频| 亚洲第一福利视频| 人妻aⅴ无码一区二区三区| 久久看人人摘| 欧美极品欧美精品欧美视频 | 国产一区福利视频| 极品白浆推特女神在线观看| 国产精品乱人伦| 丁香色欲久久久久久综合网| 蜜桃视频m3u8在线观看| 欧美日韩综合不卡| 国产精品入口麻豆| 禁果av一区二区三区| 久久av红桃一区二区小说| 久热这里只有精品在线| 久久一区中文字幕| 4444kk亚洲人成电影在线| 丝袜视频国产在线播放| 中文字幕日本乱码精品影院| 可以在线看的av网站| 国产成人精品一区二区三区视频| 日韩午夜在线观看视频| 欧美熟妇一区二区| 欧美午夜在线| 国产精品第2页| 免费av网站在线播放| 中文字幕第一区第二区| 亚洲人精品午夜射精日韩 | 人妻互换一区二区激情偷拍| 伊人精品在线| 91精品视频一区| 你懂的视频在线| 亚洲一区在线视频| 亚洲这里只有精品| 天天躁日日躁狠狠躁欧美巨大小说 | 天天干天天操天天做| 欧美黄色录像| 欧美精品日韩www.p站| 日本中文字幕在线观看视频| av成人免费在线观看| 在线一区高清| 成人视屏在线观看| 日韩av最新在线观看| 欧美精品一区二区蜜桃| 开心九九激情九九欧美日韩精美视频电影 | 国产精品素人视频| 欧美 日韩 国产在线观看| 精品国产一区二区三区性色av| 亚洲视频视频在线| 草久视频在线观看| 成人精品视频一区二区三区 | av电影在线不卡| 99精品视频免费| 都市激情久久久久久久久久久| 免费av在线网址| 欧美色图12p| 免费观看a级片| 香蕉成人久久| 欧美大香线蕉线伊人久久| 欧美人与性动交α欧美精品济南到| 欧美电影在线免费观看| 国产黄色片在线| 日韩av一区二区在线影视| 久久久水蜜桃| 不卡一二三区| 亚洲人成电影网站色xx| www.国产毛片| 久久精品亚洲国产奇米99| 欧在线一二三四区| 精品日产免费二区日产免费二区| 清纯唯美日韩制服另类| 嫩草精品影院| 色婷婷激情综合| 国产三级av在线播放| 可以免费看不卡的av网站| 欧美亚洲一级二级| 国模视频一区| x99av成人免费| 国产美女免费视频| 亚洲一区二区三区在线| 无码成人精品区在线观看| 99精品免费| 欧美尤物一区| 欧美性www| 美女福利精品视频| 四虎精品一区二区三区| 欧美特黄级在线| 亚洲天堂岛国片| 狠狠色丁香九九婷婷综合五月| 免费看日b视频| a级毛片免费观看在线| 欧美一级欧美三级在线观看| 国产在线观看99| 久久综合狠狠综合| mm131亚洲精品| 欧美91大片| 精品不卡在线| 成人精品一区二区三区电影| 欧美成年人网站| 四虎影视精品成人| 欧美狂野另类xxxxoooo| 青青草手机视频在线观看| 99精品国产视频| 亚洲欧美在线精品| 欧美日韩三级电影在线| 免费av一区二区三区| 国产成人福利夜色影视| 海角国产乱辈乱精品视频| 免费在线稳定资源站| 欧美一区二区三区在线观看| 国产手机在线视频| 国产精品网站导航| 91超薄肉色丝袜交足高跟凉鞋| 另类亚洲自拍| 亚洲av综合色区| 九九久久电影| 97netav| 福利精品在线| 97在线免费观看视频| 日本欧美在线视频免费观看| 亚洲精品91美女久久久久久久| 亚洲一区 中文字幕| 亚洲成人精品影院| 久艹在线观看视频| 久久伊99综合婷婷久久伊| 肉色超薄丝袜脚交| 久久久天天操| 妞干网在线观看视频| 国产精品99在线观看| 久久综合九色综合久99| 欧美影院精品| 国产精品一二三在线| 国产乱码精品一区二三赶尸艳谈| 久久久精品日本| 国产天堂在线| 亚洲国产97在线精品一区| 99精品视频免费看| 欧美唯美清纯偷拍| 69视频免费在线观看| 亚洲一区二区不卡免费| 视频国产一区二区| 久久精品一区四区| 日韩av一二区| 成人av在线影院| 久草福利在线观看| 看电视剧不卡顿的网站| 青青青在线视频免费观看| 宅男噜噜噜66国产日韩在线观看| 亚洲精品天堂成人片av在线播放| 欧州一区二区| 欧洲精品码一区二区三区免费看| 国产欧美自拍一区| yy111111少妇影院日韩夜片| 精品视频在线观看免费观看| 国产精品专区一| 国产激情久久| 国产精品日韩久久久久| 欧美成人精品三级网站| 国产成+人+综合+亚洲欧洲| 原纱央莉成人av片| 欧美一级免费看| a一区二区三区| 青青精品视频播放| 亚洲承认视频| 国产精品久久久久福利| 丝袜美腿一区| 国产mv免费观看入口亚洲| 成人免费短视频| 欧美一区二区三区艳史| 在线黄色的网站| 茄子视频成人在线| 欧美精品高清| 国产欧美在线视频| 五月天色综合| 亚洲综合在线做性| 成人影院中文字幕| 精品免费国产| 欧美美乳视频| 亚洲高清123| 99热在线成人| 日韩在线视频在线| 亚洲欧洲日本一区二区三区| 九一国产精品视频| 日日摸夜夜添夜夜添亚洲女人| 久久精品视频91| 激情五月婷婷综合| 国产吃瓜黑料一区二区| 91在线免费视频观看| 亚洲AV无码成人精品区明星换面| 国产日韩精品一区二区三区在线| av资源在线免费观看| 亚洲精品国久久99热| 国产大片中文字幕| 日本韩国精品一区二区在线观看| 亚洲天堂自拍偷拍| 日韩精品一区二区三区四区| 五十路在线视频| 中文字幕亚洲自拍| a级大胆欧美人体大胆666| 欧美在线视频观看免费网站| 99久久精品一区二区成人| 亚洲综合成人婷婷小说| 偷拍一区二区| 欧美爱爱视频网站| 亚洲日本视频| 日本黄大片一区二区三区| 国产美女视频一区| 国产精品无码永久免费不卡| 国产精品成人网| 日韩乱码在线观看| 欧美人与性动xxxx| 性感美女一级片| 国产香蕉一区二区三区在线视频| 免费av不卡| 日本成人激情视频| 日韩有吗在线观看| 久中文字幕一区| 欧美久色视频| 欧美三级午夜理伦三级富婆| 成人h精品动漫一区二区三区| 黄色裸体一级片| 精品色蜜蜜精品视频在线观看| 亚洲自拍偷拍另类| 日韩精品极品在线观看播放免费视频 | 日本精品不卡| 国产69精品久久久久9999apgf | 久久丁香四色| 日韩欧美一区二区在线观看| 一区二区三区在线电影| 精品久久久久久久免费人妻| 成人午夜电影久久影院| 美国黄色片视频| 动漫精品一区二区| 韩国av永久免费| 久久精品2019中文字幕| 亚洲爱爱视频| 久久亚洲国产精品日日av夜夜| 亚洲欧美伊人| 制服丝袜中文字幕第一页 | 亚洲精品国产品国语在线| 精品国产丝袜高跟鞋| 国产精品wwww| 亚洲综合福利| av免费观看网| 成人aaaa免费全部观看| 欧产日产国产v| 欧美夫妻性生活| 91高清在线| 亚洲性生活视频在线观看| 欧美aaaxxxx做受视频| 91久久精品国产| 欧美第一精品| 五月激情五月婷婷| 国产精品视频九色porn| 黄色污污网站在线观看| 亚洲欧美自拍一区| 亚洲黄色中文字幕| 九色综合婷婷综合| 宅男噜噜噜66一区二区| 99久久免费看精品国产一区| 亚洲一区中文日韩| 亚洲精品久久久久久无码色欲四季| 久久综合伊人77777| 亚洲伊人精品酒店| 国产精品无码乱伦| 久久福利资源站| 久久嫩草捆绑紧缚| 欧美精品久久99| 中国av在线播放| 成人看片视频| 在线不卡亚洲| 国产精品无码网站| 一道本成人在线| 超碰97在线免费观看| 国产九九精品视频| 一本精品一区二区三区| 国产成人精品一区二区三区在线观看| 亚洲欧美日韩国产综合在线| 国产高清不卡视频| 国语自产精品视频在免费| 婷婷五月色综合香五月| 成人精品视频一区二区| 中文一区二区完整视频在线观看| 亚洲一卡二卡在线| 九九精品在线视频| 久久久久97| 国产福利影院在线观看| 亚洲视频每日更新| 天堂在线视频观看| 国产97在线亚洲| 亚洲字幕久久| 在线免费播放av| 国产精品国产三级国产专播品爱网| 一区二区乱子伦在线播放| www.久久久久| 大陆精大陆国产国语精品| 5月婷婷6月丁香| 国产精品美女久久久久久| 国产99久久九九精品无码免费| 欧美精品手机在线| 日韩深夜福利| 国产成年人视频网站| 亚洲激情欧美激情| 日本天堂影院在线视频| 国产精品视频不卡| 亚洲一级一区| 免费人成又黄又爽又色| 日韩一区二区三区高清免费看看| 美女扒开腿让男人桶爽久久软| 亚洲aⅴ天堂av在线电影软件| 国产乱妇无码大片在线观看| 国产真实夫妇交换视频| 一区二区欧美激情| 国产 日韩 欧美 综合 一区| 男人插女人下面免费视频| 一区二区三区欧美激情| 你懂的好爽在线观看| 国产66精品久久久久999小说| 久久综合五月| 国产精品自拍视频一区| 中文字幕亚洲精品| 亚洲国产欧美日韩在线观看第一区 | 啪啪一区二区三区| 亚洲乱亚洲乱妇无码|