精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

奇米影视一区二区三区| 首页亚洲中字| 樱桃视频在线观看一区| 国产伦理久久久| 欧美日韩一级黄色片| 99精品网站| 亚洲国产精品人人爽夜夜爽| 久久久久久久片| 婷婷在线播放| 国产片一区二区| 成人免费在线看片| 波多野结衣一区二区三区四区| 亚洲成人日韩| 亚洲视频在线观看免费| 好吊操视频这里只有精品| 国模视频一区| 午夜免费久久看| 中文字幕日韩精品一区二区| 三级在线电影| 国产成人精品免费看| 日韩免费观看高清| 日韩av一二三区| 女人天堂亚洲aⅴ在线观看| 亚洲欧美在线第一页| 潘金莲一级淫片aaaaa| 国产91在线播放精品| 偷拍与自拍一区| 天天想你在线观看完整版电影免费| 青青草观看免费视频在线| 精品一区二区影视| 国产精品99久久久久久久久| 日本五十路女优| 亚洲精品国产首次亮相| 在线电影av不卡网址| 老司机免费视频| 亚洲超碰在线观看| 欧美人狂配大交3d怪物一区| 8x8x最新地址| 久久久一本精品| 色天天综合久久久久综合片| 9久久9毛片又大又硬又粗| 男女在线观看视频| 一区二区欧美精品| 男人天堂新网址| 怡红院av在线| 一区二区三区日韩欧美| 特色特色大片在线| 黄色成年人视频在线观看| 国产喷白浆一区二区三区| 欧美一级片免费观看| 日本福利片高清在线观看| 99re热视频精品| 国产中文一区二区| 五月婷婷综合久久| 91丝袜国产在线播放| 精品人伦一区二区三区| 日本韩国在线观看| www.日韩av| 久久久久九九九| 你懂的免费在线观看视频网站| 26uuu国产一区二区三区| 久久99九九| 男男激情在线| 国产欧美精品一区aⅴ影院| 日本午夜精品一区二区三区| 国产福利在线| 国产精品福利影院| 女女同性女同一区二区三区按摩| 国产在线更新| 亚洲一区二区影院| 女人和拘做爰正片视频| 日韩免费va| 欧美日韩国产bt| 男插女视频网站| 97青娱国产盛宴精品视频| 亚洲精品电影在线观看| 国产手机在线观看| 国产高清欧美| 欧美激情精品久久久久久久变态 | 97人妻精品一区二区三区视频| 麻豆精品视频在线观看视频| 91在线视频导航| 欧美一级特黄aaaaaa| 久久精品视频在线免费观看| 亚洲欧美一区二区原创| caoporm免费视频在线| 午夜一区二区三区视频| 成人在线免费播放视频| 国产精品视频一区视频二区| 欧美精品一区二区在线播放| 精品人妻互换一区二区三区| 羞羞答答成人影院www| 国模gogo一区二区大胆私拍| 国产精品免费无遮挡无码永久视频| 美女精品一区二区| 国产精品久久国产精品| 国产中文字幕在线看| 亚洲美女淫视频| 国产精品宾馆在线精品酒店| 亚洲ww精品| 精品中文字幕久久久久久| 成人无码精品1区2区3区免费看 | 理论片一区二区在线| 国产一区二区三区四区福利| 久久久久无码国产精品| 日本成人在线电影网| 国产伦精品一区二区三区视频免费 | 国产免费一区二区三区四区| 国产亚洲一级| 99国产在线观看| av在线播放网| 福利视频导航一区| 国产老头和老头xxxx×| jiujiure精品视频播放| 97超级碰在线看视频免费在线看 | 性感美女一区二区在线观看| 日韩一区二区免费在线电影| 俄罗斯毛片基地| 亚洲中午字幕| 国产精品一区视频| 在线观看电影av| 欧美日韩国产大片| 91精品久久久久久久久久久久| 在线日本高清免费不卡| 91在线高清免费观看| 91视频在线观看| 日本精品一区二区三区高清| 中文字幕日韩三级片| 国产精品av一区二区| 91久久久在线| 免费a级毛片在线播放| 欧美亚洲一区二区在线观看| 中文字幕在线观看的网站| 亚洲国内精品| 国产九色精品| 99在线视频影院| 亚洲第一免费播放区| 久久久久香蕉视频| 国产成人av网站| 国产性生活免费视频| 日韩av综合| 欧美成人国产va精品日本一级| 一二三四区视频| 国产精品久久777777| 高清av免费看| 999视频精品| 成人妇女免费播放久久久| 三区四区在线视频| 欧美美女喷水视频| 人人干在线观看| 紧缚捆绑精品一区二区| 永久免费精品视频网站| 欧美伊人亚洲伊人色综合动图| 色狠狠av一区二区三区香蕉蜜桃| 久久精品视频2| 中文乱码免费一区二区| 黄大色黄女片18第一次| 久久精品青草| 亚洲综合第一页| 草草在线视频| 国产婷婷97碰碰久久人人蜜臀 | 欧美一级二区| 欧美一区二区高清在线观看| 欧洲精品一区二区三区| 中文无码久久精品| 精品无码久久久久久国产| 日韩高清精品免费观看| 26uuu国产在线精品一区二区| 人妻熟女一二三区夜夜爱| 国产一区二区三区四区| 国产在线视频不卡| 午夜伦理大片视频在线观看| 亚洲精品在线观看视频| 丁香六月婷婷综合| 国产精品乱子久久久久| 国产精品19p| 国产精品外国| 亚洲制服欧美久久| 日韩精品一区二区三区中文在线| 欧美精品xxx| 欧美日韩在线中文字幕| 欧美日韩卡一卡二| 国产无遮挡又黄又爽又色| 久久久久久久精| 日韩成人精品视频在线观看| 国产精品jizz在线观看美国| 麻豆蜜桃91| 国产一区二区av在线| 97精品视频在线| 麻豆传媒视频在线观看免费| 亚洲а∨天堂久久精品9966 | av网站大全在线| 亚洲精品国产精品乱码不99按摩| 最近中文字幕在线免费观看| 一区二区三区不卡视频| 国产熟妇久久777777| 激情五月激情综合网| www国产精品内射老熟女| 99久久99久久精品国产片桃花 | 久久精品一二三四| 美女尤物久久精品| 米仓穗香在线观看| 成人一级毛片| 国产伦精品一区二区三区四区视频| 国产伊人久久| 456亚洲影院| 色呦呦在线视频| www日韩中文字幕在线看| 午夜黄色小视频| 欧美一级理论片| 久久这里只有精品9| 亚洲第一激情av| 少妇影院在线观看| 国产亚洲视频系列| 亚洲国产精品无码久久久久高潮 | 亚洲日产国产精品| 中文字幕在线观看一区二区三区| 午夜精品影视国产一区在线麻豆| 成人夜晚看av| www.成人在线视频| 欧洲一区二区视频| 2018av在线| 欧美黑人性生活视频| 91精彩在线视频| 亚洲色图美腿丝袜| 香蕉国产在线视频| 日韩美女在线视频| 国产绿帽刺激高潮对白| 在线精品国精品国产尤物884a| 国产成人在线播放视频| 亚洲亚洲人成综合网络| 欧美一区二区三区爽爽爽| 国产精品高潮呻吟| 在线观看免费黄色网址| 中文字幕精品一区| 日本性高潮视频| av亚洲精华国产精华精| 人妻体内射精一区二区三区| 国产盗摄精品一区二区三区在线 | 国产日韩精品一区二区三区| 日b视频在线观看| 成人一道本在线| 岛国av免费观看| 国产91精品一区二区| 波多野结衣中文字幕在线播放| 国模无码大尺度一区二区三区| 一本色道久久亚洲综合精品蜜桃 | 亚洲一区二区日本| 四虎精品永久免费| 91精品国产自产在线老师啪 | 高清视频在线观看三级| 性色av一区二区三区免费| 2020国产在线| 2020国产精品视频| 桃花岛成人影院| 国产精品久久久久久久久久久久| 播放一区二区| 91老司机在线| youjizz亚洲| 国产一区不卡在线观看| 亚洲自拍电影| 色综合电影网| 亚洲欧美网站在线观看| 999久久欧美人妻一区二区| 中文在线日韩| 黄色免费观看视频网站| 日韩高清在线观看| 中文字幕日韩久久| 处破女av一区二区| 久久久久亚洲av无码专区桃色| 国产亚洲1区2区3区| 男人的午夜天堂| 亚洲一区二区精品久久av| 中国一级免费毛片| 欧美视频一区二区在线观看| 99热这里只有精| 日韩精品免费在线视频观看| 国产视频三级在线观看播放| 色av吧综合网| 超碰成人av| 国产欧美一区二区| 丁香5月婷婷久久| 日本一区二区三区精品视频| 亚州av乱码久久精品蜜桃| 亚洲熟妇无码另类久久久| 老色鬼久久亚洲一区二区| 操人视频免费看| 91在线视频官网| 欧美xxxooo| 欧美日韩国产精品一区| 亚洲天堂狠狠干| 欧美精品一区男女天堂| 香蕉视频免费在线播放| 久久久视频在线| 国产精品久久久久久久久免费高清 | 久久久99精品免费观看| 国内偷拍精品视频| 色综合激情久久| 朝桐光av在线一区二区三区| 亚洲欧美在线看| av影院在线| 91手机视频在线观看| 中国av一区| 少妇人妻大乳在线视频| 日本麻豆一区二区三区视频| 国产高潮失禁喷水爽到抽搐| 国产欧美精品区一区二区三区| 精品一区二区三区人妻| 欧美日韩一区二区在线观看| 香蕉久久国产av一区二区| 九九九久久久久久| 九九九精品视频| 免费看成人片| 欧美日韩亚洲一区三区| 蜜桃福利午夜精品一区| 久久久久久免费网| 国产在线一区视频| 欧美一区二区三区的| yw193.com尤物在线| 韩国一区二区电影| 日韩成人视屏| 99精品视频网站| 人妖欧美一区二区| 中文字字幕码一二三区| 亚洲成人免费观看| 亚洲国产www| 欧美日本亚洲视频| 成人97精品毛片免费看| 在线观看福利一区| 久久国产日韩欧美精品| 人妻熟人中文字幕一区二区| 色综合天天在线| 青草久久伊人| 欧美在线欧美在线| 日本韩国欧美超级黄在线观看| 中文字幕日韩精品无码内射| 国产中文字幕精品| 欧美风情第一页| 5858s免费视频成人| 麻豆av在线导航| 91九色国产在线| 中文视频一区| 国产精久久久久| 亚洲尤物在线视频观看| www.激情五月.com| 欧美人与性动交| 国产精品视屏| 欧美日韩在线中文| 久久久噜噜噜久噜久久综合| 国产99久久久| 亚洲人成网站999久久久综合| 欧美电影网址| 日韩亚洲视频在线| 蜜桃传媒麻豆第一区在线观看| 自拍偷拍第9页| 91精品国产乱码| 久久一卡二卡| 精品日本一区二区| 视频精品一区二区| 国产激情av在线| 91精品视频网| eeuss鲁一区二区三区| 精品视频第一区| 日韩高清在线一区| 免费国产羞羞网站美图| 精品久久久久av影院| 激情黄产视频在线免费观看| 麻豆精品传媒视频| 麻豆精品新av中文字幕| 日韩欧美中文字幕视频| 亚洲黄色av女优在线观看| 色豆豆成人网| 中国 免费 av| av在线不卡免费看| 波多野结衣毛片| 欧美精品少妇videofree| 日韩三区视频| 亚洲欧美国产日韩综合| 亚洲精品国产精华液| 三级小视频在线观看| 国产精品27p| 综合激情一区| 亚洲a v网站| 欧美一级欧美三级| 波多野结衣久久精品| 99亚洲精品视频| 99国产欧美另类久久久精品| 一区二区视频网| 久久久视频精品| 欧美大人香蕉在线| 黄色性视频网站| 欧美日韩一区视频| 黄色小说在线播放| 五月天亚洲综合小说网| 成人一级视频在线观看| 亚洲中文字幕在线观看| 国语自产偷拍精品视频偷| 97人人精品| 国产精品无码久久久久一区二区| 欧美一区二区大片|