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

轉轉游戲的賬號訂單流程重構之路

開發(fā)
在對訂單流程進行重構之后,新增或修改某種訂單模式,只需增改相應的訂單類型處理類就可以了,也不用擔心本次修改會影響到其它的訂單模式,大大提高了開發(fā)效率。

1、背景

隨著需求的不斷迭代,項目代碼的復雜度也會越來越高,“屎山”也一天一天慢慢的堆積起來,對于游戲業(yè)務的賬號訂單流程也是如此。游戲訂單類型由原來的倆種增加到了現(xiàn)在的七種,早就已經到了需要重構的地步。但是由于牽涉流程長、影響范圍大、平時需求排期也比較緊張,所以便無法抽出大量的時間去進行重構。因為一開始就設計的不夠規(guī)范、合理,所以之前整個賬號訂單流程存在以下主要問題:

1.1 核心代碼分布散亂

除了按照原子層、服務層劃分之外,還有一個服務用于接收訂單mq進行大量的處理操作,訂單相關的接口分布于多個類甚至是一些名稱與訂單毫不相關的類當中。

1.2 缺少設計模式

缺少設計模式,各種節(jié)點、不同訂單類型的邏輯基本都是通過各種if-else進行處理,耦合度較高,可讀性、可擴展性和可維護性都較差,甚至會出現(xiàn)修改一種訂單流程反而影響到了其它訂單流程的情況。

1.3 影響交付效率

代碼分布在多個服務當中,開發(fā)一個相關需求時經常需要拉4、5個項目分支。由于容易修改到了其它訂單模式的代碼,所以在測試的時候往往又需要回歸其它模式的訂單流程是否有受影響。這些都大大影響了開發(fā)測試以及最終交付的效率。

現(xiàn)在業(yè)務趨于穩(wěn)定,需求迭代也沒有這么快了,因此就有了重構訂單流程的想法。最終的目的就是為了保證良好的可讀性、可維護性和可擴展性。有了重構想法的之后,產生了許多問題,主要如下:

  • 怎么進行重構呢,用什么設計模式?
  • 重構后的測試上線怎么進行呢?
  • 如果上線出現(xiàn)問題要怎么處理?

接下來就圍繞這幾個問題來敘述一下賬號訂單流程的重構之路。

2、如何重構

2.1 方案確定

先簡單介紹一下游戲賬號交易的流程,最開始的時候有兩種交易方式,分別是客服發(fā)貨交易和自主發(fā)貨交易。兩者最大的區(qū)別是是否需要第三角色客服的介入,后來七種訂單交易模式都是在這兩種模式基礎上誕生的。圖片

既然有七種訂單類型,這好辦啊。可以采用策略+模板模式啊,一個抽象模板+七個子類就可以啦。但是后來仔細一想,如果將所有的處理邏輯都放在父類和子類當中,其實代碼整體也顯得十分臃腫。

為了想出更好的解決方案,于是對原有代碼和業(yè)務流程進行了深入的梳理和總結,主要有以下幾點:

  1. 所有訂單流程都是在客服發(fā)貨和自主發(fā)貨基礎上衍生出來的。
  2. 所有訂單流程都包含下單、支付、上傳賬密、發(fā)貨、確認收貨等節(jié)點。
  3. 在這些節(jié)點里不同訂單類型大多會有各自一些特定操作,但是這些操作其實并不屬于訂單的主流程。

通過以上分析,是不是可以將下單到確認收貨作為一層,將不同訂單類型的特定處理實現(xiàn)作為一層呢?這樣不就將訂單流程中各種特殊處理從訂單主流程剝離開了嗎,因此最終決定采用三層接口+策略模板的設計方案。

2.2 三層接口+策略模板模式

接口設計如下:

圖片

  • 第一層接口

包含前端用戶進行交互、處理mq消息以及給其它服務調用的接口。

  • 第二層接口

訂單核心主流程能力接口。將下單、支付到確認收貨等“不變”的基礎能力提供給頂層接口調用,這層接口有自主發(fā)貨流程和客服發(fā)貨流程兩個實現(xiàn)類。

public interface IGameAccountOrderDealProcess {
    /**
     * 處理下單未支付訂單
     */
    int handlePlaceOrder(GameAccountOrderContext orderContext) throws Exception;
    /**
     * 處理支付成功訂單
     */
    int handlePaySuccessOrder(GameAccountOrderContext orderContext) throws Exception;
    /**
     * 處理已發(fā)貨訂單
     */
    int handleDeliverOrder(GameAccountOrderContext orderContext) throws Exception;
    /**
     * 處理支付前取消訂單
     */
    int handleCancelBeforePayOrder(GameAccountOrderContext orderContext) throws Exception;
    /**
     * 處理支付后取消訂單
     */
    int handleCancelAfterPayOrder(GameAccountOrderContext orderContext) throws Exception;
    /**
     * 處理交易成功訂單
     */
    int handleConfirmReceiptOrder(GameAccountOrderContext orderContext) throws Exception;
    /**
     * 賬號交易窗數(shù)據(jù)
     */
    <T extends TradeFlowData> T getOrderTradeData(String logStr, Long orderId, Integer device, Long uid);
    /**
     * 上傳賬密
     */
    ZZOpenScfBaseResult<String> uploadAccountAndPwd(GameAccountSelfTrade.AccountPwdArg arg, long uid, String logStr, ServiceHeaderEntity header) throws Exception;
    /**
     * 發(fā)貨
     * @param orderContext
     */
    boolean deliverOrder(GameAccountOrderContext orderContext) throws Exception;
    /**
     * 訂單確認收貨
     */
    ZZOpenScfBaseResult<String> confirmReceiptOrder(GameAccountOrderContext orderContext, Long uid, boolean needCheckRisk) throws Exception;
}
  • 第三層接口

各種訂單類型的特殊處理,每一種訂單模式都對應一個實現(xiàn)類。

public interface ITradeSelfHandler {
    GameAccountTradeFlow.GameAccountTradeType getOrderTrade();
    /*------------處理mq消息相關---------------*/
    /**
     *1.插入表之前設置客服和extendInfo
     */
    void fillExtraOrderInfoBeforeInsert(GameAccountOrderResultEntity orderEntity, GameAccountOrderContext orderContext);
    /**
     * 下單后處理
     */
    void handleAfterPlaceOrder(GameAccountOrderContext orderContext);
    /**
     * 支付前取消處理
     */
    void handleCancelBeforePay(GameAccountOrderContext orderContext);
    /**
     * 支付后取消處理
     */
    int handleCancelAfterPay(GameAccountOrderContext orderContext) throws Exception;
    /**
     * 支付后一些額外處理
     */
    int handleAfterPaySuccess(GameAccountOrderContext orderContext);
    /**
     * 確認收貨處理
     */
    int handleAfterConfirmReceipt(GameAccountOrderContext orderContext) throws Exception;
    /*---------------------------------*/
    /**
     * 獲取提現(xiàn)時間
     */
    Date getWithDrawlTime();
    /**
     * 發(fā)送支付成功push
     */
    void orderAlreadyPayPushMsgNew(GameAccountOrderContext orderContext, Pair<String, String> jumpUrl);
    /**
     * 獲取分帳賬戶、類別信息
     */
    List<AccountOrderSplitModel> getOrderSplitModelList(GameAccountOrderContext orderContext, OrderMaxSettleInfo settleInfo);
    /**
     * 定制各自spiUi
     */
    void buildOrderSpiUiData(GameAccountOrderContext orderContext, GameOrderSpiConfig bConfig, GameOrderSpiConfig sConfig, SpiUiData spiUiData) throws Exception;
    /**
     * 確認收貨后一些處理
     */
    void otherOperationAfterReceipt(GameAccountOrderContext orderContext, Long uid);
}

2.3 具體實現(xiàn)

  • 核心代碼收攏到一個服務,相關接口進行聚合

原先在客服后臺、定時任務、mq集群都有一些訂單的操作,但是這些代碼基本都是重復的,所以此次重構在訂單核心服務中新增相應的訂單操作功能,統(tǒng)一由其它服務進行RPC調用。

圖片

將訂單相關的接口、工具類集中到同一個包下,方便定位。

圖片

  • 整體類圖及設計原則圖片
  1. 命名規(guī)范:類名、變量名、方法名盡量見名知義。
  2. 單一職責:各個模塊各司其職,避免與其它模塊過度耦合。
  3. 準備訂單上下文,清除RPC重復調用問題。
//上下文實體
public class GameAccountOrderContext {
    private String logStr;
    private Long orderId;
    private Integer mqStatus;
    private Order order;
    private GameAccountOrderResultEntity accountOrderEntity;
    private AccountOrderStatusEnum orderStatus;
    private Boolean hasInsuranceService;//訂單是否有保險
    private GameAccountTradeFlow.GameAccountTradeType tradeType;
    private GameAccountProductData accountProductData;
    private ZZProduct product;
    private ZZProductExt productExt;
    private Map<String, String> extValueMap;
    private AccountHelpSaleClue helpSaleClue;//幫賣線索
    private DistributionShareInfoDTO distributionShareInfo;//分銷信息
    private ITradeSelfHandler tradeSelfHandler;
    private Integer serviceUiStatus;//對應訂單spi狀態(tài)
}
//上下文準備
GameAccountOrderContext orderContext = orderContextBuilder.buildAccountOrderContext(order, zzProduct, logStr);

3、上線保障

訂單流程不管對于什么業(yè)務,基本都是最重要的一個環(huán)節(jié),為了避免產生重大問題,需要做到以下兩點:

  1. 嚴格保證線下測試的準確性。
  2. 出現(xiàn)線上問題,影響范圍要盡可能小。

3.1 流程測試

根據(jù)賬號訂單流程的特點,在測試的時候遵循以下原則:

  • 訂單流程正常跑通
  • 訂單分帳正確
  • 訂單保險正常
  • 各個節(jié)點與原來保持一致
  • 相關push、私信正常發(fā)送
  • 統(tǒng)計日志正常打印

對于每一種訂單流程,同時進行新、老流程訂單的測試。逐一對比新、老流程的買家側和賣家側各個流程節(jié)點的頁面、按鈕、跳轉、push、私信等是否保持一致。

3.2 灰度策略

為了避免產生重大問題,上線后必須采取灰度策略,不然出了問題就可能就是事故了。本次采用的灰度策略是上線后按訂單類型、訂單量進行灰度,同時將灰度訂單落表記錄,配置如下:

[
  {
    "orderType": 6,//訂單類型
    "dayNum": 50,//每日灰度量
    "isTotalGray": true//是否全量
  }
]
 /**
  * 判斷訂單是否走新交易流程
  */
public boolean isNewOrderProcess(String logStr, GameAccountOrderContext orderContext) {
        Long orderId = orderContext.getOrderId();
        try {
            if (gameGrayTestService.isNewTradeProcessOrder(orderId)){
                return true;
            }
            GameAccountOrderResultEntity orderEntity = accountOrderManage.getGameAccountOrderEntity(orderId, logStr);
            GameAccountTradeFlow.GameAccountTradeType orderTradeType = orderContext.getTradeType();
            String orderRedisSet = String.format("account_order_gray_set_%s_%s", Objects.nonNull(orderEntity) ? orderEntity.getSelfType() : orderTradeType.getSelfType(), DateUtil.format(new Date(), "yyyy-MM-dd"));
            if (ZZGameRedisUtil.sismember(orderRedisSet, orderId.toString())){
                return true;
            }
            if (newAccountOrderTradeSwitch){
                return true;
            }
            Optional<OrderGrayConfig> grayConfigOptional = grayConfigList.stream().filter(c->c.getOrderType() == orderTradeType.getSelfType()).findFirst();
            if (grayConfigOptional.isPresent()){
                OrderGrayConfig grayConfig = grayConfigOptional.get();
                if (Objects.nonNull(grayConfig.getIsTotalGray()) && grayConfig.getIsTotalGray()){
                    return true;
                }
                if (orderContext.getOrderStatus() != AccountOrderStatusEnum.place_order){//只處理新訂單
                    return false;
                }
                String dayNumKey = String.format(NEW_ORDER_PROCESS_GRAY_NUM, DateUtil.format(new Date(), "yyyy-MM-dd"), orderTradeType.getSelfType());
                if (NumberUtils.toInt(ZZGameRedisUtil.get(dayNumKey)) < grayConfig.getDayNum()){
                    int result = gameGrayTestService.insertNewTradeProcessOrder(orderId);
                    log.info("{} desc=insert_gray_order_data orderId={} result={}", logStr, orderId, result);
                    if (result > 0){
                        ZZGameRedisUtil.increAndGet(dayNumKey, 1);
                        ZZGameRedisUtil.expire(dayNumKey, 3600*24);
                        ZZGameRedisUtil.sadd(orderRedisSet, orderId.toString());
                        ZZGameRedisUtil.expire(orderRedisSet, 3600*24);
                    }
                    return result >= 0;
                }
                return false;
            }
        } catch (Exception e) {
            log.error("{} desc=isNewOrderProcess_error orderId={}", orderContext.getLogStr(), orderContext.getOrderId(), e);
        }
        return false;
}

3.3 異常機制

在一些重要的節(jié)點設置告警機制,比如上傳賬密、發(fā)貨、提現(xiàn)等節(jié)點出現(xiàn)異常時會發(fā)送企業(yè)微信告警通知,可以第一時間關閉灰度,查找問題。

圖片

不過對于分帳正確性保障這塊只是通過測試確保正確,這種最好是可以接入中臺的BCP(Business Check Platform)系統(tǒng)。它是一種標準化數(shù)據(jù)校對平臺,支持標準化數(shù)據(jù)源接入,基于事件觸發(fā)規(guī)則執(zhí)行,進行業(yè)務數(shù)據(jù)校對,可以及時快速的發(fā)現(xiàn)業(yè)務異常數(shù)據(jù)并實時告警。

4 總結

在對訂單流程進行重構之后,新增或修改某種訂單模式,只需增改相應的訂單類型處理類就可以了,也不用擔心本次修改會影響到其它的訂單模式,大大提高了開發(fā)效率。此外,重構代碼可以幫助我們進一步深入了解整個業(yè)務流程,發(fā)現(xiàn)代碼的壞味道,提升代碼結構設計能力。

責任編輯:龐桂玉 來源: 轉轉技術
相關推薦

2024-06-26 18:58:30

游戲MQ重構

2022-11-09 09:00:51

OCR游戲應用

2023-11-01 07:44:29

轉轉Flutter業(yè)務

2023-02-01 10:11:06

轉轉容器日志

2025-07-23 02:11:00

游戲賬號業(yè)務

2010-03-26 16:16:55

Windows 7

2022-11-06 20:47:20

OCPC項目

2021-09-10 09:58:35

AvlBST時間

2024-08-29 14:44:01

質檢埋點

2022-08-08 13:24:28

整潔架構架構前端

2025-08-14 02:55:00

2023-08-30 18:51:44

轉轉C2B報告

2022-05-11 11:25:49

模型方案

2021-09-03 23:01:58

CSS 技巧代碼重構

2023-02-23 06:51:45

游戲推薦項目

2023-07-31 22:02:17

客服訂單詳情

2024-12-02 11:15:08

2021-12-17 07:54:16

Flink SQLTable DataStream

2021-09-08 09:48:39

數(shù)據(jù)庫工具技術

2009-02-27 14:48:09

點贊
收藏

51CTO技術棧公眾號

日韩av在线免费观看| 中文字幕日韩一区二区| 日本三级韩国三级久久| 成人做爰69片免网站| 亚洲高清在线一区| 欧美视频裸体精品| 国产高清免费在线| 天天插天天干天天操| 美女精品自拍一二三四| 欧美国产日韩在线| 久久午夜福利电影| 99热这里只有精品首页| 91福利精品第一导航| 99热这里只有精品免费| 久草福利在线视频| 国产成人午夜精品影院观看视频 | 国产大屁股喷水视频在线观看| 日韩欧洲国产| 欧美无砖专区一中文字| 国产精品久久..4399| 日本中文字幕在线2020| 99r国产精品| 91综合免费在线| 国产又粗又猛又爽又| 伊人狠狠色j香婷婷综合| 中文字幕精品久久久久| 亚洲av片不卡无码久久| 精品三级国产| 欧美日韩成人综合天天影院 | 亚洲三级黄色在线观看| 亚洲乱妇老熟女爽到高潮的片 | 国产九色精品| 国产色综合视频| 毛片av中文字幕一区二区| 欧美亚洲国产视频小说| 久久久久久久久久久久国产| 婷婷亚洲五月| 这里只有视频精品| 婷婷色一区二区三区 | 亚洲美女网站18| 日韩电影在线观看完整版| 高清免费成人av| 亚洲综合小说区| 99国产在线播放| 国产综合色视频| 国产精品一区二区久久久| 天干夜夜爽爽日日日日| 免费视频一区二区三区在线观看| 午夜精品久久久久久久男人的天堂| 天天干中文字幕| 亚洲欧洲日韩| 精品综合久久久久久97| 免费在线观看a级片| 久久久久av| www.午夜精品| 黄色一级片中国| 2023国产精品久久久精品双| 久久精品影视伊人网| 永久久久久久久| 亚洲精品一区二区妖精| 欧美成人黄色小视频| 99视频只有精品| 国产精品hd| 午夜精品久久久久久久久久久久久 | 人妻精品一区二区三区| 丰满亚洲少妇av| 久久99国产精品| 激情综合闲人网| 国产精品网站导航| 99精品一区二区三区的区别| www.欧美日本韩国| 亚洲成人av一区二区三区| 国产av人人夜夜澡人人爽麻豆| 欧美aaaaa性bbbbb小妇| 在线一区二区三区做爰视频网站| 亚洲污视频在线观看| 国产95亚洲| 精品国产一区二区三区不卡| 国产精品1000部啪视频| 日本a口亚洲| 久久久精品影院| 亚洲激情视频一区| 久久精品动漫| 91视频免费在线| 丰满少妇在线观看bd| 91网上在线视频| 在线视频福利一区| www视频在线观看| 色综合久久88色综合天天免费| www.久久91| xxxx日韩| 中文字幕亚洲综合久久筱田步美| 婷婷色中文字幕| 国产麻豆综合| 92国产精品久久久久首页| 天堂中文字幕在线| 中文字幕亚洲视频| 男人日女人视频网站| 天堂久久午夜av| 精品日韩成人av| 一级特黄曰皮片视频| 亚洲性感美女99在线| 国产精品69av| 日本人妻丰满熟妇久久久久久| 日本一区二区三区久久久久久久久不 | 狠狠人妻久久久久久综合蜜桃| 色综合咪咪久久网| 91av视频在线| 国产高清免费观看| 国产欧美一区二区精品婷婷| 美女黄色免费看| xxxxx.日韩| 亚洲欧美日韩精品| 一区二区三区免费高清视频| 免费在线观看不卡| 久久99欧美| 性网站在线观看| 欧美三级乱人伦电影| 欧美无人区码suv| 欧美福利专区| 成人美女免费网站视频| 国产在线色视频| 韩曰欧美视频免费观看| 肉丝美足丝袜一区二区三区四| 国产一区二区三区不卡视频网站 | 日韩一区二区三区在线免费观看| 精品少妇一区二区三区| 中文字幕91视频| 日韩av电影天堂| 蜜桃网站成人| gay欧美网站| 亚洲国产日韩欧美在线动漫| 国产精品白嫩白嫩大学美女| 蜜桃久久久久久| 性刺激综合网| 免费观看成人性生生活片| 精品视频中文字幕| 国产成人无码精品| av在线不卡免费看| 欧美又粗又长又爽做受| 4438全国亚洲精品观看视频| 九九热99久久久国产盗摄| 国产精品探花视频| 亚洲人妖av一区二区| 中文字幕 欧美日韩| 久久香蕉国产| 国产综合视频在线观看| 人人干在线视频| 欧美日韩成人在线| 91高清免费看| 国产经典欧美精品| 日韩一区二区高清视频| 亚洲大奶少妇| 97人人做人人爱| 天天色综合久久| 精品久久久久久久中文字幕| 亚洲第一黄色网址| 国产精品入口| 欧美一区亚洲二区| 国精品产品一区| 久久精品成人欧美大片古装| www.av日韩| 亚洲成人免费看| 国产艳俗歌舞表演hd| 久久久久久穴| 一区不卡字幕| 日韩一区二区三区高清在线观看| 久久噜噜噜精品国产亚洲综合| 日日躁夜夜躁白天躁晚上躁91| 大荫蒂欧美视频另类xxxx| 国产精品1000部啪视频| 久久精品国内一区二区三区| 国产精品啪啪啪视频| 欧美成人专区| 国产精品丝袜一区二区三区| 中文在线观看免费| 日韩av在线网站| 亚洲精品无码久久久久| 亚洲欧美一区二区三区孕妇| 日本五十肥熟交尾| 秋霞午夜鲁丝一区二区老狼| 9色视频在线观看| 久久综合社区| 国产精品夜色7777狼人| 男女在线视频| 亚洲午夜小视频| 精品欧美一区二区精品少妇| 欧美性猛交xxxxx免费看| 久久人妻无码aⅴ毛片a片app| 成人午夜伦理影院| 九热视频在线观看| 在线看片欧美| 亚洲视频在线二区| 老牛精品亚洲成av人片| 国产精品亚洲欧美导航| 波多野结衣在线播放| 最近中文字幕mv在线一区二区三区四区 | 色yeye免费人成网站在线观看| 精品视频一区在线视频| www.黄色片| 欧美视频在线一区二区三区| 日韩精品久久久久久久| 国产精品二三区| 亚洲第九十七页| 国产在线看一区| 无码无遮挡又大又爽又黄的视频| 欧美日韩一区二区三区四区在线观看 | 日韩精品人妻中文字幕有码| 另类的小说在线视频另类成人小视频在线| 日本五级黄色片| 欧美电影《睫毛膏》| 久久久精品国产一区二区三区| 精品国产亚洲一区二区三区在线 | 污污的网站18| 99精品视频免费观看| 蜜臀在线免费观看| av永久不卡| 国产在线精品一区二区中文 | 欧美性xxxx69| 牛牛精品成人免费视频| www.久久艹| 成人av在线播放| 国产精品偷伦免费视频观看的| 国产社区精品视频| 久久久久久久久久亚洲| www久久日com| 操91在线视频| 麻豆视频在线观看免费网站| 在线视频国产日韩| 久草福利在线视频| 亚洲欧美日韩一区二区三区在线| 秋霞av鲁丝片一区二区| 精品久久久久久久久久久院品网| 国产精品无码久久av| 欧美高清视频一二三区 | 国产不卡网站| 91成人免费观看网站| av成人 com a| 欧美裸体男粗大视频在线观看| 免费观看在线午夜影视| 色综久久综合桃花网| 最新国产在线观看| 伊人青青综合网站| 在线视频91p| 色偷偷亚洲男人天堂| 黄在线免费看| 久久综合久久美利坚合众国| www久久日com| 久久久久久成人| 性欧美xxx69hd高清| 欧洲成人性视频| 三上悠亚一区二区| 国产精品成人av性教育| 亚洲日本网址| 国产区精品视频| 粉嫩av国产一区二区三区| 91免费版黄色| 国产精品qvod| 欧美日韩国产综合在线| 国产欧美日韩一区二区三区四区| 性欧美videosex高清少妇| 久久精品国产99久久| 韩国黄色一级大片| 亚洲第一伊人| caopor在线视频| 另类专区欧美蜜桃臀第一页| 亚洲综合123| 99re在线视频这里只有精品| 醉酒壮男gay强迫野外xx| 国产欧美一区二区精品久导航| 极品色av影院| 亚洲高清一区二区三区| 国产美女激情视频| 欧美三级日韩在线| www日本在线| 国产视频精品一区二区三区| 91caoporm在线视频| 欧美激情aaaa| 深夜成人福利| 91丝袜脚交足在线播放| 亚洲精品**不卡在线播he| 亚洲国产一区在线| 亚洲香蕉网站| www.天天射.com| 国产传媒日韩欧美成人| 97伦伦午夜电影理伦片| 成人免费小视频| 91在线看视频| 51精品秘密在线观看| 日韩在线一区二区三区四区| 中文字幕av一区中文字幕天堂| 国产美女一区视频| 国产一区私人高清影院| 鲁大师精品99久久久| 亚洲日本一区二区三区在线不卡| 韩日欧美一区| 污污动漫在线观看| 成人黄色小视频在线观看| a天堂中文字幕| 亚洲成人免费影院| 国产精品久久欧美久久一区| 亚洲精品动漫100p| 中文字幕在线三区| 国产精品一区专区欧美日韩| 国产精品jk白丝蜜臀av小说| 日本一区二区免费高清视频| 国产一区二区你懂的| 韩国三级丰满少妇高潮| 亚洲国产精品高清| 国产高潮久久久| 精品国产乱码久久久久久闺蜜| 欧美96在线| 国产精品美女无圣光视频| 亚洲va久久久噜噜噜久久| 国产欧美精品aaaaaa片| 国产一区二区三区日韩| 黄色三级生活片| 色综合久久精品| 无码精品黑人一区二区三区| 欧美激情免费视频| 国产精品亚洲四区在线观看| 国产一区二区三区在线观看精品| 超碰在线播放91| 久久久国产精华| 久久亚洲精品国产| 日韩精品一区二区三区中文不卡| 在线观看精品一区二区三区| 国产91免费看片| 伊人久久大香线蕉无限次| 青青草国产精品视频| 成人少妇影院yyyy| 日本老熟俱乐部h0930| 91.成人天堂一区| 最近高清中文在线字幕在线观看| 国产精品久久久久久av福利| 免费国产自久久久久三四区久久| 国产老熟妇精品观看| av在线一区二区三区| 国产免费观看av| 亚洲欧美第一页| 性高爱久久久久久久久| 免费在线观看一区二区| 麻豆久久精品| 91激情视频在线观看| 欧美亚洲综合色| 香蕉视频在线免费看| 91精品久久久久久久久中文字幕 | 国产精品999视频| 懂色av一区二区夜夜嗨| 国产精品theporn动漫| 亚洲精品一区在线观看| 97超碰免费在线| 麻豆久久久9性大片| 久久激情网站| 任你操精品视频| 日韩欧美电影一区| 黄色大片在线| 久久久久久99| 久久久精品日韩| 午夜激情视频在线播放| 日韩一区二区在线看| a国产在线视频| 日韩av高清| 黄页网站大全一区二区| 免费中文字幕视频| 日韩精品视频在线观看免费| 日产精品一区| japanese在线视频| 成人av网站免费| 懂色av蜜臀av粉嫩av分享吧最新章节| 中文精品99久久国产香蕉| 国产在线一区不卡| 玩弄中年熟妇正在播放| 国产喂奶挤奶一区二区三区| 亚洲图片中文字幕| 欧美黑人巨大精品一区二区| 欧美有码在线| 五月天开心婷婷| 精品久久久中文| 嫩草在线视频| 久久er99热精品一区二区三区| 日本视频一区二区| 精品一区在线视频| 在线观看国产精品91| 天堂久久av| 波多野结衣天堂| 亚洲一区二区免费视频| 国产乱理伦片a级在线观看| 亚洲综合在线播放| 天堂在线一区二区| 欧美激情精品久久| 亚洲人成亚洲人成在线观看| 精品视频成人| 国产wwwxx| 精品magnet| 99热国产在线中文| 欧洲精品国产| 成人久久18免费网站麻豆| 亚洲系列第一页| 91产国在线观看动作片喷水|