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

SpringBoot與GeoHash整合,實現騎手的實時就近派單功能

開發 前端
通過使用GeoHash結合Redis的地理空間功能,能夠實時管理和查詢騎手的位置信息,并根據訂單量和評分等因素動態分配最近的騎手來完成配送任務。

通過使用GeoHash結合Redis的地理空間功能,能夠實時管理和查詢騎手的位置信息,并根據訂單量和評分等因素動態分配最近的騎手來完成配送任務。

我們為什么使用GeoHash?

  • 空間索引: GeoHash是一種將地理坐標(經緯度)編碼為字符串的算法,可以用于空間索引。 這使得我們可以方便地在Redis這樣的內存數據庫中存儲和檢索地理位置數據。
  • 快速篩選附近騎手: 通過GeoHash前綴匹配策略,可以在較短的時間內篩選出一定范圍內的騎手。 Redis提供了豐富的地理空間命令(如 GEOADD, GEORADIUS),可以直接利用這些命令來實現高效的地理空間查詢。
  • 減少計算開銷: 相比于傳統的距離計算方法(如Haversine公式),GeoHash可以通過字符串比較來快速確定位置關系。 這減少了復雜的數學運算,提高了查詢性能。
  • 支持多級精度: GeoHash支持多種精度級別,可以根據需求調整搜索范圍。 例如,較長的GeoHash字符串表示更精確的位置,而較短的字符串則覆蓋更大的區域。這為我們提供了靈活性,可以根據不同的應用場景調整查詢精度。

實現這個功能的關鍵點有哪些?

  • 高效的位置存儲和查詢
  • 動態權重調整: 根據騎手當前訂單量、歷史好評率計算派單優先級
  • 實時更新騎手位置,實時位置數據對于準確派單至關重要。

代碼實操

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/><!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>delivery-system</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>delivery-system</name>
    <description>Demo project for Spring Boot and GeoHash integration</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.properties

server.port=8080
spring.redis.host=localhost
spring.redis.port=6379

Redis Config

package com.example.deliverysystem.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
publicclass RedisConfig {

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        return template;
    }
}

騎手

package com.example.deliverysystem.model;

import lombok.Data;

@Data
publicclass Rider {
    private String id;          // 騎手ID
    privatedouble latitude;    // 緯度
    privatedouble longitude;   // 經度
    privateint orderCount;     // 當前訂單數量
    privatedouble rating;      // 歷史平均評分(0-5)
}

Repository

package com.example.deliverysystem.repository;

import com.example.deliverysystem.model.Rider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Metrics;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.GeoOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
publicclass RiderRepository {

    privatefinal GeoOperations<String, String> geoOps;

    @Autowired
    public RiderRepository(RedisTemplate<String, String> redisTemplate) {
        this.geoOps = redisTemplate.opsForGeo();
    }

    /**
     * 添加騎手到Redis中的地理位置集合
     *
     * @param key   Redis鍵名
     * @param rider 騎手對象
     */
    public void addRider(String key, Rider rider) {
        Point point = new Point(rider.getLongitude(), rider.getLatitude());
        geoOps.add(key, point, rider.getId());
    }

    /**
     * 查找指定半徑范圍內的騎手
     *
     * @param key            Redis鍵名
     * @param referencePoint 參考點(經緯度)
     * @param distance       半徑距離
     * @return 附近的騎手列表
     */
    public List<RedisGeoCommands.GeoResult<RedisGeoCommands.GeoLocation<String>>> findNearbyRiders(String key, Point referencePoint, Distance distance) {
        Circle circle = new Circle(referencePoint, distance);
        return geoOps.radius(key, circle);
    }

    /**
     * 獲取騎手詳情
     *
     * @param results 附近騎手的結果列表
     * @return 騎手詳情映射表
     */
    public Map<Object, Object> getRiderDetails(List<RedisGeoCommands.GeoResult<RedisGeoCommands.GeoLocation<String>>> results) {
        // 這里可以進一步獲取每個騎手的詳細信息,例如從數據庫中讀取。
        // 為了簡化示例,我們僅返回騎手ID列表。
        return results.stream()
                     .collect(java.util.stream.Collectors.toMap(
                         result -> result.getContent().getName(),
                         result -> null));
    }
}

Service

package com.example.deliverysystem.service;

import com.example.deliverysystem.model.Rider;
import com.example.deliverysystem.repository.RiderRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.*;
import org.springframework.stereotype.Service;

import java.util.Comparator;
import java.util.List;
import java.util.Map;

@Service
publicclass DeliveryService {

    privatefinal RiderRepository riderRepository;

    @Autowired
    public DeliveryService(RiderRepository riderRepository) {
        this.riderRepository = riderRepository;
    }

    /**
     * 添加騎手到系統
     *
     * @param key   Redis鍵名
     * @param rider 騎手對象
     */
    public void addRider(String key, Rider rider) {
        riderRepository.addRider(key, rider);
    }

    /**
     * 查找最近的騎手
     *
     * @param key                  Redis鍵名
     * @param latitude             目標緯度
     * @param longitude            目標經度
     * @param radiusInKilometers   查詢半徑(公里)
     * @return 最近的騎手列表,按優先級排序
     */
    public List<Rider> findNearestRiders(String key, double latitude, double longitude, double radiusInKilometers) {
        Point referencePoint = new Point(longitude, latitude);
        Distance radius = new Distance(radiusInKilometers, Metrics.KILOMETERS);

        List<RedisGeoCommands.GeoResult<RedisGeoCommands.GeoLocation<String>>> nearbyRiders =
                riderRepository.findNearbyRiders(key, referencePoint, radius);

        Map<Object, Object> riderDetails = riderRepository.getRiderDetails(nearbyRiders);

        // 假設這里可以根據騎手ID獲取其他屬性。
        // 實際場景中,這些信息可能來自數據庫或其他數據源。
        return nearbyRiders.stream()
                           .map(result -> {
                               Rider rider = new Rider();
                               rider.setId(result.getContent().getName());
                               // 根據實際需求獲取其他屬性。
                               return rider;
                           })
                           .sorted(Comparator.comparingDouble(this::calculatePriority))
                           .toList();
    }

    /**
     * 計算騎手的派單優先級
     * 
     * @param rider 騎手對象
     * @return 優先級值(數值越大優先級越高)
     */
    private double calculatePriority(Rider rider) {
        // 簡單的優先級計算方法:較低的訂單量和較高的評分意味著更高的優先級。
        // 具體公式可以根據實際業務需求調整。
        return -(rider.getOrderCount() * 1.0 / 5 + rider.getRating());
    }
}

Controller

package com.example.deliverysystem.controller;

import com.example.deliverysystem.model.Rider;
import com.example.deliverysystem.service.DeliveryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/delivery")
publicclass DeliveryController {

    privatefinal DeliveryService deliveryService;

    @Autowired
    public DeliveryController(DeliveryService deliveryService) {
        this.deliveryService = deliveryService;
    }

    /**
     * 添加新的騎手
     *
     * @param rider 新的騎手對象
     */
    @PostMapping("/riders")
    public void addRider(@RequestBody Rider rider) {
        deliveryService.addRider("riders", rider);
    }

    /**
     * 查找最近的騎手
     *
     * @param latitude 目標緯度
     * @param longitude 目標經度
     * @param radiusInKilometers 查詢半徑(公里,默認5公里)
     * @return 最近的騎手列表
     */
    @GetMapping("/nearest-rider/{latitude}/{longitude}")
    public List<Rider> findNearestRiders(@PathVariable double latitude,
                                         @PathVariable double longitude,
                                         @RequestParam(defaultValue = "5") double radiusInKilometers) {
        return deliveryService.findNearestRiders("riders", latitude, longitude, radiusInKilometers);
    }
}

Application

package com.example.deliverysystem;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DeliverySystemApplication {

    public static void main(String[] args) {
        SpringApplication.run(DeliverySystemApplication.class, args);
    }
}

測試

添加第一個騎手

curl -X POST http://localhost:8080/api/delivery/riders \
-H "Content-Type: application/json" \
-d '{"id": "rider1", "latitude": 39.9042, "longitude": 116.4074, "orderCount": 2, "rating": 4.5}'

Respons

空響應(HTTP狀態碼200)

添加第二個騎手

curl -X POST http://localhost:8080/api/delivery/riders \
-H "Content-Type: application/json" \
-d '{"id": "rider2", "latitude": 39.9087, "longitude": 116.3975, "orderCount": 1, "rating": 4.8}'

Respons

空響應(HTTP狀態碼200)

查詢最近的騎手

  • 查詢位置為 (39.9063, 116.4039) 附近5公里范圍內的騎手
curl -X GET "http://localhost:8080/api/delivery/nearest-rider/39.9063/116.4039"

Respons

[
    {
        "id": "rider1",
        "latitude": 39.9042,
        "longitude": 116.4074,
        "orderCount": 2,
        "rating": 4.5
    },
    {
        "id": "rider2",
        "latitude": 39.9087,
        "longitude": 116.3975,
        "orderCount": 1,
        "rating": 4.8
    }
]


責任編輯:武曉燕 來源: Java知識日歷
相關推薦

2025-09-29 07:39:33

2025-09-26 08:46:30

2025-07-10 08:46:21

ConnectSpringBoot數據

2025-09-08 09:14:31

SpringQuartz自動識別

2025-04-29 08:36:28

SpringCanal數據庫

2025-03-11 09:28:34

2025-08-08 02:11:00

SpringFunctions流處理

2025-02-14 09:07:35

2025-07-22 03:15:00

SpringFlight零拷貝

2025-06-19 02:11:00

2025-04-01 08:38:41

2025-03-19 08:36:55

2025-07-31 08:58:50

2025-03-26 08:43:17

2025-03-17 08:39:08

SpringApache數據

2025-04-23 08:50:00

SpringBootCurator分布式鎖

2025-03-04 08:40:28

2025-06-16 04:00:00

Spring彈幕技術

2025-06-17 08:39:43

2025-02-28 08:40:28

ZooKeeperSpringBoot計費系統
點贊
收藏

51CTO技術棧公眾號

www.超碰97.com| 国产一区香蕉久久| 国产人成视频在线观看| 91在线三级| 久久国产精品72免费观看| 色午夜这里只有精品| 久久婷婷国产91天堂综合精品| 你懂的国产视频| 欧美激情极品| 欧美综合天天夜夜久久| 亚洲精品不卡| 国产成人精品无码高潮| 亚洲一区不卡| 色综合亚洲精品激情狠狠| 免费人成视频在线播放| 超碰97免费在线| 久久午夜免费电影| 国产色婷婷国产综合在线理论片a| 岛国av免费观看| 中文字幕不卡三区视频| 国产精品电影一区二区| 国产精品亚发布| 一区二区成人免费视频| 日韩欧美影院| 91精品国产91久久久久久最新毛片 | 999精品在线| 日韩欧美国产一区二区三区| 亚洲熟妇无码另类久久久| av在线免费观看网| 福利一区二区在线观看| 国产精品久久久久久久久久尿| 50一60岁老妇女毛片| 成人免费一区| 亚洲国产你懂的| 亚洲午夜精品福利| 丰满熟妇人妻中文字幕| 日本中文字幕一区二区视频| 欧美激情视频一区二区三区不卡| 国产精品区在线| 香蕉久久aⅴ一区二区三区| 久久久久99精品国产片| 成人免费在线看片| 在线观看中文字幕2021| 午夜影院日韩| 欧美日韩不卡合集视频| 欧美18—19性高清hd4k| 国产伦精品一区二区三区免费优势| 亚洲成a人片综合在线| 亚洲欧美日韩国产成人综合一二三区 | 日韩不卡中文字幕| 中文字幕1234区| 国模冰冰炮一区二区| 亚洲一区二区影院| 一本一道久久久a久久久精品91| 一区不卡在线观看| 久久久久网站| 国内精品小视频在线观看| 糖心vlog免费在线观看| 伦理一区二区三区| 日韩亚洲欧美高清| 天堂av在线网站| 另类激情视频| 欧美性xxxxx极品| 国产成人无码a区在线观看视频| 日本电影一区二区在线观看| 国产成人精品免费看| 国产美女91呻吟求| 中文字幕第2页| 蜜桃久久久久久久| 国产精品com| 天堂网一区二区| 亚洲伊人网站| 欧美亚洲激情在线| 国产视频91在线| 亚洲一级特黄| 国内成人精品视频| 日本中文字幕免费观看| 影音先锋中文字幕一区| 久久久久久网址| 国产极品美女高潮无套嗷嗷叫酒店| 免费视频国产一区| 亚洲欧洲美洲在线综合| 国产美女精品久久| 国产探花一区二区| 一区二区在线视频| 国产黄色大片免费看| sdde在线播放一区二区| 国产一区二区日韩精品欧美精品| 人妻精油按摩bd高清中文字幕| 阿v视频在线观看| 五月激情综合婷婷| 成人在线看视频| 另类专区亚洲| 欧美片网站yy| 女王人厕视频2ⅴk| 日韩欧美天堂| 国产一区二区三区视频免费| 亚洲欧美另类日本| 欧美fxxxxxx另类| 美女撒尿一区二区三区| 日本在线小视频| 日韩精品一区第一页| 国产精品美女午夜av| 91禁在线观看| 成人精品小蝌蚪| 欧美日韩国产综合视频在线| 午夜伦理在线| 亚洲国产日日夜夜| 青青青青草视频| 成人在线爆射| 欧美成人精精品一区二区频| www.黄色在线| 怡红院精品视频在线观看极品| 久久网福利资源网站| 可以免费看的av毛片| 国产一级精品在线| 欧洲精品国产| 白浆视频在线观看| 欧美精品久久久久久久久老牛影院 | 国产精品成人免费一区久久羞羞| 粉嫩av国产一区二区三区| 国产丝袜精品第一页| 懂色av懂色av粉嫩av| 日韩va欧美va亚洲va久久| 99porn视频在线| 调教视频免费在线观看| 欧美午夜影院在线视频| 亚洲妇女无套内射精| 99精品全国免费观看视频软件| 精品精品国产国产自在线| 国产精品免费精品一区| 大胆亚洲人体视频| 国产精品99久久久久久大便| 国产一区一一区高清不卡| 日韩精品免费综合视频在线播放| 国产精品无码午夜福利| 精品91在线| 97人人做人人人难人人做| 国产网站在线免费观看| 欧美色涩在线第一页| 受虐m奴xxx在线观看| 激情欧美日韩| 国产高清在线一区二区| 后进极品白嫩翘臀在线播放| 欧美成人伊人久久综合网| 老湿机69福利| 狠狠色狠狠色综合| 国产麻豆电影在线观看| 高清欧美日韩| 国产一区二区三区中文| 黄色av网站免费| 中文字幕不卡在线| 天堂一区在线观看| 欧美综合视频| 国产美女精品视频免费观看| 成年在线观看免费人视频| 91国产免费观看| 91成人在线免费视频| 免费观看在线综合色| 亚洲精品8mav| 高清精品久久| 久久人人看视频| 熟妇高潮一区二区三区| 欧美丝袜一区二区三区| 色欲AV无码精品一区二区久久| 欧美另类专区| 国产乱码精品一区二区三区卡| 第一视频专区在线| 欧洲另类一二三四区| 精品国产aaa| 狠狠色综合日日| 日韩国产小视频| 婷婷综合福利| 国产欧洲精品视频| 羞羞电影在线观看www| 亚洲国产精品va在线看黑人动漫| 男人在线观看视频| 国产成人精品三级麻豆| 国产成人一区二区三区别| 欧美激情影院| 国产免费一区视频观看免费| 国产黄色在线免费观看| 精品国精品自拍自在线| 最新中文字幕一区| 欧美国产97人人爽人人喊| 亚洲色图欧美自拍| 亚洲乱码视频| 亚洲视频sss| 日韩在线观看一区二区三区| 2019av中文字幕| 亚洲成a人v欧美综合天堂麻豆| 色噜噜狠狠成人中文综合 | 可以免费在线观看的av| 国内精品伊人久久久久av影院| 欧美成ee人免费视频| 日韩五码电影| 久久免费精品视频| 日本中文字幕在线播放| 亚洲国产一区二区三区在线观看| 久久久综合久久| 国产欧美精品国产国产专区 | 欧美久久一区二区| 国产乡下妇女做爰毛片| 国产精品久久久久久久久晋中 | 日韩精品中文字幕有码专区| 中文字幕欧美色图| 一区二区免费在线播放| 成年人看的免费视频| 99久久精品费精品国产一区二区| 777精品久无码人妻蜜桃| 精品久久影院| 精品卡一卡二| 免费精品一区二区三区在线观看| 欧美xxxx14xxxxx性爽| 国产原创av在线| 日韩精品最新网址| 中文字幕日韩国产| 图片区小说区区亚洲影院| 老熟妇高潮一区二区三区| 久久久久国产精品麻豆ai换脸 | 青草全福视在线| 国产精品探花在线观看| 国产一区在线观| 日韩午夜视频在线| 国产精品视频网址| a一区二区三区| 久久免费视频网| 天堂av中文在线| 久久久精品影院| 日本亚洲精品| 国产一区二区三区在线免费观看| 国产精品久久综合青草亚洲AV| 中文字幕亚洲区| 小早川怜子久久精品中文字幕| 日韩精品电影在线| 亚洲熟妇av一区二区三区漫画| 久久不见久久见中文字幕免费| 青青久久aⅴ北条麻妃| 国产黄色大片在线观看| 精品国模在线视频| 男人和女人做事情在线视频网站免费观看| 7777精品伊人久久久大香线蕉| 免费麻豆国产一区二区三区四区| 国产精品一区不卡| 三级黄色片免费看| 国产一区在线观看视频| www.精品在线| 久久99精品国产麻豆婷婷洗澡| 波多野结衣av一区二区全免费观看| 欧美三级午夜理伦三级小说| 91精品国产综合久久香蕉最新版 | 人九九综合九九宗合| 成年人国产在线观看| 高清亚洲成在人网站天堂| av蜜臀在线| 91高潮在线观看| 日韩a**中文字幕| 国产噜噜噜噜噜久久久久久久久| 后进极品白嫩翘臀在线播放| 欧美激情一级二级| av资源新版天堂在线| 51ⅴ精品国产91久久久久久| 欧美男女交配| 国产精品视频精品| 精品久久在线| 亚洲综合大片69999| 国产精品传媒| 久久综合九色综合久99| 国产在视频线精品视频www666| 国产精品久久波多野结衣| 精品欧美午夜寂寞影院| 狠狠久久综合婷婷不卡| 蜜桃成人av| 亚洲自拍三区| 亚洲一级电影| 日本a√在线观看| 国产成+人+日韩+欧美+亚洲| 亚洲国产精品无码久久久久高潮 | 欧美日韩亚洲综合| 国产又黄又大又粗的视频| 日韩精品一区二区三区在线播放 | 欧美极品视频在线观看| 性感美女久久精品| 凹凸精品一区二区三区| 欧美一级片在线观看| 天堂√在线中文官网在线| 日韩久久精品成人| 91xxx在线观看| 欧美日韩第一视频| 日韩高清在线| 国产成人看片| 日韩国产一区二区三区| 分分操这里只有精品| 日韩二区在线观看| 国产精品嫩草69影院| 久久久精品国产免费观看同学| 亚洲中文字幕无码av| 国产精品色哟哟| 精品97人妻无码中文永久在线| 一区二区视频免费在线观看| 亚洲综合图片网| 精品人在线二区三区| 91网页在线观看| 国内揄拍国内精品少妇国语| 91精品一久久香蕉国产线看观看| 国产日韩在线看| 啪啪国产精品| 久久久久久久久久久久久国产| 99久久久久久中文字幕一区| 北条麻妃在线视频观看| 国产揄拍国内精品对白| 无码一区二区三区在线| 亚洲综合精品自拍| 在线观看免费观看在线| 亚洲欧美另类自拍| 美女尤物在线视频| 成人免费在线视频网站| 欧美一区二区三| 久久成人免费观看| 高清av一区二区| 成人免费黄色小视频| 欧美日韩的一区二区| 国产中文字幕在线观看| 97成人精品区在线播放| 国产精品一区二区三区www| 五月天色一区| 日韩国产高清在线| 亚洲色图14p| 亚洲成a人片综合在线| www.色播.com| 久久综合电影一区| 男人亚洲天堂| 亚洲精品在线观看免费| 日精品一区二区| 三上悠亚ssⅰn939无码播放| 精品久久久久国产| 天天摸天天碰天天爽天天弄| 久久久久久久久电影| 成人直播在线观看| 人人妻人人澡人人爽欧美一区| 免费日韩av| 在线 丝袜 欧美 日韩 制服| 精品久久久久久久久久久久久| 黄瓜视频在线免费观看| 日韩视频免费观看高清完整版| 手机看片1024国产| 欧美精品国产精品日韩精品| 国产精品欧美一区二区三区不卡| 久久久一本精品99久久精品| 999亚洲国产精| 成人免费无码大片a毛片| 性做久久久久久| 欧洲伦理片一区 二区 三区| 亚洲97在线观看| 日韩高清在线免费观看| 日韩久久一级片| 国产色综合一区| 亚洲一级片免费看| 久久av资源网站| 成人av综合网| 日本韩国欧美在线观看| av亚洲精华国产精华精华| 国产成人在线观看网站| 亚洲精品中文字幕av| 天天综合网站| 国产又爽又黄ai换脸| 国产精品一区久久久久| 国产真实的和子乱拍在线观看| 欧美日本视频在线| 老司机午夜在线视频| 91精品国产一区二区三区动漫 | yellow中文字幕久久| 日韩成人免费av| 99久久99久久精品| 91欧美一区二区| 一区二区视频免费观看| 欧美刺激性大交免费视频| 欧美日韩看看2015永久免费| 一本久道中文无码字幕av| 中文字幕中文字幕一区二区| 丁香花免费高清完整在线播放| 久久精品视频一| 美国一区二区| 国产福利影院在线观看| 一区二区三区在线视频免费| 性感美女福利视频| 国产一区私人高清影院| 黄色成人在线网址| xxx在线播放| 日韩一级黄色大片| 综合在线影院| 8x8ⅹ国产精品一区二区二区| 国产老妇另类xxxxx| 日韩精品一区二区亚洲av| www.xxxx欧美| 性欧美xxxx免费岛国不卡电影| 国产综合中文字幕| 欧美韩国日本一区| 色婷婷中文字幕| 成人淫片在线看|