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

基于 Spring 狀態(tài)機(jī)實(shí)現(xiàn)電商訂單狀態(tài)流轉(zhuǎn)管理

開發(fā) 前端
傳統(tǒng)的if-else分支判斷在狀態(tài)較多、轉(zhuǎn)移邏輯復(fù)雜時(shí)會(huì)變得難以維護(hù),而Spring狀態(tài)機(jī)結(jié)合狀態(tài)模式可以很好地解決這個(gè)問題,讓狀態(tài)轉(zhuǎn)移邏輯更加清晰、可擴(kuò)展。

引言

在電商系統(tǒng)中,訂單狀態(tài)的流轉(zhuǎn)是核心業(yè)務(wù)流程之一。從用戶下單、支付、商家發(fā)貨到用戶收貨、售后等環(huán)節(jié),每個(gè)環(huán)節(jié)對(duì)應(yīng)不同的訂單狀態(tài),且狀態(tài)之間的轉(zhuǎn)移需要滿足嚴(yán)格的業(yè)務(wù)規(guī)則。

傳統(tǒng)的if-else分支判斷在狀態(tài)較多、轉(zhuǎn)移邏輯復(fù)雜時(shí)會(huì)變得難以維護(hù),而Spring狀態(tài)機(jī)結(jié)合狀態(tài)模式可以很好地解決這個(gè)問題,讓狀態(tài)轉(zhuǎn)移邏輯更加清晰、可擴(kuò)展。

實(shí)現(xiàn)

圖片圖片


圖片圖片

案例代碼

訂單狀態(tài)枚舉

定義訂單的所有狀態(tài),每個(gè)狀態(tài)對(duì)應(yīng)業(yè)務(wù)中的一個(gè)環(huán)節(jié):

@WithStateMachine
public enum OrderStatus {
    WAIT_PAY("待支付"),
    WAIT_DELIVER("待發(fā)貨"),
    WAIT_RECEIVE("待收貨"),
    COMPLETED("已完成"),
    CLOSED("已關(guān)閉"),
    AFTER_SALE("售后中");

    @Getter
    private final String desc;

    OrderStatus(String desc) {
        this.desc = desc;
    }
}

訂單事件枚舉

事件是觸發(fā)狀態(tài)轉(zhuǎn)移的動(dòng)作,每個(gè)事件對(duì)應(yīng)一次狀態(tài)變更的觸發(fā)條件:

public enum OrderEvent {
    PAY_SUCCESS("支付成功"),
    DELIVER("倉庫發(fā)貨"),
    RECEIVE("確認(rèn)收貨"),
    CANCEL("用戶取消/超時(shí)"),
    APPLY_REFUND("審核退款"),
    APPLY_AFTER_SALE("申請(qǐng)售后");

    @Getter
    private final String desc;

    OrderEvent(String desc) {
        this.desc = desc;
    }
}

狀態(tài)機(jī)配置

配置狀態(tài)機(jī)的狀態(tài)、事件、轉(zhuǎn)移邏輯及監(jiān)聽器:

@Configuration
@EnableStateMachine
public class OrderStateMachineConfig extends EnumStateMachineConfigurerAdapter<OrderStatus, OrderEvent> {

    /**
     * 配置狀態(tài)機(jī)的“狀態(tài)集合”和“初始狀態(tài)”
     */
    @Override
    public void configure(StateMachineStateConfigurer<OrderStatus, OrderEvent> states) throws Exception {
        states.withStates()
                .initial(OrderStatus.WAIT_PAY) // 初始狀態(tài)為“待支付”
                .states(EnumSet.allOf(OrderStatus.class)); // 注冊(cè)所有狀態(tài)
    }

    /**
     * 配置狀態(tài)機(jī)的“轉(zhuǎn)移規(guī)則”(事件觸發(fā)狀態(tài)變更)
     */
    @Override
    public void configure(StateMachineTransitionConfigurer<OrderStatus, OrderEvent> transitions) throws Exception {
        transitions
                // 待支付 → 待發(fā)貨:支付成功
                .withExternal()
                .source(OrderStatus.WAIT_PAY).target(OrderStatus.WAIT_DELIVER)
                .event(OrderEvent.PAY_SUCCESS)
                .and()
                // 待支付 → 已關(guān)閉:用戶取消/超時(shí)
                .withExternal()
                .source(OrderStatus.WAIT_PAY).target(OrderStatus.CLOSED)
                .event(OrderEvent.CANCEL)
                .and()
                // 待發(fā)貨 → 待收貨:倉庫發(fā)貨
                .withExternal()
                .source(OrderStatus.WAIT_DELIVER).target(OrderStatus.WAIT_RECEIVE)
                .event(OrderEvent.DELIVER)
                .and()
                // 待發(fā)貨 → 已關(guān)閉:審核退款
                .withExternal()
                .source(OrderStatus.WAIT_DELIVER).target(OrderStatus.CLOSED)
                .event(OrderEvent.APPLY_REFUND)
                .and()
                // 待收貨 → 已完成:確認(rèn)收貨
                .withExternal()
                .source(OrderStatus.WAIT_RECEIVE).target(OrderStatus.COMPLETED)
                .event(OrderEvent.RECEIVE)
                .and()
                // 已完成 → 售后中:申請(qǐng)售后
                .withExternal()
                .source(OrderStatus.COMPLETED).target(OrderStatus.AFTER_SALE)
                .event(OrderEvent.APPLY_AFTER_SALE);
    }

    /**
     * 配置狀態(tài)機(jī)的“全局配置”(如監(jiān)聽器)
     */
    @Override
    public void configure(StateMachineConfigurationConfigurer<OrderStatus, OrderEvent> config) throws Exception {
        config.withConfiguration()
                .listener(new OrderStateMachineListener()); // 注冊(cè)狀態(tài)變更監(jiān)聽器
    }
}
@Slf4j
@Component
public class OrderStateMachineListener extends StateMachineListenerAdapter<OrderStatus, OrderEvent> {

    @Override
    public void stateChanged(State<OrderStatus, OrderEvent> from, State<OrderStatus, OrderEvent> to) {
        if (from != null) {
            log.info("訂單狀態(tài)從: " + from.getId().getDesc() + " 變更為: " + to.getId().getDesc());
        } else {
            log.info("訂單初始狀態(tài): " + to.getId().getDesc());
        }
    }
}

業(yè)務(wù)邏輯層實(shí)現(xiàn)

封裝狀態(tài)機(jī)觸發(fā)邏輯與數(shù)據(jù)庫操作,保證事務(wù)一致性:

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private StateMachine<OrderStatus, OrderEvent> stateMachine;

    @Autowired
    private StateMachinePersister<OrderStatus, OrderEvent, Order> stateMachineMemPersister;

    /**
     * 創(chuàng)建訂單(初始狀態(tài)為待支付)
     */
    @Transactional
    public Order createOrder(Order order) {
        order.setStatus(OrderStatus.WAIT_PAY);
        orderMapper.insert(order);
        return order;
    }

    /**
     * 觸發(fā)狀態(tài)事件,更新訂單狀態(tài)
     */
    @Transactional
    public boolean triggerEvent(Long orderId, OrderEvent event) {
        // 查詢訂單
        Order order = orderMapper.selectById(orderId);
        if (order == null) {
            throw new RuntimeException("訂單不存在:" + orderId);
        }
        boolean result = false;
        try {
            // 從訂單中恢復(fù)狀態(tài)機(jī)當(dāng)前狀態(tài)
            stateMachineMemPersister.restore(stateMachine, order);
            // 發(fā)送事件觸發(fā)狀態(tài)變更
            Message<OrderEvent> message = MessageBuilder.withPayload(event)
                    .setHeader("orderId", orderId)
                    .build();
            result = stateMachine.sendEvent(message);
            // 狀態(tài)轉(zhuǎn)移成功,更新數(shù)據(jù)庫中的訂單狀態(tài)
            if (result) {
                // 持久化狀態(tài)機(jī)最新狀態(tài)
                stateMachineMemPersister.persist(stateMachine, order);
                // 更新訂單實(shí)體狀態(tài)
                order.setStatus(stateMachine.getState().getId());
                orderMapper.updateById(order);
            }
        } catch (Exception e) {
            throw new RuntimeException("狀態(tài)變更失敗:" + e.getMessage(), e);
        }
        return result;
    }

    /**
     * 查詢訂單(用于測(cè)試)
     */
    public Order getOrder(Long orderId) {
        return orderMapper.selectById(orderId);
    }

}
接口層實(shí)現(xiàn)

對(duì)外暴露HTTP接口,用于創(chuàng)建訂單和觸發(fā)狀態(tài)事件:

@CrossOrigin
@RestController
@RequestMapping("/order")
public class OrderController {

    @Resource
    private OrderService orderService;

    /**
     * 創(chuàng)建訂單
     */
    @PostMapping("/create")
    public Order createOrder(
            @RequestParam String userId,
            @RequestParam String productId,
            @RequestParam BigDecimal amount) {
        Order order = new Order();
        order.setId(userId);
        order.setProductName(productId);
        order.setAmount(amount);
        order.setStatus(OrderStatus.WAIT_PAY);
        return orderService.createOrder(order);
    }

    /**
     * 觸發(fā)訂單狀態(tài)事件
     */
    @PostMapping("/event/{orderId}/{event}")
    public boolean triggerEvent(
            @PathVariable Long orderId,
            @PathVariable String event) {
        OrderEvent orderEvent = OrderEvent.valueOf(event);
        return orderService.triggerEvent(orderId, orderEvent);
    }

    @GetMapping("/{orderId}")
    public Order getOrder(@PathVariable Long orderId) {
        Order order = orderService.getOrder(orderId);
        if (order == null) {
            throw new RuntimeException("訂單不存在");
        }
        return order;
    }
}

持久化(可選)

@Slf4j
@Configuration
public class StateMachinePersistConfig {

    /**
     * 內(nèi)存持久化(基于HashMap)
     * 適合單體應(yīng)用,服務(wù)重啟后狀態(tài)會(huì)丟失
     */
    @Bean(name = "stateMachineMemPersister")
    public StateMachinePersister<OrderStatus, OrderEvent, Order> stateMachineMemPersister() {
        // 實(shí)現(xiàn)StateMachinePersist接口,定義狀態(tài)讀寫邏輯
        StateMachinePersist<OrderStatus, OrderEvent, Order> persist = new StateMachinePersist<OrderStatus, OrderEvent, Order>() {
            // 用HashMap存儲(chǔ)訂單ID與狀態(tài)機(jī)上下文的映射
            private final Map<String, StateMachineContext<OrderStatus, OrderEvent>> stateMap = new HashMap<>();

            @Override
            public void write(StateMachineContext<OrderStatus, OrderEvent> context, Order order) throws Exception {
                log.info("內(nèi)存持久化狀態(tài)機(jī) - 寫入,訂單ID: {}, 狀態(tài)上下文: {}", order.getId(), JSON.toJSONString(context));
                stateMap.put(order.getId(), context);
            }

            @Override
            public StateMachineContext<OrderStatus, OrderEvent> read(Order order) throws Exception {
                StateMachineContext<OrderStatus, OrderEvent> context = stateMap.get(order.getId());
                log.info("內(nèi)存持久化狀態(tài)機(jī) - 讀取,訂單ID: {}, 狀態(tài)上下文: {}", order.getId(), JSON.toJSONString(context));
                return context;
            }
        };

        // 使用Spring提供的DefaultStateMachinePersister包裝
        return new DefaultStateMachinePersister<>(persist);
    }
}

Redis持久化配置案例:

@Configuration
public class StateMachinePersistConfig {

    /**
     * Redis持久化(分布式系統(tǒng)適用)
     * 狀態(tài)機(jī)上下文存儲(chǔ)在Redis中,支持多實(shí)例共享狀態(tài)
     */
    @Bean(name = "stateMachineRedisPersister")
    public StateMachinePersister<OrderStatus, OrderEvent, Long> stateMachineRedisPersister(
            RedisConnectionFactory redisConnectionFactory) {
        // 創(chuàng)建Redis狀態(tài)機(jī)上下文倉庫
        RedisStateMachineContextRepository<OrderStatus, OrderEvent> repository = 
                new RedisStateMachineContextRepository<>(redisConnectionFactory);
        
        // 基于倉庫實(shí)現(xiàn)持久化邏輯
        RepositoryStateMachinePersist<OrderStatus, OrderEvent, Long> persist = 
                new RepositoryStateMachinePersist<>(repository);
        
        // 包裝為RedisStateMachinePersister
        return new RedisStateMachinePersister<>(persist);
    }
}
注意事項(xiàng)
  • 狀態(tài)機(jī)上下文結(jié)構(gòu):Spring State MachineStateMachineContext包含當(dāng)前狀態(tài)、歷史狀態(tài)、擴(kuò)展變量等信息,持久化時(shí)會(huì)完整存儲(chǔ)這些內(nèi)容,確保狀態(tài)恢復(fù)的準(zhǔn)確性。
  • Redis鍵設(shè)計(jì):Redis持久化默認(rèn)鍵格式為STATE_MACHINE_CONTEXT:{orderId},可通過自定義RedisStateMachineContextRepository修改鍵前綴,避免與其他業(yè)務(wù)鍵沖突。
  • 過期策略:對(duì)于Redis持久化,可設(shè)置鍵過期時(shí)間(如訂單完成后24小時(shí)),避免無效數(shù)據(jù)占用內(nèi)存。
  • 分布式鎖:在Redis持久化的分布式場(chǎng)景中,建議為triggerEvent方法添加分布式鎖(如 Redisson),防止并發(fā)狀態(tài)修改導(dǎo)致的數(shù)據(jù)不一致。
責(zé)任編輯:武曉燕 來源: 一安未來
相關(guān)推薦

2025-04-14 09:30:11

Spring狀態(tài)機(jī)訂單

2023-03-06 07:35:30

狀態(tài)機(jī)工具訂單狀態(tài)

2025-07-29 09:36:13

2024-10-10 17:46:06

2011-06-24 16:09:24

Qt 動(dòng)畫 狀態(tài)機(jī)

2021-04-29 09:31:05

前端開發(fā)技術(shù)

2010-06-18 12:38:38

UML狀態(tài)機(jī)視圖

2024-04-16 09:21:59

Spring流轉(zhuǎn)狀態(tài)數(shù)據(jù)狀態(tài)處理

2020-12-02 13:33:58

函數(shù)指針編程語言

2020-10-15 10:38:35

C語言狀態(tài)模型

2010-06-18 13:25:44

UML狀態(tài)機(jī)視圖

2013-09-03 09:57:43

JavaScript有限狀態(tài)機(jī)

2020-03-27 10:50:29

DSL 狀態(tài)機(jī)工具

2021-07-08 09:15:20

單片機(jī)編程狀態(tài)機(jī)編程語言

2025-09-26 04:11:00

Spring狀態(tài)機(jī)業(yè)務(wù)流程

2024-01-08 09:46:47

2010-07-08 13:03:31

UML狀態(tài)機(jī)圖

2011-06-29 18:36:59

Qt 動(dòng)畫 狀態(tài)機(jī)

2023-08-07 18:45:30

電商訂單訂單類型批量發(fā)貨

2010-07-12 15:00:56

UML狀態(tài)機(jī)視圖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产精品久久久久久户外露出| 日韩av电影天堂| 亚洲成年人在线| 久草青青在线观看| 成人在线观看免费| 国产伦精品一区二区三区免费迷 | 欧美一区二区福利在线| 日韩一级片一区二区| 十九岁完整版在线观看好看云免费| 久久aⅴ乱码一区二区三区| 国产亚洲精品综合一区91| 992kp免费看片| 国产日韩电影| 一区二区视频在线| 亚洲视频在线观看日本a| 亚洲欧美激情在线观看| 久久久人人人| 欧美精品久久久久久久免费观看| 亚洲色成人网站www永久四虎| 日韩一级淫片| 欧美日韩高清一区二区| 欧美 日韩 国产在线观看| caopo在线| 国产日韩欧美电影| 国产欧美日韩伦理| 精品国产va久久久久久久| 日韩和欧美一区二区三区| 久久久久日韩精品久久久男男 | 人妻无码中文字幕免费视频蜜桃| 美日韩一级片在线观看| 97超级碰在线看视频免费在线看| 91日韩中文字幕| 精品99在线| 日韩不卡在线观看| 亚洲成人激情小说| 四虎影视成人精品国库在线观看| 91搞黄在线观看| 免费成人午夜视频| 免费影视亚洲| 亚洲精品乱码久久久久久黑人| 日韩免费电影一区二区| 天天av天天翘| 不卡一区二区三区四区| 亚洲综合日韩在线| 99国产精品久久久久久久成人 | 亚洲电影第三页| 好吊色这里只有精品| 又爽又大又黄a级毛片在线视频| 91免费看片在线观看| 国产一区二区无遮挡| 国产成人无码www免费视频播放| 日韩av电影一区| 国产精品第三页| 亚洲大尺度在线观看| 天堂午夜影视日韩欧美一区二区| 69**夜色精品国产69乱| 日本午夜小视频| 在线看片一区| 97在线视频一区| 97人人澡人人爽人人模亚洲 | 国产精品久久久久9999小说| 蜜桃麻豆影像在线观看| 色综合久久99| 999精品视频在线| 国产极品久久久久久久久波多结野| 在线亚洲高清视频| 五月婷婷丁香色| 91精品国产自产观看在线 | 亚洲国产日韩在线一区| 永久免费精品视频| 亚洲第一精品电影| 久久久久久久久免费看无码| 欧美一级一片| 中文字幕精品国产| 男人av资源站| 黄色av一区| 日本中文字幕久久看| 久久久久精彩视频| 国产在线一区二区| 成人免费视频网站| 免费理论片在线观看播放老| 久久久777精品电影网影网| 少妇精品久久久久久久久久| 69av亚洲| 亚洲444eee在线观看| wwwxxx黄色片| 久久免费福利| 亚洲黄色www| 亚洲一二三精品| 国语精品一区| 国产成人自拍视频在线观看| 国产深喉视频一区二区| 风流少妇一区二区| 日韩三级电影免费观看| 里番在线观看网站| 精品电影在线观看| 色乱码一区二区三区在线| 亚洲精品一区二区三区中文字幕| 精品亚洲精品福利线在观看| 日韩在线观看免| 一本色道久久综合亚洲精品不| 国产精品jvid在线观看蜜臀| 精品国产乱码久久久久久蜜臀网站| 99久久精品99国产精品| 国产又大又长又粗又黄| 午夜久久中文| 91精品国产入口| 97超碰在线资源| 欧美 日韩 国产一区二区在线视频| 91黄色8090| 精品免费久久久| 欧美激情中文不卡| www插插插无码视频网站| 日本成人一区二区| 亚洲久久久久久久久久| 麻豆一区产品精品蜜桃的特点| 亚洲在线视频| 高清一区二区三区视频| 午夜国产福利在线| 日本精品一级二级| 亚洲中文字幕无码av| 久久久国产精品| 国产精品久久不能| 香蕉视频黄色片| 亚洲午夜在线视频| 日韩视频在线观看一区二区三区| 国产一区二区三区天码| 午夜精品在线视频| 免费看黄色一级视频| 亚洲欧美影音先锋| 日韩av在线中文| 国产中文精品久高清在线不| 91黑丝在线观看| 无码国产精品一区二区色情男同| 亚洲欧美色一区| 成年网站免费在线观看| 成人系列视频| 国产精品久久久久91| 黄色在线播放| 91精品办公室少妇高潮对白| 黑丝av在线播放| 亚洲欧洲日本一区二区三区| 国产chinese精品一区二区| 中文在线手机av| 日韩一级二级三级精品视频| 极品美妇后花庭翘臀娇吟小说| 久久国产免费看| 亚洲精品一区二区三| 福利一区二区三区视频在线观看 | 亚洲av熟女国产一区二区性色| 亚洲一区二区三区高清| 麻豆av一区二区| 成人欧美一区二区三区的电影| 日韩精品中文字幕视频在线| 日韩欧美成人一区二区三区| 91亚洲精品久久久蜜桃| 男女午夜激情视频| 国产一区二区三区四区五区传媒| 国产精品久久久久不卡| 毛片网站在线免费观看| 91精品国产色综合久久| 久久久久亚洲av片无码下载蜜桃 | 中文字幕 自拍| 日韩黄色免费网站| 永久久久久久| 亚洲乱码一区| 孩xxxx性bbbb欧美| 免费毛片在线| 欧美美女激情18p| 精品无码久久久久久久| 99久久亚洲一区二区三区青草| 日本精品免费在线观看| 国产精品片aa在线观看| 国产一区二区丝袜| 四季久久免费一区二区三区四区| 精品1区2区在线观看| 久久久久在线视频| 国产精品乱人伦中文| 女女调教被c哭捆绑喷水百合| 99在线观看免费视频精品观看| 日本在线播放不卡| www一区二区三区| 91精品国产91久久久久久吃药| 黄色av网站在线| 精品欧美久久久| 黄色片网站在线免费观看| 日韩一区在线看| 国产xxxx视频| 美女视频黄免费的久久 | 亚洲国产精品一区二区久久hs| 国产精品一品视频| 欧美日韩激情视频在线观看| 欧美疯狂party性派对| 国产91精品入口17c| 四虎4545www精品视频| 欧美老妇交乱视频| 精品999视频| 欧美va亚洲va在线观看蝴蝶网| 精品国产xxx| 一区二区三区四区不卡在线 | 日本久久一区二区| 黄色在线观看免费| 国产婷婷色一区二区三区四区| 野花视频免费在线观看| 视频在线观看国产精品| 日韩 欧美 视频| 99热精品久久| 麻豆传媒一区二区| 日韩中文字幕| 国产精品永久免费视频| 国产激情在线播放| 萌白酱国产一区二区| 久久免费看视频| 亚洲第一视频网| 国产精品久久久久久免费| 色综合久久久久| 一级片免费网址| 亚洲美女区一区| 精品人妻中文无码av在线| 99国内精品久久| 在线观看一区二区三区视频| 久久国产成人午夜av影院| 黄色免费观看视频网站| 欧美日韩岛国| 韩国黄色一级大片| 日本a级不卡| 青青成人在线| 九九久久电影| 久久艹中文字幕| 久久综合五月婷婷| 国产精品视频在线免费观看| 国内不卡的一区二区三区中文字幕| 国产成人中文字幕| 日韩欧美一区二区三区免费观看 | 国产精品欧美激情在线观看 | 精品日韩久久久| 日日欢夜夜爽一区| 一本大道熟女人妻中文字幕在线 | 欧美成人一区二免费视频软件| 亚洲美女搞黄| 国产精品久久久久久影院8一贰佰| 日韩福利影院| 日本在线电影一区二区三区| 日韩精品大片| 久久视频国产| 国产精品jizz在线观看老狼| 日韩免费在线| 国产成年人在线观看| 天天综合网网欲色| 一级黄色片播放| 欧美 日韩 国产精品免费观看| 99久久99久久精品| 欧美成人精品| 无码中文字幕色专区| 制服诱惑一区二区| 国产精品无码专区av在线播放| 久久夜色精品| 日本888xxxx| 激情偷乱视频一区二区三区| 激情成人在线观看| 国产1区2区3区精品美女| 亚洲无人区码一码二码三码| av一区二区三区在线| 最新中文字幕视频| 国产精品丝袜久久久久久app| 亚洲av无一区二区三区| 亚洲精品一卡二卡| 日韩av在线播放观看| 色综合天天综合网天天看片| 中文字幕理论片| 91精品国产美女浴室洗澡无遮挡| 亚洲av无码乱码国产精品久久 | 91嫩草免费看| 欧美日韩麻豆| 先锋在线资源一区二区三区| 亚洲精品va| 国产美女网站在线观看| 日本亚洲一区二区| 超碰人人cao| 久久久综合网站| 国产日产精品一区二区三区的介绍| 亚洲精品国产一区二区精华液 | 人人妻人人澡人人爽精品欧美一区| 欧美国产高清| 37pao成人国产永久免费视频| 麻豆成人91精品二区三区| 最好看的中文字幕| 久久精品日产第一区二区三区高清版| 青青青手机在线视频| 亚洲成人av一区二区| 日韩xxx视频| 精品国产欧美一区二区| 成人在线观看一区| 国内精品久久久| 欧美高清影院| 久久精品一二三区| 亚洲色图国产| 国产一线二线三线在线观看| 国产99久久久国产精品潘金| 蜜桃久久精品成人无码av| 一区二区三区久久久| 日韩欧美一级大片| 亚洲精品黄网在线观看| 国产剧情在线| 国产成人精品在线观看| 99热这里只有精品首页| 日日夜夜精品网站| 99精品国产在热久久下载| 日本国产一级片| 国产三级三级三级精品8ⅰ区| 日韩av电影网| 欧美成人一级视频| 思思99re6国产在线播放| 日本精品免费观看| 国产成人澳门| 第九区2中文字幕| 久久精品国产亚洲高清剧情介绍 | 国产999在线观看| caoporn成人免费视频在线| 一区二区三区欧美在线| 日一区二区三区| 久久丫精品国产亚洲av不卡 | 波多野结衣电车| 亚洲激情自拍图| 欧美理论片在线播放| 91免费精品视频| 日韩欧美中字| 日本成年人网址| www.久久久久久久久| 精品少妇爆乳无码av无码专区| 欧美丰满一区二区免费视频| 在线免费观看黄色av| 国产www精品| 你懂的视频欧美| 欧美两根一起进3p做受视频| 成人18视频在线播放| 久草免费新视频| 日韩欧美一二三| 三级网站视频在在线播放| 亚洲www在线观看| 亚洲高清影视| 中文字幕在线视频一区二区| 亚洲色大成网站www久久九九| 91福利在线观看视频| 尤物yw午夜国产精品视频明星| 99re66热这里只有精品4| 欧美一级片免费观看| 日韩成人伦理电影在线观看| 久久成人激情视频| 欧美在线观看一二区| 成人精品一区二区三区免费 | 成人高潮片免费视频| 欧美剧在线观看| 极品尤物一区| 99爱视频在线| 国产日产精品一区| 136福利视频导航| 欧美成人精品不卡视频在线观看| 日本少妇精品亚洲第一区| 日本免费黄色小视频| 成人一级视频在线观看| 亚洲国产精一区二区三区性色| 亚洲精品第一页| 成人小电影网站| 亚洲一区综合| 国产九九视频一区二区三区| 国产一级aa大片毛片| 国产视频欧美视频| 成人全视频免费观看在线看| 男女爱爱视频网站| www.日韩av| 亚洲在线视频播放| 欧美国产视频日韩| 亚洲精品国产动漫| 天堂在线中文在线| 亚洲国产成人av| 成人资源www网在线最新版| 亚洲一区二区三区视频| 亚洲精品免费观看| 国产在线免费av| 欧美不卡一区二区三区| 中国字幕a在线看韩国电影| 亚洲草草视频| www.日韩精品| 国产又大又粗又硬| 91爱视频在线| 天天做天天爱天天综合网2021| 美女扒开腿免费视频| 欧美三级中文字幕| 8x8ⅹ拨牐拨牐拨牐在线观看| 午夜精品福利一区二区| 丁香五精品蜜臀久久久久99网站| 怡红院av久久久久久久| 久久97久久97精品免视看| 久久97视频| av在线天堂网| 欧美片网站yy| 国产精品伦理| 成人在线播放网址| 国产精品天天看|