久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Drools 规则引擎一文读懂

發布時間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Drools 规则引擎一文读懂 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、Drools 簡介

電商平臺的促銷活動

規則引擎

Drools 簡介

二、Drools 快速入門?

電商平臺促銷積分規則

開發實現

三、Drools 規則引擎構成及其核心類

Drools規則引擎構成

Drools規則引擎概念

四、Drools 基礎語法

規則文件構成

?規則體語法結構

規則注釋

Pattern模式匹配

規則比較操作符

操作步驟?

執行指定規則?

關鍵字

?五、Drools 規則屬性 attributes

enabled屬性?

dialect屬性

salience屬性?

no-loop屬性

?lock-on-active屬性

activation-group屬性

agenda-group屬性

auto-focus屬性

timer屬性

date-effective屬性

date-expires屬性

六、Drools高級語法

?global全局變量

query查詢

?function函數

條件-LHS加強

復合值限制in/not in

條件元素eval

條件元素not

條件元素exists

規則繼承

結果-RHS

insert方法

update方法

modify方法

retract/delete方法

RHS加強

halt

getWorkingMemory

getRule

規則文件編碼規范

七、WorkBench

?WorkBench簡介

配置 Tomcat

啟動服務器

WorkBench使用?

創建空間、項目

創建數據對象和drl文件

設置KieBase+KieSession

代碼使用?


一、Drools 簡介

電商平臺的促銷活動

????????小明是一家互聯網公司的軟件工程師,他們公司為了吸引新用戶經常會搞活動,小明常常為了做活動加班加點很煩躁,這不今天呀又來了一個活動需求,我們大家一起幫他看看。

????????活動規則是根據用戶購買訂單的金額給用戶送相應的積分,購買的越多送的積分越多,用戶可以使用積分來兌換相應的商品,我們這次活動的力度很大,肯定會吸引很多的用戶參加,產品經理小王興高采烈唾液橫飛的對小明講到。小明心想,又tm來這套,這次需求又要變更多少次呢?表面上還的配合,說趕緊把規則給我們吧,早點開發早點上線,小王說這次需求老簡單啦,估計你們兩個小時就搞定了,不信你看需求文檔。

100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分

小明一看,這需求果然簡單呀,作為一個工作了兩三年的程序員來講,這不就是小case,半天搞定,送積分的核心代碼如下:

public void execute() throws Exception { List<Order> orderList = getInitData();for (int i=0; i<orderList.size(); i++){ Order order = orderList.get(i); if (order.getAmout() <= 100){ order.setScore(0); addScore(order); }else if(order.getAmout() > 100 && order.getAmout() <= 500){ order.setScore(100); addScore(order); }else if(order.getAmout() > 500 && order.getAmout() <= 1000){ order.setScore(500); addScore(order); }else{ order.setScore(1000); addScore(order); } } }

????????上線運行了半天之后,財務部的小財突然監測到活動賬戶的金額大為減少,發現產品做活動竟然沒有通知到他,非常不爽,于是給領導小馬說,這樣大規模的活動,對公司財務有壓力,領導小馬權衡了一番說,這樣吧活動繼續,但是金額翻倍再送積分,于是規則變成了這樣:200元以下不給積分,1000元以下給100積分…

????????小明看領導都發話了,沒辦法改呀,不過也簡單,就是將里面的值都翻了倍,在投產上去,只是挨了不少測試的白眼。

????????活動又進行了一天,運營人員通過后臺監控發現提到2倍以后,用戶積極性變的很差,活動效果不理想,和領導商議了一下,改為最初規則的1.5倍,及150元一下不給積分,750元以下給100積分… 小明這時候的心情大概是這樣子的,一萬個下圖動物狂奔而過。

????????沒辦法還得改不是,當然這次小明可學乖了,將這些數據(多少元送多少分)存到了數據庫中,當老板再改主意的時候,只要改一下數據庫的值就可以了,小明為自己的明聰明到有點小高興。?

核心代碼:

public void execute() throws Exception { List<Order> orderList = getInitData();List<int> values = getTableValues();for (int i=0; i<orderList.size(); i++){ Order order = orderList.get(i); if (order.getAmout() <= values.get(0)){ order.setScore(values.get(3)); addScore(order); }else if(order.getAmout() > values.get(0) && order.getAmout() <= values.get(1)){ order.setScore(values.get(4)); addScore(order); }else if(order.getAmout() > values.get(1) && order.getAmout() <= values.get(2)){ order.setScore(values.get(5)); addScore(order); }else{ order.setScore(values.get(6)); addScore(order); } } }

????????正當小明得意洋洋的打了個最新版本投產上線之后,產品經理小王說積分規則層次太少了,由以前的4組變成8組,小明此刻的心情:kao …

????????小明想這樣下去非得被他們弄死,必須要找找有什么技術可以將活動規則和代碼解耦,不管規則如何變化,執行端不用動。小明搜了半天還真有這樣的東西,那就是規則引擎,那么規則引擎到底是什么東西呢?我們來看看。

規則引擎

????????規則引擎:全稱為業務規則管理系統,英文名為BRMS。規則引擎的主要思想是將應用程序中的業務決策部分分離出來,并使用預定義的語義模塊編寫業務決策(業務規則),由用戶或 開發者在需要時進行配置、管理。需要注意的是規則引擎并不是一個具體的技術框架,而是指的一類系統,即業務規則管理系統。

????????java開源的規則引擎有:Drools、Easy Rules、Mandarax、IBM ILOG。使用最為廣泛并且開源的是Drools。

主要應用場景:

????????對于一些存在比較復雜的業務規則并且業務規則會頻繁變換的系統比較適合使用規則引擎,如下:

  • 風控系統-------風險貸款、風險評估
  • 反欺詐項目-----銀行貸款、征信驗證
  • 決策平臺-------財務計算
  • 電商平臺------滿減、打折、加價購

Drools 簡介

????????Drools 是用 Java 語言編寫的開放源碼規則引擎,使用 Rete 算法對所編寫的規則求值。Drools 允許使用聲明方式表達業務邏輯。可以使用非 XML 的本地語言編寫規則,從而便于學習和理解。并且,還可以將 Java 代碼直接嵌入到規則文件中,這令 Drools 的學習更加吸引人。

Drools 還具有其他優點:

  • 非常活躍的社區支持
  • 易用
  • 快速的執行速度
  • 在 Java 開發人員中流行
  • 與 Java Rule Engine API(JSR 94)兼容

Drools 是業務邏輯集成平臺,被分為4個項目:

  • Drools Guvnor (BRMS/BPMS):業務規則管理系統
  • Drools Expert (rule engine):規則引擎,drools的核心部分
  • Drools Flow (process/workflow):工作流引擎
  • Drools Fusion (cep/temporal reasoning):事件處理

官網:http://www.drools.org/#
官方文檔:http://www.drools.org/learn/documentation.html

在項目中使用drools 時,即可以單獨使用也可以整合spring使用,如果是單獨使用僅需要導入以下maven 依賴即可。

<!--添加規則引擎依賴--><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.73.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-mvel</artifactId><version>7.73.0.Final</version></dependency>

Drools API 開發步驟如下:

二、Drools 快速入門?

電商平臺促銷積分規則

100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分

開發實現

第一步:創建Maven項目,添加Drools 規則引擎依賴。

<!--添加規則引擎依賴--><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.73.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-mvel</artifactId><version>7.73.0.Final</version></dependency><!--添加單元測試工具類--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>

第二步:根據drools要求創建resources/META-INF/kmodule.xml 配置文件

需要有一個配置文件告訴代碼規則文件drl 在哪里,在drools中這個文件就是kmodule.xml。

<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns="http://www.drools.org/xsd/kmodule"><!--name:指定kbase 名稱,可以是任意但必須唯一packages:指定規則文件存放目錄,依據實際情況進行填寫default:指定當前的kbase 是否為默認--><kbase name="rules" packages="rules" default="true"><!--name:指定ksession名稱,可以是任意但必須唯一default:指定ksession 是否為默認--><ksession name="ksession-rules" default="true"/></kbase> </kmodule>

第三步:創建業務實體對象

package com.zzg.model;public class Order implements java.io.Serializable {private int amount; //訂單金額private int score; //訂單積分@Overridepublic String toString() {return "Order{" +"amount=" + amount +", score=" + score +'}';}public int getAmount() {return amount;}public void setAmount(int amount) {this.amount = amount;}public int getScore() {return score;}public void setScore(int score) {this.score = score;} }

第四步:創建規則文件,在resources/rules/score-rules.drl

package rules;import com.zzg.model.Order;// 100 元以下不加分 rule "score_1" when$order:Order(amount<100); then$order.setScore(0);System.out.println("觸發100元以下,不加積分"); end // 100-500 元, 加100積分 rule "score_2" when$order:Order(amount>100 && amount <= 500); then$order.setScore(100);System.out.println("觸發100-500 元, 加100積分"); end // 500-10000 元, 加500積分 rule "score_3" when$order:Order(amount>500 && amount <= 1000); then$order.setScore(500);System.out.println("觸發500-1000 元, 加500積分"); end // 大于1000 元, 加1000積分 rule "score_4" when$order:Order(amount>1000); then$order.setScore(1000);System.out.println("觸發大于1000 元, 加1000積分"); end

第五步:單元測試

package com.zzg;import com.zzg.model.Order; import org.junit.Test; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession;public class TestDrools {@Testpublic void test1() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象Order order = new Order();order.setAmount(100);// 第四步kieSession.insert(order);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();System.out.println("指定規則引擎后的結果:" + order.getScore());} }

效果截圖:

23:01:01.112 [main] INFO org.drools.compiler.kie.builder.impl.KieContainerImpl - End creation of KieBase: rules 23:01:01.144 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now FIRING_ALL_RULES 23:01:01.144 [main] DEBUG org.drools.core.common.DefaultAgenda - State was FIRING_ALL_RULES is now HALTING 23:01:01.144 [main] DEBUG org.drools.core.common.DefaultAgenda - State was HALTING is now INACTIVE 23:01:01.144 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now DISPOSED 指定規則引擎后的結果:0

三、Drools 規則引擎構成及其核心類

Drools規則引擎構成

drools規則引擎由以下幾部分構成:

  • Working Memory(工作內存)
  • Rules(規則庫)
  • Inference?Engine(推理引擎)

其中Inference Engine(t推理引擎)又包含如下:

  • Pattern Match(匹配器)具體匹配那一個規則,由它來完成
  • Agenda(議程)
  • Execution Engine(執行引擎)

Drools規則引擎概念

Working Memory:工作內存,drools規則引擎會從Working Memory中獲取數據并和規則文件中定義的規則進行模式匹配,所以我們開發的應用程序只需要將我們的數據插入到Working Memory中即可,例如本案例中我們調用kieSession.insert(order)就是將order對象插入到了工作內存中。

Fact:事實,是指在drools 規則應用當中,將一個普通的JavaBean插入到Working Memory后的對象就是Fact對象,例如本案例中的Order對象就屬于Fact對象。Fact對象是我們的應用和規則引擎進行數據交互的橋梁或通道。

Rules:規則庫,我們在規則文件中定義的規則都會被加載到規則庫中。

Pattern Matcher:匹配器,將Rule Base中的所有規則與Working Memory中的Fact對象進行模式匹配,匹配成功的規則將被激活并放入Agenda中。

Agenda:議程,用于存放通過匹配器進行模式匹配后被激活的規則。

四、Drools 基礎語法

規則文件構成

drl是Drools Rule Language的縮寫

一套完整的規則文件內容構成如下:

關鍵字描述
package包名,只限于邏輯上的管理,同一個包名下的查詢或者函數可以直接調用
import用于導入類或者靜態方法
global全局變量
function自定義函數
query查詢
rule end規則體

?規則體語法結構

一個規則通常包含三個部分:屬性部分(attribute)、條件部分(LHS)和結果部分(RHS)

語法結構體:

rule "ruleName"attributeswhenLHS thenRHS end

rule:關鍵字,表示規則開始,參數為規則的唯一名稱。

attributes:規則屬性,是rule與when之間的參數,為可選項。

when:關鍵字,后面跟規則的條件部分。

LHS(Left Hand Side):是規則的條件部分的通用名稱。它由零個或多個條件元素組成。如果LHS為空,則它將被視為始終為true的條件元素。 (左手邊)

then:關鍵字,后面跟規則的結果部分。

RHS(Right Hand Side):是規則的后果或行動部分的通用名稱。 (右手邊)

end:關鍵字,表示一個規則結束。

規則注釋

在drl形式的規則文件中使用注釋和Java類中使用注釋一致,分為單行注釋和多行注釋。

單行注釋用"//"進行標記,多行注釋以"/"開始,以"/"結束。如下示例:

//規則rule1的注釋,這是一個單行注釋 rule "rule1"whenthenSystem.out.println("rule1觸發"); end/* 規則rule2的注釋, 這是一個多行注釋 */ rule "rule2"whenthenSystem.out.println("rule2觸發"); end

Pattern模式匹配

????????Drools中的匹配器可以將Rule Base中的所有規則與Working Memory中的Fact對象進行模式匹配,那么我們就需要在規則體的LHS部分定義規則并進行模式匹配。LHS部分由一個或者多個條件組成,條件又稱為pattern。

語法:

pattern的語法結構為:綁定變量名:Object(Field約束)

其中綁定變量名可以省略,通常綁定變量名的命名一般建議以$開始。如果定義了綁定變量名,就可以在規則體的RHS部分使用此綁定變量名來操作相應的Fact對象。Field約束部分是需要返回true或者false的0個或多個表達式。

入門案例中:

package rules;import com.zzg.model.Order;// 100 元以下不加分 rule "score_1" when$order:Order(amount<100); then$order.setScore(0);System.out.println("觸發100元以下,不加積分"); end

通過上面的例子我們可以知道,匹配的條件為:

1、工作內存中必須存在Order這種類型的Fact對象-----類型約束

2、Fact對象的price屬性值必須小于100------屬性約束

以上條件必須同時滿足當前規則才有可能被激活。

綁定變量既可以用在對象上,也可以用在對象的屬性上。入門案例如下:

// 100-500 元, 加100積分 rule "score_2" when$order:Order($fieldAmount:amount > 100 && amount <= 500); thenSystem.out.println("$fieldAmount=" + $fieldAmount);$order.setScore(100);System.out.println("觸發100-500 元, 加100積分"); end

LHS部分還可以定義多個pattern,多個pattern之間可以使用and或者or進行連接,也可以不寫,默認連接為and。

規則比較操作符

Drools提供的比較操作符,如下表:

符號說明
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于
contains檢查一個Fact對象的某個屬性值是否包含一個指定的對象值
not contains檢查一個Fact對象的某個屬性值是否不包含一個指定的對象值
memberOf判斷一個Fact對象的某個屬性是否在一個或多個集合中
not memberOf判斷一個Fact對象的某個屬性是否不在一個或多個集合中
matches判斷一個Fact對象的屬性是否與提供的標準的Java正則表達式進行匹配
not matches判斷一個Fact對象的屬性是否不與提供的標準的Java正則表達式進行匹配

操作步驟?

第一步:創建實體類,用于測試比較操作符

package com.zzg.model;import java.util.List;public class ComparisonEntity implements java.io.Serializable {/*** 名字集合*/private String names;/*** 字符串集合*/private List<String> list;@Overridepublic String toString() {return "ComparisonEntity{" +"names='" + names + '\'' +", list=" + list +'}';}public String getNames() {return names;}public void setNames(String names) {this.names = names;}public List<String> getList() {return list;}public void setList(List<String> list) {this.list = list;} }

第二步:在/resources/rules下創建規則文件comparison.drl

package rulesimport com.zzg.model.ComparisonEntity;/*用于測試Drools提供的比較操作符 *///測試比較操作符contains rule "rule_comparison_contains"whenComparisonEntity(names contains "張三")ComparisonEntity(list contains names)thenSystem.out.println("規則rule_comparison_contains觸發"); end//測試比較操作符not contains rule "rule_comparison_notContains"whenComparisonEntity(names not contains "張三")ComparisonEntity(list not contains names)thenSystem.out.println("規則rule_comparison_notContains觸發"); end//測試比較操作符memberOf rule "rule_comparison_memberOf"whenComparisonEntity(names memberOf list)thenSystem.out.println("規則rule_comparison_memberOf觸發"); end//測試比較操作符not memberOf rule "rule_comparison_notMemberOf"whenComparisonEntity(names not memberOf list)thenSystem.out.println("規則rule_comparison_notMemberOf觸發"); end//測試比較操作符matches rule "rule_comparison_matches"whenComparisonEntity(names matches "張.*")thenSystem.out.println("規則rule_comparison_matches觸發"); end//測試比較操作符not matches rule "rule_comparison_notMatches"whenComparisonEntity(names not matches "張.*")thenSystem.out.println("規則rule_comparison_notMatches觸發"); end

第三步:編寫單元測試

@Testpublic void test2() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象ComparisonEntity comparisonEntity = new ComparisonEntity();comparisonEntity.setNames("張三");List<String> list = new ArrayList<>();list.add("張三");list.add("李四");comparisonEntity.setList(list);// 第四步kieSession.insert(comparisonEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();}

效果截圖:

09:52:42.457 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now FIRING_ALL_RULES 規則rule_comparison_contains觸發 規則rule_comparison_memberOf觸發 規則rule_comparison_matches觸發 09:52:42.488 [main] DEBUG org.drools.core.common.DefaultAgenda - State was FIRING_ALL_RULES is now HALTING 09:52:42.488 [main] DEBUG org.drools.core.common.DefaultAgenda - State was HALTING is now INACTIVE 09:52:42.488 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now DISPOSED

執行指定規則?

????????在調用規則代碼時,滿足條件的規則都會被執行。那么如果我們只想執行其中的某個規則如何實現呢?

????????Drools給我們提供的方式是通過規則過濾器來實現執行指定規則。對于規則文件不用做任何修改,只需要修改Java代碼即可,如下:

//通過規則過濾器實現只執行指定規則 kieSession.fireAllRules(new kieSession.fireAllRules(new RuleNameEqualsAgendaFilter("rule 名稱"));

關鍵字

Drools的關鍵字分為:硬關鍵字(Hard keywords)和軟關鍵字(Soft keywords)。

硬關鍵字是我們在規則文件中定義包名或者規則名時明確不能使用的,否則程序會報錯。軟關鍵字雖然可以使用,但是不建議使用。

硬關鍵字包括:true false null

軟關鍵字包括:lock-on-active date-effective date-expires no-loop auto-focus activation-group agenda-group ruleflow-group entry-point duration package import dialect salience enabled attributes rule extend when then template query declare function global eval not in or and exists forall accumulate collect from action reverse result end over init

示例:

rule true //不可以

rule "true" 可以

?五、Drools 規則屬性 attributes

前面我們已經知道了規則體的構成如下:

rule "ruleName"attributeswhenLHSthenRHS end

本章節就是針對規則體的attributes屬性部分進行講解。Drools中提供的屬性如下表(部分屬性):

屬性名說明
salience指定規則執行優先級
dialect指定規則使用的語言類型,取值為java和mvel
enabled指定規則是否啟用
date-effective指定規則生效時間
date-expires指定規則失效時間
activation-group激活分組,具有相同分組名稱的規則只能有一個規則觸發
agenda-group議程分組,只有獲取焦點的組中的規則才有可能觸發
timer定時器,指定規則觸發的時間
auto-focus自動獲取焦點,一般結合agenda-group一起使用
no-loop防止死循環,防止自己更新規則再次觸發
lock-on-activeno-loop增強版本。可防止別人更新規則再次出發

enabled屬性?

enabled屬性對應的取值為true和false,默認值為true。

用于指定當前規則是否啟用,如果設置的值為false則當前規則無論是否匹配成功都不會觸發

第一步:創建實體類,用于測試屬性attributes

package com.zzg.model;public class AttributesEnabledEntity implements java.io.Serializable {private int num;@Overridepublic String toString() {return "AttributesEnabledEntity{" +"num=" + num +'}';}public int getNum() {return num;}public void setNum(int num) {this.num = num;} }

第二步:在/resources/rules下創建規則文件attributes-rules.drl

package rules;import com.zzg.model.AttributesEnabledEntity;/*用于測試Drools 屬性:enabled *///測試enabled rule "rule_attributes_enabled"enabled falsewhenAttributesEnabledEntity(num > 10)thenSystem.out.println("規則rule_attributes_enabled觸發"); end

第三步:編寫單元測試

@Testpublic void test4() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象AttributesEnabledEntity enabledEntity = new AttributesEnabledEntity();enabledEntity.setNum(11);// 第四步kieSession.insert(enabledEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();}

dialect屬性

dialect屬性用于指定當前規則使用的語言類型,取值為java和mvel,默認值為java。

注:mvel是一種基于java語法的表達式語言。

雖然mvel吸收了大量的java語法,但作為一個表達式語言,還是有著很多重要的不同之處,以達到更高的效率,比如:mvel像正則表達式一樣,有直接支持集合、數組和字符串匹配的操作符。

除了表達式語言外,mvel還提供了用來配置和構造字符串的模板語言。

mvel2.x表達式包含以下部分的內容:屬性表達式,布爾表達式,方法調用,變量賦值,函數定義

salience屬性?

????????salience屬性用于指定規則的執行優先級,取值類型為Integer數值越大越優先執行。每個規則都有一個默認的執行順序,如果不設置salience屬性,規則體的執行順序為由上到下。

attributes-rules.drl文件添加如下內容:

/*用于測試Drools 屬性:salience */rule "rule_attributes_salience_1"salience 10whenAttributesEnabledEntity(flag == true)thenSystem.out.println("規則 rule_attributes_salience_1 觸發"); endrule "rule_attributes_salience_2"salience 20whenAttributesEnabledEntity(flag == true)thenSystem.out.println("規則 rule_attributes_salience_2 觸發"); endrule "rule_attributes_salience_3"salience 1whenAttributesEnabledEntity(flag == true)thenSystem.out.println("規則 rule_attributes_salience_3 觸發"); end

AttributesEnabledEntity 類新增boolean 類型(flag字段)

private boolean flag;

效果截圖:

10:39:16.506 [main] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now FIRING_ALL_RULES 規則 rule_attributes_salience_2 觸發 規則 rule_attributes_salience_1 觸發 規則 rule_attributes_salience_3 觸發

no-loop屬性

????????no-loop屬性用于防止死循環,當規則通過update之類的函數修改了Fact對象時,可能使當前規則再次被激活從而導致死循環。取值類型為Boolean,默認值為false。測試步驟如下:

attributes-rules.drl文件添加如下內容:

/*用于測試Drools 屬性:no-loop */rule "rule_attributes_noloop"//no-loop truewhen$attributesNoLoopEntity:AttributesEnabledEntity(num > 1)thenupdate($attributesNoLoopEntity)System.out.println("規則 rule_attributes_noloop 觸發"); end

第二步:編寫單元測試

@Testpublic void test4() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象AttributesEnabledEntity enabledEntity = new AttributesEnabledEntity();enabledEntity.setNum(11);enabledEntity.setFlag(true);// 第四步kieSession.insert(enabledEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();}

通過控制臺可以看到,由于我們沒有設置no-loop屬性的值,所以發生了死循環。接下來設置no-loop的值為true再次測試則不會發生死循環。

?lock-on-active屬性

lock-on-active這個屬性,可以限制當前規則只會被執行一次,包括當前規則的重復執行不是本身觸發的。取值類型為Boolean,默認值為false。測試步驟如下:

attributes-rules.drl文件添加如下內容:

/*用于測試Drools 屬性:lock-on-active */rule "rule_attributes_lock_on_active_1"no-loop truewhen$attributesLockOnActiveEntity:AttributesEnabledEntity(num > 1)thenupdate($attributesLockOnActiveEntity)System.out.println("規則 rule_attributes_lock_on_active_1 觸發"); endrule "rule_attributes_lock_on_active_2"no-loop truelock-on-active truewhen$attributesLockOnActiveEntity:AttributesEnabledEntity(num > 1)thenupdate($attributesLockOnActiveEntity)System.out.println("規則 rule_attributes_lock_on_active_2 觸發"); end

編寫單元測試:

@Testpublic void test4() {// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession();// 業務對象AttributesEnabledEntity enabledEntity = new AttributesEnabledEntity();enabledEntity.setNum(11);enabledEntity.setFlag(true);// 第四步kieSession.insert(enabledEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();}

????????no-loop的作用是限制因為modify等更新操作導致規則重復執行,但是有一個限定條件,是當前規則中進行更新導致當前規則重復執行。而不是防止其他規則更新相同的fact對象,導致當前規則更新,lock-on-active可以看作是no-loop的加強版,不僅能限制自己的更新,還能限制別人的更新造成的死循環。

activation-group屬性

activation-group屬性是指激活分組,取值為String類型。具有相同分組名稱的規則只能有一個規則被觸發。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesActivationGroupEntity/*用于測試Drools 屬性: activation-group */rule "rule_attributes_activation_group_1"activation-group "customGroup"when$attributesActivationGroupEntity:AttributesActivationGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_activation_group_1 觸發"); endrule "rule_attributes_activation_group_2"activation-group "customGroup"when$attributesActivationGroupEntity:AttributesActivationGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_activation_group_2 觸發"); end

編寫單元測試:

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步KieContainer kieContainer = kieServices.getKieClasspathContainer();// 第三步KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesActivationGroupEntity attributesActivationGroupEntity = new AttributesActivationGroupEntity();attributesActivationGroupEntity.setNum(20);kieSession.insert(attributesActivationGroupEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

????????通過控制臺可以發現,上面的兩個規則因為屬于同一個分組,所以只有一個觸發了。同一個分組中的多個規則如果都能夠匹配成功,具體哪一個最終能夠被觸發可以通過salience屬性確定。

agenda-group屬性

agenda-group屬性為議程分組,屬于另一種可控的規則執行方式。用戶可以通過設置agenda-group來控制規則的執行,只有獲取焦點的組中的規則才會被觸發。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesAgendaGroupEntity/*用于測試Drools 屬性: agenda-group */rule "rule_attributes_agenda_group_1"agenda-group "customAgendaGroup1"when$attributesAgendaGroupEntity:AttributesAgendaGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_agenda_group_1 觸發"); endrule "rule_attributes_agenda_group_2"agenda-group "customAgendaGroup1"when$attributesAgendaGroupEntity:AttributesAgendaGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_agenda_group_2 觸發"); endrule "rule_attributes_activation_group_3"agenda-group "customAgendaGroup2"when$attributesAgendaGroupEntity:AttributesAgendaGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_activation_group_3 觸發"); endrule "rule_attributes_agenda_group_4"agenda-group "customAgendaGroup2"when$attributesAgendaGroupEntity:AttributesAgendaGroupEntity(num > 1)thenSystem.out.println("規則 rule_attributes_agenda_group_4 觸發"); end

編寫單元測試:

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesAgendaGroupEntity attributesAgendaGroupEntity = new AttributesAgendaGroupEntity();attributesAgendaGroupEntity.setNum(20);kieSession.insert(attributesAgendaGroupEntity);kieSession.getAgenda().getAgendaGroup("customAgendaGroup2").setFocus();// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

通過控制臺可以看到,只有獲取焦點的分組中的規則才會觸發。與activation-group不同的是,activation-group定義的分組中只能夠有一個規則可以被觸發,而agenda-group分組中的多個規則都可以被觸發。

auto-focus屬性

auto-focus屬性為自動獲取焦點,取值類型為Boolean,默認值為false。一般結合agenda-group屬性使用,當一個議程分組未獲取焦點時,可以設置auto-focus屬性來控制。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesAutoFocusEntity/*用于測試Drools 屬性: auto-focus */rule "rule_attributes_auto_focus_1"agenda-group "customAgendaGroup1"when$attributesAutoFocusEntity:AttributesAutoFocusEntity(num > 1)thenSystem.out.println("規則 rule_attributes_auto_focus_1 觸發"); endrule "rule_attributes_auto_focus_2"agenda-group "customAgendaGroup1"when$attributesAutoFocusEntity:AttributesAutoFocusEntity(num > 1)thenSystem.out.println("規則 rule_attributes_auto_focus_2 觸發"); endrule "rule_attributes_auto_focus_3"agenda-group "customAgendaGroup2" // auto-focus truewhen$attributesAutoFocusEntity:AttributesAutoFocusEntity(num > 1)thenSystem.out.println("規則 rule_attributes_auto_focus_3 觸發"); endrule "rule_attributes_auto_focus_4"agenda-group "customAgendaGroup2"when$attributesAutoFocusEntity:AttributesAutoFocusEntity(num > 1)thenSystem.out.println("規則 rule_attributes_auto_focus_4 觸發"); end

編寫單元測試

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesAutoFocusEntity attributesAutoFocusEntity = new AttributesAutoFocusEntity();attributesAutoFocusEntity.setNum(20);kieSession.insert(attributesAutoFocusEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

通過控制臺可以看到,設置auto-focus屬性為true的規則都觸發了。

注意:同一個組,只要有個設置auto-focus true 其他的設置不設置都無所謂啦。都會起作用的。

timer屬性

timer屬性可以通過定時器的方式指定規則執行的時間,使用方式有兩種:

方式一:timer (int:??)

此種方式遵循java.util.Timer對象的使用方式,第一個參數表示幾秒后執行,第二個參數表示每隔幾秒執行一次,第二個參數為可選。

方式二:timer(cron:?)

此種方式使用標準的unix cron表達式的使用方式來定義規則執行的時間。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesTimerEntity/*用于測試Drools 屬性: timer */rule "rule_attributes_timer_1"timer(5s 2s)when$attributesTimerEntity:AttributesTimerEntity(num > 1)thenSystem.out.println("規則 rule_attributes_timer_1 觸發"); endrule "rule_attributes_timer_2"timer(cron:0/1 * * * * ?)when$attributesTimerEntity:AttributesTimerEntity(num > 1)thenSystem.out.println("規則 rule_attributes_timer_2 觸發"); end

編寫單元測試:

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesTimerEntity attributesTimerEntity = new AttributesTimerEntity();attributesTimerEntity.setNum(20);kieSession.insert(attributesTimerEntity);kieSession.fireUntilHalt();Thread.sleep(10000);kieSession.halt(); // 關閉kieSession.dispose();

注意:如果規則中有用到了timer屬性,匹配規則需要調用kieSession.fireUntilHalt();這里涉及一個規則引擎的執行模式和線程問題,關于具體細節,我們后續討論。

date-effective屬性

date-effective屬性用于指定規則的生效時間,即只有當前系統時間大于等于設置的時間或者日期規則才有可能觸發。默認日期格式為:dd-MMM-yyyy。用戶也可以自定義日期格式。

第一步:編寫規則文件

package rules import com.zzg.model.AttributesDateEffectiveEntity/*用于測試Drools 屬性: date-effective */rule "rule_attributes_date_effective" // date-effective "20-七月-2021"date-effective "2021-02-20"when$attributesDateEffectiveEntity:AttributesDateEffectiveEntity(num > 1)thenSystem.out.println("規則 rule_attributes_date_effective 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesDateEffectiveEntity attributesDateEffectiveEntity = new AttributesDateEffectiveEntity();attributesDateEffectiveEntity.setNum(20);kieSession.insert(attributesDateEffectiveEntity); // 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

注意:需要在VM參數上加上日期格式:-Ddrools.dateformat=yyyy-MM-dd,在生產環境所在規則引擎的JVM設置中,也需要設置此參數,以保證開發和生產的一致性。

date-expires屬性

date-expires屬性用于指定規則的失效時間,即只有當前系統時間小于設置的時間或者日期規則才有可能觸發。默認日期格式為:dd-MMM-yyyy。用戶也可以自定義日期格式。

第一步:編寫規則文件/resource/rules/dateexpires.drl

package rules import com.zzg.model.AttributesDateExpiresEntity/*用于測試Drools 屬性: date-expires */rule "rule_attributes_date_expires"date-expires "2021-06-20"when$attributesDateExpiresEntity:AttributesDateExpiresEntity(num > 1)thenSystem.out.println("規則 rule_attributes_date_expires 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 AttributesDateExpiresEntity attributesDateExpiresEntity = new AttributesDateExpiresEntity();attributesDateExpiresEntity.setNum(20);kieSession.insert(attributesDateExpiresEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

注意:需要在VM參數上加上日期格式:-Ddrools.dateformat=yyyy-MM-dd,在生產環境所在規則引擎的JVM設置中,也需要設置此參數,以保證開發和生產的一致性。

六、Drools高級語法

我們已經知道了一套完整的規則文件內容構成如下:

關鍵字描述
package包名,只限于邏輯上的管理,同一個包名下的查詢或者函數可以直接調用
import用于導入類或者靜態方法
global全局變量
function自定義函數
query查詢
rule end規則體

?global全局變量

global關鍵字用于在規則文件中定義全局變量,它可以讓應用程序的對象在規則文件中能夠被訪問。可以用來為規則文件提供數據或服務。

語法結構為:global 對象類型 對象名稱

在使用global定義的全局變量時有兩點需要注意:

1、如果對象類型為包裝類型時,在一個規則中改變了global的值,那么只針對當前規則有效,對其他規則中的global不會有影響。可以理解為它是當前規則代碼中的global副本,規則內部修改不會影響全局的使用。

2、如果對象類型為集合類型或JavaBean時,在一個規則中改變了global的值,對java代碼和所有規則都有效。

第一步:編寫規則文件

package rules import com.zzg.model.GlobalEntity/*用于測試Drools 全局變量 : global */global java.lang.Integer globalCount global java.util.List globalListrule "rule_global_1"when$globalEntity:GlobalEntity(num > 1)thenSystem.out.println("規則 rule_global_1 開始...");globalCount++ ;globalList.add("張三");globalList.add("李四");System.out.println(globalCount);System.out.println(globalList);System.out.println("規則 rule_global_1 結束..."); endrule "rule_global_2"when$globalEntity:GlobalEntity(num > 1)thenSystem.out.println("規則 rule_global_2 開始...");System.out.println(globalCount);System.out.println(globalList);System.out.println("規則 rule_global_2 結束..."); end

編寫單元測試

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 GlobalEntity globalEntity = new GlobalEntity(); globalEntity.setNum(20);ArrayList<Object> globalList = new ArrayList<>();Integer globalCount = 10; kieSession.setGlobal("globalCount", 10); kieSession.setGlobal("globalList", globalList);kieSession.insert(globalEntity);// 第五步:執行規則引擎kieSession.fireAllRules();// 第六步:關閉sessionkieSession.dispose();

query查詢

query查詢提供了一種查詢working memory中符合約束條件的Fact對象的簡單方法。它僅包含規則文件中的LHS部分,不用指定“when”和“then”部分并且以end結束。

語法結構如下:

query 查詢的名稱(可選參數)LHS end

編寫規則文件

package rules import com.zzg.model.QueryEntity/*用于測試Drools 方法: query *///無參查詢 query "query_1"$queryEntity:QueryEntity(age>20) end//有參查詢 query "query_2"(Integer qAge,String qName)$queryEntity:QueryEntity(age > qAge && name == qName) end

編寫單元測試

// 第一步KieServices kieServices = KieServices.Factory.get();// 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 QueryEntity queryEntity1= new QueryEntity(); QueryEntity queryEntity2= new QueryEntity(); QueryEntity queryEntity3= new QueryEntity();queryEntity1.setName("張三").setAge(10); queryEntity2.setName("李四").setAge(20); queryEntity3.setName("王五").setAge(30);kieSession.insert(queryEntity1); kieSession.insert(queryEntity2); kieSession.insert(queryEntity3);QueryResults results1 = kieSession.getQueryResults("query_1"); QueryResults results2 = kieSession.getQueryResults("query_2", 1, "張三");for (QueryResultsRow queryResultsRow : results1) {QueryEntity queryEntity = (QueryEntity) (queryResultsRow.get("$queryEntity"));System.out.println(queryEntity);}for (QueryResultsRow queryResultsRow : results2) {QueryEntity queryEntity = (QueryEntity) (queryResultsRow.get("$queryEntity"));System.out.println(queryEntity);} // 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

?function函數

function關鍵字用于在規則文件中定義函數,就相當于java類中的方法一樣。可以在規則體中調用定義的函數。使用函數的好處是可以將業務邏輯集中放置在一個地方,根據需要可以對函數進行修改。

函數定義的語法結構如下:

function 返回值類型 函數名(可選參數){ //邏輯代碼}

編寫規則文件/resources/rules/function.drl

package rules import com.zzg.model.FunctionEntity/*用于測試Drools 方法: function *///定義一個 假發 方法 function Integer add(Integer num){return num+10; }rule "function"when$functionEntity:FunctionEntity(num>20)thenInteger result = add($functionEntity.getNum());System.out.println(result); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 FunctionEntity functionEntity = new FunctionEntity(); functionEntity.setNum(30);kieSession.insert(functionEntity);// 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

條件-LHS加強

前面我們已經知道了在規則體中的LHS部分是介于when和then之間的部分,主要用于模式匹配,只有匹配結果為true時,才會觸發RHS部分的執行。本章節我們會針對LHS部分學習幾個新的用法。

復合值限制in/not in

復合值限制是指超過一種匹配值的限制條件,類似于SQL語句中的in關鍵字。Drools規則體中的LHS部分可以使用in或者not in進行復合值的匹配。

語法結構如下:

Object(field in (比較值1,比較值2...))

編寫規則文件

package rules import com.zzg.model.LhsInEntity/*用于測試Drools LHS: in not in */rule "lhs_in"when$lhsInEntity:LhsInEntity(name in ("張三","李四","王五"))thenSystem.out.println("規則 lhs_in 觸發"); endrule "lhs_not_in"when$lhsInEntity:LhsInEntity(name not in ("張三","李四","王五"))thenSystem.out.println("規則 lhs_not_in 觸發"); end

條件元素eval

eval用于規則體的LHS部分,并返回一個Boolean類型的值。

語法結構如下:

eval(表達式)

編寫規則文件

package rules import com.zzg.model.LhsEvalEntity/*用于測試Drools LHS: in not in */rule "lhs_eval"when$lhsInEntity:LhsEvalEntity(age > 10) and eval(2>1)thenSystem.out.println("規則 lhs_eval 觸發"); end

條件元素not

not用于判斷Working Memory中是否存在某個Fact對象,如果不存在則返回true,如果存在則返回false。

語法結構如下:

not Object(可選屬性約束)

編寫規則文件

package rules import com.zzg.model.LhsNotEntity/*用于測試Drools LHS: not */rule "lhs_not"whennot $lhsNotEntity:LhsNotEntity(age > 10)thenSystem.out.println("規則 lhs_not 觸發"); end

條件元素exists

exists的作用與not相反,用于判斷Working Memory中是否存在某個Fact對象,如果存在則返回true,不存在則返回false。

語法結構如下:

exists Object(可選屬性約束)

編寫規則文件

package rules import com.zzg.model.LhsEvalEntity/*用于測試Drools LHS: exists */rule "lhs_exists"whenexists $lhsInEntity:LhsEvalEntity(age > 10)thenSystem.out.println("規則 lhs_eval 觸發"); end

疑問:在LHS部分進行條件編寫時并沒有使用exists也可以達到判斷Working Memory中是否存在某個符合條件的Fact元素的目的,那么我們使用exists還有什么意義?

兩者的區別:當向Working Memory中加入多個滿足條件的Fact對象時,使用了exists的規則執行一次,不使用exists的規則會執行多次。

規則繼承

規則之間可以使用extends關鍵字進行規則條件部分的繼承,類似于java類之間的繼承。

結果-RHS

規則文件的RHS部分的主要作用是通過插入,刪除或修改工作內存中的Fact數據,來達到控制規則引擎執行的目的。Drools提供了一些方法可以用來操作工作內存中的數據,操作完成后規則引擎會重新進行相關規則的匹配,原來沒有匹配成功的規則在我們修改數據完成后有可能就會匹配成功了。

insert方法

insert方法的作用是向工作內存中插入數據,并讓相關的規則重新匹配。

編寫規則文件

package rules import com.zzg.model.RhsInsertEntity/*用于測試Drools RHS: insert */rule "rhs_insert_1"when$rhsInsertEntity:RhsInsertEntity(age <= 10)thenRhsInsertEntity rhsInsertEntity = new RhsInsertEntity();rhsInsertEntity.setAge(15);insert(rhsInsertEntity);System.out.println("規則 rhs_insert_1 觸發"); endrule "rhs_insert_2"when$rhsInsertEntity:RhsInsertEntity(age <=20 && age>10)thenRhsInsertEntity rhsInsertEntity = new RhsInsertEntity();rhsInsertEntity.setAge(25);insert(rhsInsertEntity);System.out.println("規則 rhs_insert_2 觸發"); endrule "rhs_insert_3"when$rhsInsertEntity:RhsInsertEntity(age > 20 )thenSystem.out.println("規則 rhs_insert_3 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 RhsInsertEntity rhsInsertEntity = new RhsInsertEntity(); rhsInsertEntity.setAge(5);kieSession.insert(rhsInsertEntity);// 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

通過控制臺輸出可以發現,3個規則都觸發了,這是因為首先進行規則匹配時只有第一個規則可以匹配成功,但是在第一個規則中向工作內存中插入了一個數據導致重新進行規則匹配,此時第二個規則可以匹配成功。在第二個規則中同樣向工作內存中插入了一個數據導致重新進行規則匹配,那么第三個規則就出發了。

update方法

update方法的作用是更新工作內存中的數據,并讓相關的規則重新匹配。?(要避免死循環)

編寫規則文件

package rules import com.zzg.model.RhsUpdateEntity/*用于測試Drools RHS: update */rule "rhs_update_1"when$rhsUpdateEntity:RhsUpdateEntity(age <= 10)then$rhsUpdateEntity.setAge(15);update($rhsUpdateEntity);System.out.println("規則 rhs_update_1 觸發"); endrule "rhs_update_2"when$rhsUpdateEntity:RhsUpdateEntity(age <=20 && age>10)then$rhsUpdateEntity.setAge(25);update($rhsUpdateEntity);System.out.println("規則 rhs_update_2 觸發"); endrule "rhs_update_3"when$rhsUpdateEntity:RhsUpdateEntity(age > 20 )thenSystem.out.println("規則 rhs_update_3 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 RhsUpdateEntity rhsUpdateEntity = new RhsUpdateEntity(); rhsUpdateEntity.setAge(5);kieSession.insert(rhsUpdateEntity);// 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

通過控制臺的輸出可以看到規則文件中定義的三個規則都觸發了。

在更新數據時需要注意防止發生死循環。

modify方法

modify方法的作用跟update一樣,是更新工作內存中的數據,并讓相關的規則重新匹配。只不過語法略有區別?(要避免死循環)

編寫規則文件

package rules import com.zzg.model.RhsModifyEntity/*用于測試Drools RHS: modify */rule "rhs_modify_1"when$rhsModifyEntity:RhsModifyEntity(age <= 10)thenmodify($rhsModifyEntity){setAge(15)}System.out.println("規則 rhs_modify_1 觸發"); endrule "rhs_modify_2"when$rhsModifyEntity:RhsModifyEntity(age <=20 && age>10)thenmodify($rhsModifyEntity){setAge(25)}System.out.println("規則 rhs_modify_2 觸發"); endrule "rhs_modify_3"when$rhsModifyEntity:RhsModifyEntity(age > 20 )thenSystem.out.println("規則 rhs_modify_3 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 RhsModifyEntity rhsModifyEntity = new RhsModifyEntity(); rhsModifyEntity.setAge(5);kieSession.insert(rhsModifyEntity);// 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

通過控制臺的輸出可以看到規則文件中定義的三個規則都觸發了。

在更新數據時需要注意防止發生死循環。

retract/delete方法

retract方法的作用是刪除工作內存中的數據,并讓相關的規則重新匹配。

編寫規則文件

package rules import com.zzg.model.RhsRetractEntity/*用于測試Drools RHS: retract */rule "rhs_retract_1"when$rhsRetractEntity:RhsRetractEntity(age <= 10)then // retract($rhsRetractEntity);System.out.println("規則 rhs_retract_1 觸發"); endrule "rhs_retract_2"when$rhsRetractEntity:RhsRetractEntity(age <= 10)thenSystem.out.println("規則 rhs_retract_2 觸發"); end

編寫單元測試

// 第一步 KieServices kieServices = KieServices.Factory.get(); // 第二步 KieContainer kieContainer = kieServices.getKieClasspathContainer(); // 第三步 KieSession kieSession = kieContainer.newKieSession(); // 業務對象 RhsRetractEntity rhsRetractEntity = new RhsRetractEntity(); rhsRetractEntity.setAge(5);kieSession.insert(rhsRetractEntity); // 第五步:執行規則引擎 kieSession.fireAllRules(); // 第六步:關閉session kieSession.dispose();

通過控制臺輸出可以發現,只有第一個規則觸發了,因為在第一個規則中將工作內存中的數據刪除了導致第二個規則并沒有匹配成功。

RHS加強

RHS部分是規則體的重要組成部分,當LHS部分的條件匹配成功后,對應的RHS部分就會觸發執行。一般在RHS部分中需要進行業務處理。

在RHS部分Drools為我們提供了一個內置對象,名稱就是drools。本小節我們來介紹幾個drools對象提供的方法。

halt

halt方法的作用是立即終止后面所有規則的執行

編寫規則文件

package rules import com.zzg.model.RhsHaftEntity/*用于測試Drools RHS: haft */rule "rhs_haft_1"when$rhsHaftEntity:RhsHaftEntity(age <= 10)thendrools.halt();System.out.println("規則 rhs_haft_1 觸發"); endrule "rhs_haft_2"when$rhsHaftEntity:RhsHaftEntity(age <= 20)thenSystem.out.println("規則 rhs_haft_2 觸發"); end

getWorkingMemory

getWorkingMemory方法的作用是返回工作內存對象。

rule "rhs_get_working_memory_1"when$rhsDroolsMethodsEntity:RhsDroolsMethodsEntity(age <= 10)thenSystem.out.println(drools.getWorkingMemory());System.out.println("規則 rhs_get_working_memory_1 觸發"); end

getRule

getRule方法的作用是返回規則對象。

rule "rhs_rule_2"when$rhsDroolsMethodsEntity:RhsDroolsMethodsEntity(age <=20)thenSystem.out.println(drools.getRule());System.out.println("規則 rhs_rule_2 觸發"); end

規則文件編碼規范

我們在進行drl類型的規則文件編寫時盡量遵循如下規范:

  • 所有的規則文件(.drl)應統一放在一個規定的文件夾中,如:/rules文件夾
  • 書寫的每個規則應盡量加上注釋。注釋要清晰明了,言簡意賅
  • 同一類型的對象盡量放在一個規則文件中,如所有Student類型的對象盡量放在一個規則文件中
  • 規則結果部分(RHS)盡量不要有條件語句,如if(...),盡量不要有復雜的邏輯和深層次的嵌套語句
  • 每個規則最好都加上salience屬性,明確執行順序
  • Drools默認dialect為"Java",盡量避免使用dialect "mvel"

七、WorkBench

?WorkBench簡介

WorkBench是KIE組件中的元素,也稱為KIE-WB,是Drools-WB與JBPM-WB的結合體。它是一個可視化的規則編輯器。WorkBench其實就是一個war包。

WorkBench經過幾次版本迭代,已經不提供tomcat啟動的war包,綜合考慮,本課程仍然采用 tomcat版本作為演示。

環境:

  • apache-tomcat-9.0.29
  • kie-drools-wb-7.6.0.Final-tomcat8 下載地址:Drools - Download

說明:

準備jar包:需要放到tomcat lib中,否則啟動失敗

具體安裝步驟:

配置 Tomcat

1.修改tomcat-user.xml,添加用戶

<?xml version="1.0" encoding="UTF-8"?> <tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0"><!--定義admin角色--><role rolename="admin"/><!--定義一個用戶,用戶名為kie,密碼為kie,對應的角色為admin角色--><user username="kie-web" password="kie-web123" roles="admin"/><user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/> </tomcat-users>

2.修改server.xml

<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- SingleSignOn valve, share authentication between web applicationsDocumentation at: /docs/config/valve.html --><!--<Valve className="org.apache.catalina.authenticator.SingleSignOn" />--><!-- Access log processes all example.Documentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern="common" --><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><Valve className="org.kie.integration.tomcat.JACCValve"/></Host>

3.復制jar到tomcat根目錄的lib下面:

kie-tomcat-integration-7.10.0.Final.jar javax.security.jacc-api-1.5.jar slf4j-api-1.7.25.jar

4.復制 kie-drools-wb-7.6.0.Final-tomcat8.war 到tomcat webapp下面并修改成kie-web.war

啟動服務器

啟動tomcat

訪問http://localhost:8080/kie-web,可以看到WorkBench的登錄頁面。使用前面創建的kie-web/kie-web123登錄

登錄成功后進入系統首頁:

WorkBench使用?

創建空間、項目

首頁中點擊 project,創建空間

?

我們創建一個 ityml 的工作空間。點擊 Save,保存。

?點擊工作空間當中的 ityml,進入空間

點擊Add Project添加項目

成功后,我們可以看見下圖

?左上角的導航條,可以在空間和project之間切換

創建數據對象和drl文件

切換到pro1項目內,點擊 Create New Assert

選中數據對象:

?輸入Order,點擊確定,成功后跳轉如下頁面

?

Order相當于我們代碼中的實體類,在左側 Project Explorer視圖中,可以看見項目結構

接下來添加字段,點擊添加字段按鈕:

?ID 位置,輸入java bean的字段,標簽是備注信息,類型選擇對應的字段類型,保存,點擊創建,關閉彈窗,點擊創建并繼續,可以繼續創建。

點擊右上角的保存,至此,一個數據對象我們就創建完成,可以在源代碼中查看代碼內容。

接下來我們創建一個drl文件,創建過程跟創建bean類似,drl文件內容如下

package com.ityml.pro1;rule "rule_1"when$order:Order(age > 10)thenSystem.out.print("rule run..."); end

保存之后,點擊導航條回到項目主頁

設置KieBase+KieSession

項目首頁點擊Settings

選擇知識庫跟會話

?

彈出窗口,輸入Kiebase名稱即可,我們以kb1為例

?同理,我們補充完軟件包信息,添加只是會話,即kiesession

?操作完成后,不要忘記保存,此時,我們可在Project Explorer視圖中,resource/META-INF/kmodule.xml中看見如下信息

<kmodule xmlns="http://www.drools.org/xsd/kmodule" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><kbase name="kb1" default="false" eventProcessingMode="stream" equalsBehavior="identity" packages="com.ityml.pro1"><ksession name="ks1" type="stateful" default="true" clockType="realtime"/></kbase> </kmodule>

導航回到項目首頁,進行編譯發布

發布成功后,我們可以在maven倉庫中看到對應的jar

?

也可以訪問:http://localhost:8080/kie-web/maven2/com/ityml/pro1/1.0.0/pro1-1.0.0.jar?驗證是否發布成功.

代碼使用?

@Testpublic void test() throws Exception{//通過此URL可以訪問到maven倉庫中的jar包//URL地址構成:http://ip地址:Tomcat端口號/WorkBench工程名/maven2/坐標/版本號/xxx.jarString url = "http://localhost:8080/kie-web/maven2/com/ityml/pro1/1.0.0/pro1-1.0.0.jar";KieServices kieServices = KieServices.Factory.get();UrlResource resource = (UrlResource) kieServices.getResources().newUrlResource(url);//認證resource.setUsername("kie-web");resource.setPassword("kie-web123");resource.setBasicAuthentication("enabled");KieRepository repository = kieServices.getRepository();//通過輸入流讀取maven倉庫中的jar包數據,包裝成KieModule模塊添加到倉庫中KieModule kieModule = repository.addKieModule(kieServices.getResources().newInputStreamResource(resource.getInputStream()));KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());KieSession session = kieContainer.newKieSession();Order order = new Order();order.setName("張三");order.setAge(30);session.insert(order);session.fireAllRules();session.dispose();}

本文參考資料:

Drools規則引擎?

總結

以上是生活随笔為你收集整理的Drools 规则引擎一文读懂的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产精品成人av在线观看 | 亚洲中文字幕无码一久久区 | 欧美喷潮久久久xxxxx | 18精品久久久无码午夜福利 | 麻豆国产人妻欲求不满谁演的 | 久久久久成人片免费观看蜜芽 | 欧美国产日韩亚洲中文 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲精品一区三区三区在线观看 | 国产亚洲精品久久久久久大师 | 3d动漫精品啪啪一区二区中 | 天干天干啦夜天干天2017 | 熟妇女人妻丰满少妇中文字幕 | 亚洲va欧美va天堂v国产综合 | 国产一区二区三区四区五区加勒比 | 麻豆成人精品国产免费 | 人妻体内射精一区二区三四 | 东京热无码av男人的天堂 | 天堂一区人妻无码 | 国内精品久久久久久中文字幕 | 亚洲国产精品无码久久久久高潮 | 丰满妇女强制高潮18xxxx | 欧美国产日韩久久mv | 国产亚洲精品久久久久久久久动漫 | 精品国产一区二区三区av 性色 | www国产亚洲精品久久网站 | 四虎4hu永久免费 | 蜜臀av无码人妻精品 | 国产成人无码av片在线观看不卡 | 嫩b人妻精品一区二区三区 | 四十如虎的丰满熟妇啪啪 | 国产精品毛片一区二区 | 中文字幕日韩精品一区二区三区 | 亚洲精品综合一区二区三区在线 | 国产精品无码久久av | 九月婷婷人人澡人人添人人爽 | 一区二区传媒有限公司 | 亚洲s色大片在线观看 | 亚洲欧美日韩国产精品一区二区 | 亚洲精品一区二区三区大桥未久 | 波多野结衣av一区二区全免费观看 | 久久99久久99精品中文字幕 | 亚洲最大成人网站 | 色欲av亚洲一区无码少妇 | 久久精品人人做人人综合 | 亚洲の无码国产の无码步美 | 露脸叫床粗话东北少妇 | 久久久亚洲欧洲日产国码αv | 欧美成人午夜精品久久久 | 亚洲色在线无码国产精品不卡 | 国产精品亚洲综合色区韩国 | 中文字幕人妻无码一夲道 | 中文字幕无码日韩欧毛 | 亚洲第一无码av无码专区 | 国产人妻精品一区二区三区 | 国产三级精品三级男人的天堂 | 国产乱人无码伦av在线a | 日本一卡2卡3卡四卡精品网站 | 野狼第一精品社区 | 国产熟女一区二区三区四区五区 | 三上悠亚人妻中文字幕在线 | 初尝人妻少妇中文字幕 | 国产精品亚洲专区无码不卡 | 窝窝午夜理论片影院 | 大地资源网第二页免费观看 | 国产亚洲欧美在线专区 | 狠狠cao日日穞夜夜穞av | 2020久久超碰国产精品最新 | 国产亚洲视频中文字幕97精品 | 97色伦图片97综合影院 | 图片区 小说区 区 亚洲五月 | 久久99久久99精品中文字幕 | 久久天天躁夜夜躁狠狠 | 国内精品久久毛片一区二区 | 精品偷拍一区二区三区在线看 | 国内精品久久毛片一区二区 | 免费观看又污又黄的网站 | 免费人成网站视频在线观看 | 久久伊人色av天堂九九小黄鸭 | 国产特级毛片aaaaaa高潮流水 | 国产高潮视频在线观看 | 国产色xx群视频射精 | 国精品人妻无码一区二区三区蜜柚 | 天堂а√在线地址中文在线 | 欧美三级不卡在线观看 | 亚洲色无码一区二区三区 | 无遮挡国产高潮视频免费观看 | 久久综合色之久久综合 | 奇米影视888欧美在线观看 | 小鲜肉自慰网站xnxx | 99精品国产综合久久久久五月天 | 蜜桃视频插满18在线观看 | 波多野结衣av一区二区全免费观看 | av无码不卡在线观看免费 | 国产成人无码av一区二区 | 国产真人无遮挡作爱免费视频 | 亚洲精品无码人妻无码 | 国内精品人妻无码久久久影院蜜桃 | 无码av岛国片在线播放 | 成在人线av无码免费 | 狠狠色丁香久久婷婷综合五月 | 亚洲 欧美 激情 小说 另类 | 免费人成在线视频无码 | 国产欧美熟妇另类久久久 | 国产免费无码一区二区视频 | 国产成人无码av片在线观看不卡 | 99麻豆久久久国产精品免费 | 人人妻人人澡人人爽欧美一区九九 | 国产精品久久国产三级国 | 亚洲自偷自偷在线制服 | 国产麻豆精品一区二区三区v视界 | 波多野结衣av一区二区全免费观看 | 国产高清不卡无码视频 | 131美女爱做视频 | 国产av无码专区亚洲awww | 漂亮人妻洗澡被公强 日日躁 | 日本精品人妻无码免费大全 | 又湿又紧又大又爽a视频国产 | 人妻夜夜爽天天爽三区 | 国产精品手机免费 | 天天躁夜夜躁狠狠是什么心态 | 久久综合给合久久狠狠狠97色 | 无码人中文字幕 | 日本va欧美va欧美va精品 | 色综合久久久久综合一本到桃花网 | 婷婷色婷婷开心五月四房播播 | 18禁黄网站男男禁片免费观看 | 亚洲a无码综合a国产av中文 | 国产精品成人av在线观看 | 少妇人妻偷人精品无码视频 | 人人妻人人澡人人爽人人精品浪潮 | 日本一卡二卡不卡视频查询 | 国产精品亚洲lv粉色 | 无码一区二区三区在线观看 | av人摸人人人澡人人超碰下载 | 午夜精品一区二区三区的区别 | 日日麻批免费40分钟无码 | 国产99久久精品一区二区 | 十八禁真人啪啪免费网站 | 久久精品国产一区二区三区肥胖 | 国产精品美女久久久久av爽李琼 | 成熟人妻av无码专区 | 久久久久国色av免费观看性色 | 国产乱人伦偷精品视频 | 少妇太爽了在线观看 | 少妇高潮喷潮久久久影院 | 未满成年国产在线观看 | 午夜男女很黄的视频 | 98国产精品综合一区二区三区 | 成熟女人特级毛片www免费 | 久久午夜无码鲁丝片午夜精品 | 国产人妻久久精品二区三区老狼 | √天堂资源地址中文在线 | 国产午夜无码视频在线观看 | 日本精品高清一区二区 | 国产网红无码精品视频 | 国产偷抇久久精品a片69 | 曰本女人与公拘交酡免费视频 | 99视频精品全部免费免费观看 | 女人被男人躁得好爽免费视频 | 国产亚洲精品久久久久久大师 | 娇妻被黑人粗大高潮白浆 | 久久精品人人做人人综合试看 | 亚洲成av人在线观看网址 | 久久99精品久久久久婷婷 | 色 综合 欧美 亚洲 国产 | 久久精品中文字幕一区 | 国産精品久久久久久久 | 大色综合色综合网站 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产成人综合色在线观看网站 | 日本免费一区二区三区最新 | yw尤物av无码国产在线观看 | 精品国偷自产在线视频 | 无套内谢的新婚少妇国语播放 | 欧美一区二区三区视频在线观看 | 樱花草在线播放免费中文 | 天堂а√在线中文在线 | 国产尤物精品视频 | 日本高清一区免费中文视频 | 中文精品无码中文字幕无码专区 | 99riav国产精品视频 | 无码毛片视频一区二区本码 | 亚洲熟悉妇女xxx妇女av | 亚洲精品久久久久中文第一幕 | 丰满少妇高潮惨叫视频 | 欧美肥老太牲交大战 | 欧美人与禽zoz0性伦交 | 女人被男人躁得好爽免费视频 | 亚洲色www成人永久网址 | 日本丰满护士爆乳xxxx | 在线а√天堂中文官网 | 国产精品怡红院永久免费 | 亚洲熟熟妇xxxx | 日欧一片内射va在线影院 | 亚洲精品国产精品乱码视色 | 国产极品美女高潮无套在线观看 | 99国产欧美久久久精品 | 国精品人妻无码一区二区三区蜜柚 | 搡女人真爽免费视频大全 | 精品久久久久香蕉网 | 久9re热视频这里只有精品 | 激情国产av做激情国产爱 | 亚洲国产成人av在线观看 | 国产成人综合在线女婷五月99播放 | 亚洲精品欧美二区三区中文字幕 | 18黄暴禁片在线观看 | 午夜福利电影 | 久久国产精品_国产精品 | 色一情一乱一伦 | 亚洲熟悉妇女xxx妇女av | 午夜福利不卡在线视频 | www国产精品内射老师 | 精品一区二区不卡无码av | 亚洲日韩av一区二区三区中文 | 欧美自拍另类欧美综合图片区 | 国产97在线 | 亚洲 | 精品 日韩 国产 欧美 视频 | 岛国片人妻三上悠亚 | 自拍偷自拍亚洲精品10p | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲码国产精品高潮在线 | 国产精品久久久av久久久 | av无码不卡在线观看免费 | 国产熟妇另类久久久久 | 国产精品亚洲综合色区韩国 | 麻豆国产97在线 | 欧洲 | 成人欧美一区二区三区黑人免费 | 99麻豆久久久国产精品免费 | 鲁鲁鲁爽爽爽在线视频观看 | 亚洲男女内射在线播放 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲中文字幕在线观看 | 国产黄在线观看免费观看不卡 | 中文字幕中文有码在线 | 久久精品女人的天堂av | 四虎国产精品免费久久 | 中文字幕亚洲情99在线 | 少妇被粗大的猛进出69影院 | 三级4级全黄60分钟 | 日本精品高清一区二区 | 免费观看激色视频网站 | 无遮无挡爽爽免费视频 | 一本无码人妻在中文字幕免费 | 久久www免费人成人片 | 日韩精品一区二区av在线 | 久久久久久久久888 | 国产又爽又黄又刺激的视频 | 蜜桃视频韩日免费播放 | 波多野结衣aⅴ在线 | 久久综合给久久狠狠97色 | 国产黄在线观看免费观看不卡 | 日本成熟视频免费视频 | 免费播放一区二区三区 | 国产日产欧产精品精品app | 18无码粉嫩小泬无套在线观看 | 精品欧洲av无码一区二区三区 | 国产舌乚八伦偷品w中 | 伊人久久大香线蕉午夜 | 伊人久久大香线蕉午夜 | 亚洲精品一区二区三区在线观看 | 成人欧美一区二区三区黑人免费 | 国产 精品 自在自线 | 国产激情精品一区二区三区 | 婷婷丁香六月激情综合啪 | 国产精品成人av在线观看 | 18禁止看的免费污网站 | 九九久久精品国产免费看小说 | 在线 国产 欧美 亚洲 天堂 | 香港三级日本三级妇三级 | 国产精品久久久久久久影院 | 亚洲热妇无码av在线播放 | 日韩精品乱码av一区二区 | 奇米影视888欧美在线观看 | aⅴ在线视频男人的天堂 | 无码纯肉视频在线观看 | 欧美日本免费一区二区三区 | 色婷婷欧美在线播放内射 | 亚洲精品一区三区三区在线观看 | 爆乳一区二区三区无码 | 中国大陆精品视频xxxx | 精品偷自拍另类在线观看 | 日本精品人妻无码77777 天堂一区人妻无码 | 性史性农村dvd毛片 | 国产精品内射视频免费 | 搡女人真爽免费视频大全 | 亚洲精品一区二区三区在线 | 中文亚洲成a人片在线观看 | 亚洲国精产品一二二线 | 四虎国产精品一区二区 | 亚洲大尺度无码无码专区 | 亚洲国产精品无码久久久久高潮 | 两性色午夜视频免费播放 | 少妇性荡欲午夜性开放视频剧场 | 欧美 丝袜 自拍 制服 另类 | 亚洲色成人中文字幕网站 | 久久精品国产99久久6动漫 | 麻豆人妻少妇精品无码专区 | 久久久成人毛片无码 | 在线a亚洲视频播放在线观看 | 日本又色又爽又黄的a片18禁 | 天堂在线观看www | 久久99久久99精品中文字幕 | 亚洲高清偷拍一区二区三区 | 女人高潮内射99精品 | 久久午夜夜伦鲁鲁片无码免费 | 国产特级毛片aaaaaa高潮流水 | 女人和拘做爰正片视频 | 成人无码视频在线观看网站 | 东京热无码av男人的天堂 | 无码av免费一区二区三区试看 | 国内精品一区二区三区不卡 | 国产亚洲欧美日韩亚洲中文色 | 成人影院yy111111在线观看 | 欧美性黑人极品hd | 无码av最新清无码专区吞精 | 亚洲一区二区三区四区 | 男女性色大片免费网站 | 亲嘴扒胸摸屁股激烈网站 | 嫩b人妻精品一区二区三区 | 四十如虎的丰满熟妇啪啪 | aa片在线观看视频在线播放 | 欧美熟妇另类久久久久久不卡 | 国产午夜无码精品免费看 | 亚洲中文字幕无码中字 | 亚洲中文字幕成人无码 | 熟妇人妻无乱码中文字幕 | 99久久精品国产一区二区蜜芽 | 国产成人精品视频ⅴa片软件竹菊 | 国内揄拍国内精品人妻 | 国产精品久久久久9999小说 | 久久精品国产99精品亚洲 | 女人被男人躁得好爽免费视频 | 暴力强奷在线播放无码 | 亚洲爆乳无码专区 | 国产精品-区区久久久狼 | 女人被男人爽到呻吟的视频 | 亚洲日本va午夜在线电影 | 亚洲精品中文字幕久久久久 | 国产婷婷色一区二区三区在线 | 人妻少妇精品视频专区 | www国产亚洲精品久久网站 | 久久久国产精品无码免费专区 | 99精品无人区乱码1区2区3区 | 久热国产vs视频在线观看 | 亚洲乱亚洲乱妇50p | 亚洲国产成人a精品不卡在线 | 欧美喷潮久久久xxxxx | 2020最新国产自产精品 | 国产精品美女久久久久av爽李琼 | 国产精品亚洲综合色区韩国 | 亚洲人成网站色7799 | 精品国产精品久久一区免费式 | 久久精品无码一区二区三区 | 国产精品福利视频导航 | 久久久久成人片免费观看蜜芽 | 特黄特色大片免费播放器图片 | 国内丰满熟女出轨videos | 野外少妇愉情中文字幕 | 一本久道久久综合婷婷五月 | 国产明星裸体无码xxxx视频 | 人人澡人人妻人人爽人人蜜桃 | 精品无码一区二区三区爱欲 | 奇米影视888欧美在线观看 | 成人无码视频免费播放 | 亚洲aⅴ无码成人网站国产app | 欧美zoozzooz性欧美 | 亚洲日韩av片在线观看 | 成人三级无码视频在线观看 | 精品一区二区三区波多野结衣 | 日韩亚洲欧美中文高清在线 | 中文字幕av无码一区二区三区电影 | 成人毛片一区二区 | 国产xxx69麻豆国语对白 | 日本在线高清不卡免费播放 | 亚洲伊人久久精品影院 | 亚洲国产欧美在线成人 | 丰满人妻翻云覆雨呻吟视频 | 国产精品igao视频网 | 成人影院yy111111在线观看 | 国产无套内射久久久国产 | 亚洲一区二区三区偷拍女厕 | 亚洲另类伦春色综合小说 | 女高中生第一次破苞av | 骚片av蜜桃精品一区 | 成 人影片 免费观看 | 爱做久久久久久 | 精品夜夜澡人妻无码av蜜桃 | 日日鲁鲁鲁夜夜爽爽狠狠 | 三级4级全黄60分钟 | 中文字幕无码热在线视频 | 蜜臀aⅴ国产精品久久久国产老师 | 老子影院午夜伦不卡 | 欧美人与动性行为视频 | 精品欧美一区二区三区久久久 | 亚洲熟熟妇xxxx | 国产精品久久久久久久9999 | 午夜精品一区二区三区在线观看 | 99精品视频在线观看免费 | 中文字幕日产无线码一区 | 欧美国产日韩亚洲中文 | 亚洲国产精品无码久久久久高潮 | 无码一区二区三区在线观看 | 欧美日韩一区二区三区自拍 | 亚洲爆乳大丰满无码专区 | 人妻互换免费中文字幕 | 亚洲精品鲁一鲁一区二区三区 | 亚洲国产精品久久久久久 | 国产欧美亚洲精品a | 久久综合狠狠综合久久综合88 | 亚洲精品中文字幕 | 免费国产黄网站在线观看 | 男女性色大片免费网站 | 最新国产麻豆aⅴ精品无码 | 天下第一社区视频www日本 | 国产艳妇av在线观看果冻传媒 | 国产人妻人伦精品 | 无码人妻精品一区二区三区不卡 | 久久久精品456亚洲影院 | a国产一区二区免费入口 | 婷婷色婷婷开心五月四房播播 | 精品无码一区二区三区爱欲 | 亚洲一区二区三区四区 | 中文字幕人妻无码一夲道 | 精品国产精品久久一区免费式 | 久久精品人人做人人综合 | 成人试看120秒体验区 | 扒开双腿疯狂进出爽爽爽视频 | 东京热无码av男人的天堂 | 色综合久久久无码网中文 | 强开小婷嫩苞又嫩又紧视频 | 久久久久人妻一区精品色欧美 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲午夜福利在线观看 | 国产人妻精品一区二区三区不卡 | 中文字幕乱码人妻二区三区 | 精品一区二区三区无码免费视频 | 97久久精品无码一区二区 | 亚洲中文字幕久久无码 | 亚洲欧洲日本无在线码 | 内射巨臀欧美在线视频 | 国产午夜福利100集发布 | 国产成人精品无码播放 | 国产农村妇女高潮大叫 | 99国产欧美久久久精品 | 国产亚洲精品精品国产亚洲综合 | 在线a亚洲视频播放在线观看 | 亚洲成av人片在线观看无码不卡 | 国产精品沙发午睡系列 | 色偷偷人人澡人人爽人人模 | 午夜理论片yy44880影院 | 小泽玛莉亚一区二区视频在线 | 丰满人妻一区二区三区免费视频 | 亚洲人成影院在线无码按摩店 | 亚洲欧美中文字幕5发布 | 久久zyz资源站无码中文动漫 | 成人免费无码大片a毛片 | 亚洲人亚洲人成电影网站色 | 午夜精品一区二区三区的区别 | 国产亚洲精品久久久ai换 | 真人与拘做受免费视频 | 国产精品欧美成人 | 国产综合色产在线精品 | 国产97在线 | 亚洲 | 欧美熟妇另类久久久久久不卡 | 丰满护士巨好爽好大乳 | 久久这里只有精品视频9 | 久久久精品456亚洲影院 | 欧美变态另类xxxx | 久久久av男人的天堂 | 久久精品女人天堂av免费观看 | 99久久久无码国产精品免费 | 国内老熟妇对白xxxxhd | 两性色午夜免费视频 | 天堂亚洲免费视频 | 午夜嘿嘿嘿影院 | 亚洲精品一区二区三区大桥未久 | 亚洲 欧美 激情 小说 另类 | 免费看少妇作爱视频 | 最近免费中文字幕中文高清百度 | 日韩亚洲欧美精品综合 | 国产乱人偷精品人妻a片 | 成人精品天堂一区二区三区 | 日本熟妇人妻xxxxx人hd | 久久综合香蕉国产蜜臀av | 精品久久久无码中文字幕 | 狠狠cao日日穞夜夜穞av | 亚洲爆乳无码专区 | 色欲人妻aaaaaaa无码 | 中文字幕无码av波多野吉衣 | 日本精品人妻无码77777 天堂一区人妻无码 | 内射老妇bbwx0c0ck | 欧美性生交活xxxxxdddd | 伊人久久大香线蕉亚洲 | 人妻有码中文字幕在线 | 欧美 亚洲 国产 另类 | 欧美性猛交内射兽交老熟妇 | 久久99精品国产麻豆蜜芽 | 精品久久久久久人妻无码中文字幕 | 日本熟妇大屁股人妻 | 人妻与老人中文字幕 | 亚洲精品久久久久avwww潮水 | 亚洲 高清 成人 动漫 | 久久久久久国产精品无码下载 | 亚洲国产高清在线观看视频 | 三上悠亚人妻中文字幕在线 | 亚洲精品成a人在线观看 | 欧美日韩精品 | 亚洲精品国偷拍自产在线麻豆 | 亚洲色欲色欲欲www在线 | 宝宝好涨水快流出来免费视频 | 国产精品无码一区二区桃花视频 | 激情五月综合色婷婷一区二区 | 性生交大片免费看l | 亚洲精品一区二区三区在线 | 欧洲精品码一区二区三区免费看 | 国内精品一区二区三区不卡 | 国产麻豆精品一区二区三区v视界 | 无码人妻久久一区二区三区不卡 | 国产精品久久国产三级国 | 无码午夜成人1000部免费视频 | 国产亲子乱弄免费视频 | 亚洲精品午夜国产va久久成人 | 国内少妇偷人精品视频 | 亚洲综合无码一区二区三区 | 午夜性刺激在线视频免费 | 无码人妻丰满熟妇区毛片18 | 图片小说视频一区二区 | 少妇人妻av毛片在线看 | 麻豆蜜桃av蜜臀av色欲av | 一本久久a久久精品vr综合 | 日韩精品久久久肉伦网站 | 图片小说视频一区二区 | 好男人社区资源 | 国语自产偷拍精品视频偷 | 最新国产乱人伦偷精品免费网站 | 丰满少妇人妻久久久久久 | 国语精品一区二区三区 | 中文字幕乱码人妻无码久久 | 亚洲色www成人永久网址 | 亚洲 日韩 欧美 成人 在线观看 | 人人妻在人人 | 久久精品女人的天堂av | 日韩欧美中文字幕在线三区 | 久久精品成人欧美大片 | 无码av免费一区二区三区试看 | 激情内射日本一区二区三区 | 三上悠亚人妻中文字幕在线 | 少妇性l交大片欧洲热妇乱xxx | 亚洲 欧美 激情 小说 另类 | 欧美变态另类xxxx | 麻花豆传媒剧国产免费mv在线 | 久久久久av无码免费网 | 国产精品久久久久久亚洲影视内衣 | 亚洲一区二区三区偷拍女厕 | 久久99久久99精品中文字幕 | 久久国产36精品色熟妇 | 国产熟妇另类久久久久 | 精品久久久久久人妻无码中文字幕 | 久久国产精品萌白酱免费 | 亚洲精品一区三区三区在线观看 | 亚洲国产综合无码一区 | 中文字幕无码日韩专区 | 亚洲精品一区二区三区在线 | 国产女主播喷水视频在线观看 | 强奷人妻日本中文字幕 | 帮老师解开蕾丝奶罩吸乳网站 | 久久这里只有精品视频9 | 丰满岳乱妇在线观看中字无码 | 性色欲情网站iwww九文堂 | 欧美国产亚洲日韩在线二区 | 欧美丰满熟妇xxxx性ppx人交 | 又黄又爽又色的视频 | 人妻熟女一区 | 日本欧美一区二区三区乱码 | 一区二区传媒有限公司 | 亚洲精品国偷拍自产在线麻豆 | 国产精品亚洲五月天高清 | 日韩欧美成人免费观看 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲国产精品无码一区二区三区 | 四虎永久在线精品免费网址 | 日产精品高潮呻吟av久久 | 大色综合色综合网站 | 久精品国产欧美亚洲色aⅴ大片 | 玩弄人妻少妇500系列视频 | 水蜜桃亚洲一二三四在线 | 中文字幕无码日韩专区 | aⅴ在线视频男人的天堂 | 激情内射亚州一区二区三区爱妻 | 亚洲精品午夜国产va久久成人 | 成人精品一区二区三区中文字幕 | 欧美性生交xxxxx久久久 | 特黄特色大片免费播放器图片 | 国产午夜福利亚洲第一 | 国产亚洲精品久久久久久大师 | 久久久久se色偷偷亚洲精品av | 熟女俱乐部五十路六十路av | 纯爱无遮挡h肉动漫在线播放 | 99久久精品日本一区二区免费 | 久久综合网欧美色妞网 | 亚洲欧美中文字幕5发布 | 亚洲精品国产品国语在线观看 | 亚洲精品午夜无码电影网 | 成人影院yy111111在线观看 | 国产精品对白交换视频 | 国产情侣作爱视频免费观看 | 久久综合久久自在自线精品自 | 人人澡人人妻人人爽人人蜜桃 | 一个人免费观看的www视频 | 亚洲精品国产第一综合99久久 | 亚洲中文字幕在线观看 | 又粗又大又硬毛片免费看 | 男人和女人高潮免费网站 | 国产亲子乱弄免费视频 | 中文字幕 亚洲精品 第1页 | 性史性农村dvd毛片 | 丰满人妻一区二区三区免费视频 | 色五月五月丁香亚洲综合网 | 亚洲七七久久桃花影院 | 欧美国产日韩久久mv | 精品人妻中文字幕有码在线 | 无码av免费一区二区三区试看 | 日本精品人妻无码77777 天堂一区人妻无码 | 扒开双腿疯狂进出爽爽爽视频 | 性色av无码免费一区二区三区 | 在线观看欧美一区二区三区 | 亚洲国产一区二区三区在线观看 | 牲欲强的熟妇农村老妇女 | 久久人妻内射无码一区三区 | 国产综合在线观看 | 亚洲综合另类小说色区 | 久久综合九色综合97网 | 成人aaa片一区国产精品 | 男女猛烈xx00免费视频试看 | 特大黑人娇小亚洲女 | 国语自产偷拍精品视频偷 | 人人爽人人澡人人人妻 | 免费无码肉片在线观看 | 麻花豆传媒剧国产免费mv在线 | 国产美女极度色诱视频www | 18无码粉嫩小泬无套在线观看 | 亚洲欧美精品伊人久久 | 国产97人人超碰caoprom | 沈阳熟女露脸对白视频 | 欧美精品免费观看二区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 人人妻人人澡人人爽欧美一区九九 | 国内丰满熟女出轨videos | 免费看男女做好爽好硬视频 | 午夜熟女插插xx免费视频 | 亚洲乱码日产精品bd | 在教室伦流澡到高潮hnp视频 | 国産精品久久久久久久 | 欧美日韩在线亚洲综合国产人 | 久久伊人色av天堂九九小黄鸭 | 99久久亚洲精品无码毛片 | 午夜理论片yy44880影院 | 久久久国产精品无码免费专区 | 国产精品久久久久影院嫩草 | 99久久久无码国产精品免费 | 大肉大捧一进一出视频出来呀 | 久久久久久a亚洲欧洲av冫 | 久久精品无码一区二区三区 | 樱花草在线播放免费中文 | 中文字幕人妻无码一区二区三区 | 18禁黄网站男男禁片免费观看 | 啦啦啦www在线观看免费视频 | 精品厕所偷拍各类美女tp嘘嘘 | 动漫av网站免费观看 | 午夜嘿嘿嘿影院 | 国产精品内射视频免费 | 亚洲爆乳精品无码一区二区三区 | 日韩亚洲欧美中文高清在线 | 国内丰满熟女出轨videos | 在线а√天堂中文官网 | 性欧美牲交xxxxx视频 | 国产精品手机免费 | 日韩成人一区二区三区在线观看 | 中文无码精品a∨在线观看不卡 | 亚洲啪av永久无码精品放毛片 | 丰满少妇熟乱xxxxx视频 | 久久精品成人欧美大片 | 精品无码国产一区二区三区av | 夜夜躁日日躁狠狠久久av | 少妇无码一区二区二三区 | 成人精品视频一区二区三区尤物 | 久久精品国产精品国产精品污 | 99久久99久久免费精品蜜桃 | 亚洲理论电影在线观看 | 色婷婷久久一区二区三区麻豆 | 无码国产色欲xxxxx视频 | 一本精品99久久精品77 | 激情五月综合色婷婷一区二区 | 一本一道久久综合久久 | 国产成人无码av片在线观看不卡 | 强辱丰满人妻hd中文字幕 | 国产97人人超碰caoprom | 日韩无码专区 | 欧美丰满少妇xxxx性 | 久久国语露脸国产精品电影 | 欧美日韩久久久精品a片 | 中国大陆精品视频xxxx | 亚洲一区二区三区四区 | 国产精品无码久久av | 老司机亚洲精品影院 | 精品欧美一区二区三区久久久 | 日韩无套无码精品 | 亚洲国产精品无码一区二区三区 | 亚洲男女内射在线播放 | 亚洲a无码综合a国产av中文 | 香蕉久久久久久av成人 | 99久久精品国产一区二区蜜芽 | 精品无码国产一区二区三区av | 久久亚洲精品成人无码 | 亚洲日本一区二区三区在线 | 欧美精品在线观看 | 青青草原综合久久大伊人精品 | 欧美日韩在线亚洲综合国产人 | 欧洲熟妇精品视频 | 国产精品怡红院永久免费 | 无码毛片视频一区二区本码 | 国产一区二区不卡老阿姨 | 国产手机在线αⅴ片无码观看 | 亚洲一区二区三区无码久久 | 中文字幕无线码 | 少妇性荡欲午夜性开放视频剧场 | 久久久久国色av免费观看性色 | 人人澡人人透人人爽 | 亚洲精品欧美二区三区中文字幕 | 国产69精品久久久久app下载 | 麻豆国产人妻欲求不满谁演的 | 国产精品久免费的黄网站 | av无码电影一区二区三区 | 中文字幕人妻丝袜二区 | 国产小呦泬泬99精品 | 国产精品内射视频免费 | 女人被男人躁得好爽免费视频 | 国产激情一区二区三区 | 狠狠综合久久久久综合网 | 亚洲国产欧美日韩精品一区二区三区 | 最近中文2019字幕第二页 | 国产麻豆精品一区二区三区v视界 | 无码av免费一区二区三区试看 | 无码午夜成人1000部免费视频 | 强开小婷嫩苞又嫩又紧视频 | 久久人人爽人人爽人人片ⅴ | 3d动漫精品啪啪一区二区中 | 人人澡人人透人人爽 | 老司机亚洲精品影院 | 久久精品国产一区二区三区 | 中文字幕乱码中文乱码51精品 | 国产精品久久久一区二区三区 | 少妇激情av一区二区 | 午夜福利一区二区三区在线观看 | 水蜜桃av无码 | 亚洲一区av无码专区在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 97精品人妻一区二区三区香蕉 | 东京一本一道一二三区 | 三上悠亚人妻中文字幕在线 | 亚洲а∨天堂久久精品2021 | 天堂无码人妻精品一区二区三区 | 国内少妇偷人精品视频 | 99精品无人区乱码1区2区3区 | 国产亚洲精品久久久ai换 | 欧美老人巨大xxxx做受 | 久久久久久久久蜜桃 | 欧美人与禽zoz0性伦交 | 国产熟女一区二区三区四区五区 | 久久精品人人做人人综合 | 伊人久久大香线蕉午夜 | 欧洲精品码一区二区三区免费看 | 精品aⅴ一区二区三区 | 精品人妻人人做人人爽夜夜爽 | 国产一区二区不卡老阿姨 | 精品国产乱码久久久久乱码 | 四虎影视成人永久免费观看视频 | 午夜无码区在线观看 | 香港三级日本三级妇三级 | 中文字幕无码av波多野吉衣 | 久久精品国产大片免费观看 | 在线天堂新版最新版在线8 | 欧美丰满少妇xxxx性 | 日本丰满护士爆乳xxxx | 一区二区三区乱码在线 | 欧洲 | 国产午夜福利亚洲第一 | 性生交大片免费看女人按摩摩 | 久久zyz资源站无码中文动漫 | 色综合久久久久综合一本到桃花网 | 国产人妻久久精品二区三区老狼 | 午夜精品久久久久久久 | 久久久精品人妻久久影视 | 精品少妇爆乳无码av无码专区 | 精品国产av色一区二区深夜久久 | 天堂а√在线中文在线 | 国产激情精品一区二区三区 | 天堂亚洲2017在线观看 | 无码人妻精品一区二区三区下载 | 97夜夜澡人人爽人人喊中国片 | 纯爱无遮挡h肉动漫在线播放 | 国产亚洲欧美日韩亚洲中文色 | 精品午夜福利在线观看 | 好男人社区资源 | 欧美 亚洲 国产 另类 | 六十路熟妇乱子伦 | 亚洲一区av无码专区在线观看 | 国产成人精品久久亚洲高清不卡 | 鲁大师影院在线观看 | 亚洲日韩av片在线观看 | 婷婷丁香五月天综合东京热 | 日日碰狠狠躁久久躁蜜桃 | 麻豆果冻传媒2021精品传媒一区下载 | 久青草影院在线观看国产 | 亚洲国产成人av在线观看 | 国产免费无码一区二区视频 | 中文精品久久久久人妻不卡 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久久无码中文字幕久... | 久久无码专区国产精品s | 日韩精品乱码av一区二区 | 国产偷抇久久精品a片69 | 久久久久久久女国产乱让韩 | 免费无码一区二区三区蜜桃大 | 日韩少妇内射免费播放 | 中文无码成人免费视频在线观看 | 国产精品第一国产精品 | 亚洲午夜无码久久 | 国产人妻精品一区二区三区不卡 | 国精产品一区二区三区 | 欧美兽交xxxx×视频 | 无码人妻久久一区二区三区不卡 | 在教室伦流澡到高潮hnp视频 | 国精品人妻无码一区二区三区蜜柚 | 天天av天天av天天透 | 成人毛片一区二区 | 国产激情精品一区二区三区 | 女人被男人爽到呻吟的视频 | 国产 浪潮av性色四虎 | 国产香蕉尹人视频在线 | 377p欧洲日本亚洲大胆 | 久久午夜无码鲁丝片午夜精品 | 亚洲熟妇色xxxxx欧美老妇 | 曰韩无码二三区中文字幕 | 日韩成人一区二区三区在线观看 | 国产精品无套呻吟在线 | 岛国片人妻三上悠亚 | 日韩少妇白浆无码系列 | 久久久精品成人免费观看 | 无码成人精品区在线观看 | 国产特级毛片aaaaaaa高清 | 亚洲综合在线一区二区三区 | 国产亚洲美女精品久久久2020 | 国产精品成人av在线观看 | 国产免费观看黄av片 | 乱人伦中文视频在线观看 | 丰满人妻一区二区三区免费视频 | 乱码av麻豆丝袜熟女系列 | 中文字幕无码日韩欧毛 | 久久99精品国产.久久久久 | 少妇无码一区二区二三区 | 亚洲成a人片在线观看无码 | 久久无码专区国产精品s | 亚洲国产精华液网站w | 成在人线av无码免观看麻豆 | 熟妇人妻无乱码中文字幕 | 樱花草在线播放免费中文 | 无遮挡国产高潮视频免费观看 | 中文字幕无码热在线视频 | 久久99久久99精品中文字幕 | 一本久久a久久精品亚洲 | 免费乱码人妻系列无码专区 | www一区二区www免费 | 欧美亚洲日韩国产人成在线播放 | 极品嫩模高潮叫床 | 午夜精品一区二区三区的区别 | 欧美真人作爱免费视频 | 亚洲精品国偷拍自产在线麻豆 | 在线成人www免费观看视频 | 日本xxxx色视频在线观看免费 | 成熟妇人a片免费看网站 | 亚洲国产一区二区三区在线观看 | 国产乱人伦av在线无码 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产麻豆精品一区二区三区v视界 | 亚洲七七久久桃花影院 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲一区二区观看播放 | 97资源共享在线视频 | 国产精品久久久久7777 | 亚洲色欲色欲天天天www | 免费看男女做好爽好硬视频 | 人妻少妇精品无码专区二区 | 思思久久99热只有频精品66 | 久久精品人妻少妇一区二区三区 | 国产电影无码午夜在线播放 | 99久久精品国产一区二区蜜芽 | 男女爱爱好爽视频免费看 | 免费乱码人妻系列无码专区 | 欧美国产日韩亚洲中文 | 欧美性猛交xxxx富婆 | av无码不卡在线观看免费 | 国产免费无码一区二区视频 | 精品无码av一区二区三区 | 国产真人无遮挡作爱免费视频 | 极品尤物被啪到呻吟喷水 | 国内丰满熟女出轨videos | 夜精品a片一区二区三区无码白浆 | 亚洲欧美日韩成人高清在线一区 | 少妇厨房愉情理9仑片视频 | 偷窥日本少妇撒尿chinese | 国产精品久久精品三级 | 久久天天躁夜夜躁狠狠 | 欧美丰满熟妇xxxx性ppx人交 | 性开放的女人aaa片 | 欧美自拍另类欧美综合图片区 | 色欲av亚洲一区无码少妇 | 色偷偷人人澡人人爽人人模 | 最新国产乱人伦偷精品免费网站 | 中文字幕无码av激情不卡 | 久久久www成人免费毛片 | 宝宝好涨水快流出来免费视频 | 扒开双腿吃奶呻吟做受视频 | 午夜精品久久久久久久久 | 女人被爽到呻吟gif动态图视看 | 美女极度色诱视频国产 | 少妇愉情理伦片bd | 国产又爽又猛又粗的视频a片 | √天堂资源地址中文在线 | 色综合久久久无码网中文 | 人人妻人人澡人人爽欧美一区九九 | 欧美国产日韩亚洲中文 | 国产做国产爱免费视频 | 国产精品-区区久久久狼 | 国产精品美女久久久久av爽李琼 | 亚洲国产综合无码一区 | 亚洲精品国产第一综合99久久 | 亚洲国产精品久久久久久 | 99视频精品全部免费免费观看 | 曰本女人与公拘交酡免费视频 | 久久精品人人做人人综合 | 国产精华av午夜在线观看 | 呦交小u女精品视频 | 国产一区二区不卡老阿姨 | 国产深夜福利视频在线 | 九九久久精品国产免费看小说 | 国产人妻人伦精品1国产丝袜 | 国产精品无码久久av | 成人免费视频一区二区 | 日韩 欧美 动漫 国产 制服 | 巨爆乳无码视频在线观看 | 久久久久久av无码免费看大片 | 中文字幕无码av波多野吉衣 | 久久婷婷五月综合色国产香蕉 | 国产情侣作爱视频免费观看 | 日日橹狠狠爱欧美视频 | 成在人线av无码免费 | 97人妻精品一区二区三区 | 国产av剧情md精品麻豆 | 日韩少妇白浆无码系列 | 色欲av亚洲一区无码少妇 | 天堂а√在线地址中文在线 | 亚洲 激情 小说 另类 欧美 | 欧美熟妇另类久久久久久多毛 | 日产精品高潮呻吟av久久 | 国产另类ts人妖一区二区 | 国产片av国语在线观看 | 日本精品少妇一区二区三区 | 蜜桃av抽搐高潮一区二区 | 麻豆国产人妻欲求不满谁演的 | 国产一区二区三区精品视频 | 国产综合色产在线精品 | 国产特级毛片aaaaaaa高清 | 九九久久精品国产免费看小说 | 精品国产国产综合精品 | 性欧美大战久久久久久久 | 亚洲天堂2017无码中文 | 欧美成人高清在线播放 | 日本熟妇人妻xxxxx人hd | 亚洲性无码av中文字幕 | 好男人www社区 | 国产精品久久久久久久9999 | 熟女俱乐部五十路六十路av | 欧美日韩综合一区二区三区 | 日本乱人伦片中文三区 | ass日本丰满熟妇pics | 中文字幕乱码中文乱码51精品 | www一区二区www免费 | 色欲久久久天天天综合网精品 | 日本熟妇乱子伦xxxx | 欧美丰满熟妇xxxx性ppx人交 | 中文字幕日韩精品一区二区三区 | 国产精品igao视频网 | 午夜福利试看120秒体验区 | 精品成人av一区二区三区 | 俺去俺来也www色官网 | 亚洲区欧美区综合区自拍区 | 成人精品视频一区二区三区尤物 | 无码国产色欲xxxxx视频 | 国产精品久久久久久无码 | 国产亚洲人成在线播放 | 欧洲欧美人成视频在线 | 亚洲色偷偷男人的天堂 | 男女超爽视频免费播放 | 精品厕所偷拍各类美女tp嘘嘘 | 国产精品久久精品三级 | 十八禁视频网站在线观看 | 国产性生交xxxxx无码 | 中文字幕无线码免费人妻 | 久久久久久久久888 | 天天摸天天透天天添 | 好爽又高潮了毛片免费下载 | 鲁一鲁av2019在线 | 国产成人精品一区二区在线小狼 | 娇妻被黑人粗大高潮白浆 | 粉嫩少妇内射浓精videos | 精品人妻av区 | 黑人巨大精品欧美一区二区 | 国产真实乱对白精彩久久 | 在线亚洲高清揄拍自拍一品区 | 中文字幕无码av激情不卡 | 免费人成在线视频无码 | 激情内射日本一区二区三区 | 成人精品视频一区二区 | 久久人人爽人人爽人人片av高清 | 131美女爱做视频 | 亚洲午夜久久久影院 | 久久国产精品_国产精品 | 亚洲色欲色欲天天天www | 亚洲人交乣女bbw | 欧美一区二区三区视频在线观看 | 乱人伦人妻中文字幕无码久久网 | 久久久无码中文字幕久... | 亚洲日韩av一区二区三区四区 | 兔费看少妇性l交大片免费 | 国精品人妻无码一区二区三区蜜柚 | 久久精品中文字幕大胸 | 精品久久久久香蕉网 | 少妇人妻av毛片在线看 | 精品久久久中文字幕人妻 | 久久精品一区二区三区四区 | 国产亲子乱弄免费视频 | 亚洲午夜福利在线观看 | 亚洲精品无码人妻无码 | 亚洲精品国产精品乱码不卡 | 老头边吃奶边弄进去呻吟 | 国产尤物精品视频 | 国产成人无码a区在线观看视频app | 亚洲中文字幕乱码av波多ji | 99精品久久毛片a片 | 国产精品人妻一区二区三区四 | 最新版天堂资源中文官网 | 国产精品无码成人午夜电影 | 亚洲精品无码国产 | 久久无码中文字幕免费影院蜜桃 | 国产无遮挡又黄又爽又色 | 18无码粉嫩小泬无套在线观看 | 青青草原综合久久大伊人精品 | 国精品人妻无码一区二区三区蜜柚 | 丰满肥臀大屁股熟妇激情视频 | 欧美丰满熟妇xxxx | 少女韩国电视剧在线观看完整 | 国产亚洲欧美在线专区 | 又大又黄又粗又爽的免费视频 | 免费无码肉片在线观看 | 亚洲va欧美va天堂v国产综合 | 亚洲精品一区二区三区大桥未久 | 黑人玩弄人妻中文在线 | 男女超爽视频免费播放 | 在线a亚洲视频播放在线观看 | 亚洲一区二区三区偷拍女厕 | 国产精品久久福利网站 | 欧美老熟妇乱xxxxx | 无套内射视频囯产 | 亚洲码国产精品高潮在线 | 国产精品va在线观看无码 | 久久99国产综合精品 | 精品一区二区不卡无码av | 欧美午夜特黄aaaaaa片 | 久久久久久九九精品久 | 国产av一区二区精品久久凹凸 | 日韩人妻系列无码专区 | www国产亚洲精品久久网站 | 久久99久久99精品中文字幕 | 亚洲日本在线电影 | 精品偷自拍另类在线观看 | 波多野结衣高清一区二区三区 | 午夜成人1000部免费视频 | 免费无码肉片在线观看 | 亚洲国产成人a精品不卡在线 | 牲交欧美兽交欧美 | 国产va免费精品观看 | 99精品国产综合久久久久五月天 | 丰满妇女强制高潮18xxxx | 秋霞特色aa大片 | 日本精品久久久久中文字幕 | 亚洲色www成人永久网址 | 鲁大师影院在线观看 | 日韩欧美成人免费观看 | 少妇被粗大的猛进出69影院 | 婷婷丁香六月激情综合啪 | 成人亚洲精品久久久久软件 | 亚洲区欧美区综合区自拍区 | 丰满妇女强制高潮18xxxx | 免费视频欧美无人区码 | 国产va免费精品观看 | 亚洲精品欧美二区三区中文字幕 | 国内揄拍国内精品少妇国语 | 欧美性生交xxxxx久久久 | 国产人妻人伦精品 | 亚洲无人区午夜福利码高清完整版 | 精品久久久久香蕉网 | 亚洲自偷自偷在线制服 | 色婷婷欧美在线播放内射 | 少妇一晚三次一区二区三区 | 黑人大群体交免费视频 | 国产99久久精品一区二区 | 九九在线中文字幕无码 | 激情综合激情五月俺也去 | 日韩成人一区二区三区在线观看 | 国产精品久久国产三级国 | 国产在线aaa片一区二区99 | 少妇无码av无码专区在线观看 | 麻豆成人精品国产免费 | 日本va欧美va欧美va精品 | 亚洲国产精品一区二区第一页 | 久久zyz资源站无码中文动漫 | 国产精品二区一区二区aⅴ污介绍 | 中文字幕av无码一区二区三区电影 | 未满小14洗澡无码视频网站 | 嫩b人妻精品一区二区三区 | 亚洲日韩中文字幕在线播放 | 色婷婷香蕉在线一区二区 | 欧美熟妇另类久久久久久不卡 | 日韩av无码中文无码电影 | 久久99精品久久久久婷婷 | 亚洲综合色区中文字幕 | 成人精品天堂一区二区三区 | 国产真实伦对白全集 | 日韩av无码中文无码电影 | 一个人看的视频www在线 | 狠狠噜狠狠狠狠丁香五月 | 日韩精品a片一区二区三区妖精 | 国产午夜亚洲精品不卡 | 131美女爱做视频 | 少妇性荡欲午夜性开放视频剧场 | 少妇太爽了在线观看 | 永久免费观看国产裸体美女 | 国产情侣作爱视频免费观看 | 亚洲色偷偷偷综合网 | 黑人巨大精品欧美一区二区 | 98国产精品综合一区二区三区 | 欧美性生交xxxxx久久久 | 精品一区二区三区波多野结衣 | 夜先锋av资源网站 | 欧美三级不卡在线观看 | 国产9 9在线 | 中文 | 天天躁日日躁狠狠躁免费麻豆 | 7777奇米四色成人眼影 | 国产午夜福利100集发布 | 久久天天躁狠狠躁夜夜免费观看 | 熟妇人妻无乱码中文字幕 | 国产suv精品一区二区五 | 亚洲经典千人经典日产 | 黑人粗大猛烈进出高潮视频 | 亚洲国产成人av在线观看 | 国产精品免费大片 | 在线播放无码字幕亚洲 | 少妇邻居内射在线 | av人摸人人人澡人人超碰下载 | 亚洲 欧美 激情 小说 另类 | 美女极度色诱视频国产 | 亚洲国产欧美日韩精品一区二区三区 | 久久亚洲精品成人无码 | 亚洲小说春色综合另类 | 日本va欧美va欧美va精品 | 久久亚洲a片com人成 | 欧洲极品少妇 | 日韩无套无码精品 | 日本一区二区更新不卡 | 久久国产自偷自偷免费一区调 | 女高中生第一次破苞av | 免费人成在线视频无码 | 夜精品a片一区二区三区无码白浆 | 激情亚洲一区国产精品 | 亚洲热妇无码av在线播放 | 国产精品亚洲а∨无码播放麻豆 | 亚洲精品美女久久久久久久 | 性生交大片免费看女人按摩摩 | 久久久久久a亚洲欧洲av冫 | 亚洲一区二区三区国产精华液 | 任你躁国产自任一区二区三区 | 少妇高潮喷潮久久久影院 | 国产极品视觉盛宴 | 久久97精品久久久久久久不卡 | 大地资源中文第3页 | 最新国产乱人伦偷精品免费网站 | 黑人巨大精品欧美黑寡妇 | 娇妻被黑人粗大高潮白浆 | 国产内射爽爽大片视频社区在线 | 亚洲精品午夜无码电影网 | 色欲综合久久中文字幕网 | 精品国产av色一区二区深夜久久 | 大乳丰满人妻中文字幕日本 | 无码精品国产va在线观看dvd | 无码av最新清无码专区吞精 | 未满成年国产在线观看 | 久久久国产精品无码免费专区 | 国产精品久久久久影院嫩草 | 人人妻人人澡人人爽欧美一区 | 欧美日韩一区二区三区自拍 | 水蜜桃av无码 | 无码人妻丰满熟妇区五十路百度 | www成人国产高清内射 | 精品水蜜桃久久久久久久 | 大胆欧美熟妇xx | 亚洲国产精品无码久久久久高潮 | 亚洲日韩一区二区三区 | 国产精品久久久久久亚洲影视内衣 | 88国产精品欧美一区二区三区 | 无码帝国www无码专区色综合 | 久久午夜夜伦鲁鲁片无码免费 | 国产高潮视频在线观看 | 中文字幕无码人妻少妇免费 | 男人的天堂2018无码 | 乱码午夜-极国产极内射 | 在线播放无码字幕亚洲 | 色一情一乱一伦一区二区三欧美 | 中文字幕无码av激情不卡 | 鲁一鲁av2019在线 | 亚洲成a人片在线观看无码 | 中文字幕乱码中文乱码51精品 | 亚洲国产欧美国产综合一区 | 精品一二三区久久aaa片 | 国产又爽又猛又粗的视频a片 | 成人免费无码大片a毛片 | 国产av一区二区三区最新精品 | 国产激情无码一区二区app | 狠狠cao日日穞夜夜穞av | 97夜夜澡人人爽人人喊中国片 | 综合网日日天干夜夜久久 | 成人亚洲精品久久久久 | 爆乳一区二区三区无码 | 97久久国产亚洲精品超碰热 | 中文字幕久久久久人妻 | 国产高清av在线播放 | 亚洲人成网站色7799 | а天堂中文在线官网 | 日本一卡2卡3卡四卡精品网站 | 欧美日本日韩 | 久久人人爽人人爽人人片av高清 | 精品无人区无码乱码毛片国产 | 精品 日韩 国产 欧美 视频 | 久久成人a毛片免费观看网站 | 人妻少妇精品无码专区动漫 | 欧美野外疯狂做受xxxx高潮 | 国产无套内射久久久国产 | 国产免费久久精品国产传媒 | 国产午夜无码视频在线观看 | 18黄暴禁片在线观看 | 久久精品国产99久久6动漫 | 国产福利视频一区二区 | 又湿又紧又大又爽a视频国产 | 久久午夜无码鲁丝片午夜精品 | 最新国产乱人伦偷精品免费网站 | 国产av久久久久精东av | 色综合久久88色综合天天 | 亚洲成a人片在线观看无码3d | 国产黑色丝袜在线播放 | 六十路熟妇乱子伦 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久精品人人做人人综合 | 人人妻人人澡人人爽欧美精品 | 欧美三级不卡在线观看 | 免费乱码人妻系列无码专区 | 国产成人无码av在线影院 | 中文无码成人免费视频在线观看 | 狠狠噜狠狠狠狠丁香五月 | 精品乱子伦一区二区三区 | 88国产精品欧美一区二区三区 | 国内综合精品午夜久久资源 | 又湿又紧又大又爽a视频国产 | 亚洲乱亚洲乱妇50p | 天堂а√在线地址中文在线 | 蜜臀av在线播放 久久综合激激的五月天 | 天下第一社区视频www日本 | 最近免费中文字幕中文高清百度 | 亚洲一区二区三区四区 | 国内精品久久毛片一区二区 | 国产绳艺sm调教室论坛 | 红桃av一区二区三区在线无码av | 亚洲成av人影院在线观看 | 5858s亚洲色大成网站www | 人妻夜夜爽天天爽三区 | 在教室伦流澡到高潮hnp视频 | 亚洲 日韩 欧美 成人 在线观看 | 国产精品久久久久久亚洲影视内衣 | 国产在线aaa片一区二区99 | 色一情一乱一伦一区二区三欧美 | 天天av天天av天天透 | 久久午夜无码鲁丝片午夜精品 | 麻豆精品国产精华精华液好用吗 | 久久99久久99精品中文字幕 | 国产精品爱久久久久久久 | 成人毛片一区二区 | 在线 国产 欧美 亚洲 天堂 | 国产黑色丝袜在线播放 | 水蜜桃av无码 | 夜精品a片一区二区三区无码白浆 | 男女下面进入的视频免费午夜 | 欧美刺激性大交 | 99re在线播放 | 精品国产av色一区二区深夜久久 | 日日橹狠狠爱欧美视频 | 国产成人久久精品流白浆 | 精品无码成人片一区二区98 | 麻豆国产人妻欲求不满 | 色狠狠av一区二区三区 | 国产精品嫩草久久久久 | 亚洲娇小与黑人巨大交 | 国产av剧情md精品麻豆 | a在线观看免费网站大全 | a在线观看免费网站大全 | 亚欧洲精品在线视频免费观看 | 亚洲人亚洲人成电影网站色 | 欧美乱妇无乱码大黄a片 | 午夜熟女插插xx免费视频 | 国产97人人超碰caoprom | 台湾无码一区二区 | 男女作爱免费网站 | 天堂а√在线中文在线 | 亚洲国产精品久久久天堂 | 国语精品一区二区三区 | 久久久久亚洲精品男人的天堂 | 亚洲成av人影院在线观看 | 日本高清一区免费中文视频 | 蜜桃视频插满18在线观看 | 在线精品国产一区二区三区 | 性做久久久久久久免费看 | 国内揄拍国内精品人妻 | 欧美人与禽猛交狂配 | 色 综合 欧美 亚洲 国产 | 亚洲成a人片在线观看日本 | 中文精品久久久久人妻不卡 | 欧美丰满少妇xxxx性 | 日日碰狠狠躁久久躁蜜桃 | 性色av无码免费一区二区三区 | 久久精品中文闷骚内射 | 老太婆性杂交欧美肥老太 | 亚洲国产精品成人久久蜜臀 | 中文字幕色婷婷在线视频 | 99久久精品日本一区二区免费 | 沈阳熟女露脸对白视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产成人无码午夜视频在线观看 | 美女张开腿让人桶 | 亚洲国产成人a精品不卡在线 | 成年美女黄网站色大免费全看 | 国产精品美女久久久久av爽李琼 | 久久精品国产亚洲精品 | 国产又爽又黄又刺激的视频 | 亚洲日韩精品欧美一区二区 | 99久久婷婷国产综合精品青草免费 | 久久亚洲精品中文字幕无男同 | 亚洲精品国产品国语在线观看 | 日本一卡二卡不卡视频查询 | 97夜夜澡人人爽人人喊中国片 | 99久久婷婷国产综合精品青草免费 | 亚洲日本va午夜在线电影 | 亲嘴扒胸摸屁股激烈网站 | 国产成人av免费观看 | 5858s亚洲色大成网站www | 宝宝好涨水快流出来免费视频 | www一区二区www免费 | 成年美女黄网站色大免费视频 | 国产成人一区二区三区在线观看 | 水蜜桃色314在线观看 | 欧美第一黄网免费网站 | 欧美人与禽zoz0性伦交 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 天天躁日日躁狠狠躁免费麻豆 | 免费看男女做好爽好硬视频 | 欧美喷潮久久久xxxxx | 少妇的肉体aa片免费 | 少妇人妻av毛片在线看 | www国产亚洲精品久久网站 | 巨爆乳无码视频在线观看 | 伦伦影院午夜理论片 | 丰满人妻翻云覆雨呻吟视频 | 亚洲高清偷拍一区二区三区 | 久久久久人妻一区精品色欧美 | 狠狠色色综合网站 | 麻豆国产人妻欲求不满 | 亚洲乱码国产乱码精品精 | 黑人巨大精品欧美一区二区 | 色综合天天综合狠狠爱 | 亚洲精品一区三区三区在线观看 | 国产精品99久久精品爆乳 | 玩弄中年熟妇正在播放 | 亚洲精品久久久久中文第一幕 | 日本免费一区二区三区最新 | 亚洲国产精品成人久久蜜臀 | 波多野结衣av在线观看 | 全黄性性激高免费视频 | 国产人妻久久精品二区三区老狼 | 欧美精品在线观看 | 一个人看的www免费视频在线观看 | 精品久久久无码中文字幕 | 少妇愉情理伦片bd | 亚洲国产精品美女久久久久 | 色一情一乱一伦一区二区三欧美 | 人人爽人人澡人人人妻 | 76少妇精品导航 | 欧美日本精品一区二区三区 | 亚洲国产精品一区二区第一页 | 国产精品二区一区二区aⅴ污介绍 | 少妇性l交大片 | 内射欧美老妇wbb | 国内少妇偷人精品视频 | 国产精品美女久久久久av爽李琼 | 国产凸凹视频一区二区 | 久久精品国产日本波多野结衣 | 久久精品丝袜高跟鞋 | 成人欧美一区二区三区黑人 | 377p欧洲日本亚洲大胆 | 台湾无码一区二区 | 大肉大捧一进一出好爽视频 | 日本成熟视频免费视频 | 亚洲欧美国产精品专区久久 | 午夜精品一区二区三区在线观看 | 国产办公室秘书无码精品99 | 亚洲午夜福利在线观看 | 久久无码专区国产精品s | 帮老师解开蕾丝奶罩吸乳网站 | 三级4级全黄60分钟 | 国产偷自视频区视频 | 老司机亚洲精品影院无码 | 成人精品视频一区二区三区尤物 | 亚洲国产精华液网站w | 人人澡人摸人人添 | 成人女人看片免费视频放人 | 欧美 日韩 人妻 高清 中文 | 精品国产一区二区三区四区在线看 | 人妻aⅴ无码一区二区三区 | 亚洲无人区午夜福利码高清完整版 | 久久熟妇人妻午夜寂寞影院 | 捆绑白丝粉色jk震动捧喷白浆 | 九九在线中文字幕无码 | 亚洲色偷偷男人的天堂 | 麻豆md0077饥渴少妇 | 久热国产vs视频在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 精品无码国产自产拍在线观看蜜 | 久久国产精品二国产精品 | 黑人粗大猛烈进出高潮视频 | 国产在热线精品视频 | 欧美性生交xxxxx久久久 | 久久久久久久久888 | 亚洲人亚洲人成电影网站色 | 国产精品亚洲а∨无码播放麻豆 | 国产av一区二区精品久久凹凸 | 激情亚洲一区国产精品 | 亚洲人成人无码网www国产 | 亚洲人成网站在线播放942 | 亚洲欧洲无卡二区视頻 | 日韩精品无码一本二本三本色 | 波多野42部无码喷潮在线 | 欧洲熟妇精品视频 | 精品厕所偷拍各类美女tp嘘嘘 | 国产精品久久久久久久影院 | 少妇性l交大片欧洲热妇乱xxx | 亚洲乱码中文字幕在线 | 粗大的内捧猛烈进出视频 | 疯狂三人交性欧美 | 影音先锋中文字幕无码 | 久久久久免费精品国产 | 女人被男人爽到呻吟的视频 | 国产高清不卡无码视频 | 亚洲精品一区二区三区在线 | 国产亚洲精品久久久久久国模美 | 永久免费精品精品永久-夜色 | 成熟人妻av无码专区 | 一本久道久久综合婷婷五月 | 女高中生第一次破苞av | 精品国产一区二区三区四区在线看 | 国产激情精品一区二区三区 | 久久久久国色av免费观看性色 | 麻豆成人精品国产免费 | 国产av久久久久精东av | 精品乱码久久久久久久 | 亚洲欧美日韩成人高清在线一区 | 67194成是人免费无码 | 欧美 丝袜 自拍 制服 另类 | 4hu四虎永久在线观看 | 内射后入在线观看一区 | 99久久99久久免费精品蜜桃 | 亚洲熟熟妇xxxx | 欧美野外疯狂做受xxxx高潮 | 国产美女极度色诱视频www | 女人色极品影院 | 国产办公室秘书无码精品99 | 午夜精品久久久久久久 | 给我免费的视频在线观看 | 奇米影视7777久久精品人人爽 | 日韩成人一区二区三区在线观看 | 乱人伦人妻中文字幕无码久久网 | 亚洲成av人片天堂网无码】 | 久久精品99久久香蕉国产色戒 | 国产国产精品人在线视 | 老太婆性杂交欧美肥老太 | 精品无人区无码乱码毛片国产 | 白嫩日本少妇做爰 | 国产三级久久久精品麻豆三级 | 无码乱肉视频免费大全合集 | 1000部夫妻午夜免费 | 国产精品美女久久久网av | 国产午夜精品一区二区三区嫩草 | 伊人久久婷婷五月综合97色 | 日日躁夜夜躁狠狠躁 | 夜先锋av资源网站 | 欧美放荡的少妇 | 国产黑色丝袜在线播放 | 亚洲精品国产品国语在线观看 | 国产黄在线观看免费观看不卡 | 欧美性猛交xxxx富婆 | 黑人巨大精品欧美一区二区 | 水蜜桃av无码 | 日韩少妇白浆无码系列 | 又紧又大又爽精品一区二区 | 欧美freesex黑人又粗又大 | 亚洲国产精品一区二区第一页 | 小鲜肉自慰网站xnxx | 日韩av无码一区二区三区 | 欧美日韩视频无码一区二区三 | 久久国产自偷自偷免费一区调 | 国产乡下妇女做爰 | 国产精品福利视频导航 | 成人三级无码视频在线观看 | 无码国产激情在线观看 | 日本丰满护士爆乳xxxx | 久久人人97超碰a片精品 | 俺去俺来也在线www色官网 | 亚洲色在线无码国产精品不卡 | 夜夜高潮次次欢爽av女 | 亚洲精品一区二区三区大桥未久 | 欧美三级a做爰在线观看 | 国产绳艺sm调教室论坛 | 18黄暴禁片在线观看 | 久久久久99精品成人片 | 高中生自慰www网站 | 九一九色国产 | 久热国产vs视频在线观看 | 欧美性生交活xxxxxdddd | 国产成人无码av一区二区 | 亚洲欧洲日本综合aⅴ在线 | 亚洲一区二区三区国产精华液 | 少妇人妻av毛片在线看 | 国产成人精品一区二区在线小狼 | 日本一区二区更新不卡 | 亚洲色成人中文字幕网站 | 日本爽爽爽爽爽爽在线观看免 | 中文字幕乱码亚洲无线三区 | 欧美高清在线精品一区 | 无码人妻丰满熟妇区毛片18 | 色噜噜亚洲男人的天堂 | 国产成人无码a区在线观看视频app | 亚洲中文字幕va福利 | 亚洲午夜久久久影院 | 国产一区二区三区日韩精品 | 台湾无码一区二区 | 老司机亚洲精品影院 | 3d动漫精品啪啪一区二区中 | 久久人人爽人人人人片 | √8天堂资源地址中文在线 | 亚洲中文字幕成人无码 | 国产成人综合美国十次 | 西西人体www44rt大胆高清 | 国产精品人人妻人人爽 | 网友自拍区视频精品 | 98国产精品综合一区二区三区 | 亚洲乱码国产乱码精品精 | 日本熟妇乱子伦xxxx | 国产无遮挡又黄又爽免费视频 | 国产精品人人爽人人做我的可爱 | 欧洲欧美人成视频在线 | 亚洲 日韩 欧美 成人 在线观看 | 国内精品九九久久久精品 | 亚洲熟妇色xxxxx亚洲 | 天堂在线观看www | 沈阳熟女露脸对白视频 | 日日麻批免费40分钟无码 | 亚洲中文无码av永久不收费 | 久久www免费人成人片 | 99久久人妻精品免费一区 | 在线观看欧美一区二区三区 | 六十路熟妇乱子伦 | 国产亚洲tv在线观看 | 国产特级毛片aaaaaaa高清 | 色婷婷欧美在线播放内射 | 国产亚洲tv在线观看 | 夜先锋av资源网站 | 青青草原综合久久大伊人精品 | 亚洲精品午夜无码电影网 | 国产在线精品一区二区高清不卡 | 精品无码国产自产拍在线观看蜜 | 曰韩少妇内射免费播放 | 国产偷自视频区视频 | 欧美人与动性行为视频 | 中文毛片无遮挡高清免费 | 好爽又高潮了毛片免费下载 | 好爽又高潮了毛片免费下载 | 999久久久国产精品消防器材 | 少妇无码av无码专区在线观看 | 国产精品久久久久久亚洲毛片 | 欧美三级a做爰在线观看 | 久久国产精品偷任你爽任你 | 夜夜影院未满十八勿进 | 亚洲成a人片在线观看无码 | 久久精品中文闷骚内射 | 亚洲午夜福利在线观看 | 十八禁真人啪啪免费网站 | 欧美老熟妇乱xxxxx | 国产成人精品久久亚洲高清不卡 | 成人免费无码大片a毛片 | 国产免费久久久久久无码 | 精品国产青草久久久久福利 | 精品欧洲av无码一区二区三区 | 国产精品久久久久久亚洲毛片 | 国产亚洲精品久久久久久大师 | 无套内射视频囯产 | 国产成人一区二区三区在线观看 | 日韩 欧美 动漫 国产 制服 | 色综合久久久无码中文字幕 | 久久婷婷五月综合色国产香蕉 | 久久久久免费看成人影片 | 欧美黑人性暴力猛交喷水 | 欧美丰满熟妇xxxx性ppx人交 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲高清偷拍一区二区三区 | 永久黄网站色视频免费直播 | 特级做a爰片毛片免费69 | 久久精品国产99精品亚洲 | 日日天日日夜日日摸 | 亚洲欧美日韩国产精品一区二区 | 久久精品人人做人人综合 | 国产做国产爱免费视频 | 久久久久av无码免费网 | 狠狠躁日日躁夜夜躁2020 | 欧美日韩一区二区免费视频 | 免费观看的无遮挡av | 高潮毛片无遮挡高清免费视频 | 国产成人无码午夜视频在线观看 | 亚无码乱人伦一区二区 | 男女超爽视频免费播放 | 在线精品国产一区二区三区 | 在线播放免费人成毛片乱码 | 麻豆精品国产精华精华液好用吗 | 波多野结衣一区二区三区av免费 | 欧美性生交xxxxx久久久 | 免费网站看v片在线18禁无码 | 国产精品久久久久久久影院 | 少妇性荡欲午夜性开放视频剧场 | 亚洲午夜久久久影院 | 久久国产精品偷任你爽任你 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 水蜜桃色314在线观看 | 国产在线精品一区二区三区直播 | 午夜精品久久久内射近拍高清 | 欧美日韩人成综合在线播放 | 性欧美videos高清精品 | 午夜男女很黄的视频 | 国产三级久久久精品麻豆三级 | 国产精品福利视频导航 | 青青青手机频在线观看 | 一个人看的www免费视频在线观看 | 欧美 亚洲 国产 另类 |