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

麻豆成人免费电影| 精品久久一区| 欧美日韩免费区域视频在线观看| 国内精品二区| 亚洲一级在线播放| 亚洲视频一区| 中日韩美女免费视频网站在线观看 | 你懂的成人av| 欧美精品一区二区三区蜜桃视频 | 日本成人免费视频| 欧美午夜在线播放| 91极品美女在线| 强开小嫩苞一区二区三区网站| 污视频在线免费观看| 麻豆精品视频在线观看视频| 久久男人的天堂| 战狼4完整免费观看在线播放版| 大伊香蕉精品在线品播放| 欧美性一级生活| 黄色一级视频在线播放| 国内精品久久久久久野外| 91麻豆国产自产在线观看| 91精品国产91久久久久青草| 免费在线观看av的网站| 国产欧美日韩一级| 久久99青青精品免费观看| 福利视频第一页| 亚洲理论电影片| 亚洲国产欧美一区二区三区同亚洲| 欧美性大战xxxxx久久久| 成人免费在线视频网址| 国产黄网在线观看| 国产日韩欧美一区在线| 欧美区在线播放| 亚洲视频重口味| 精品一区电影| 亚洲欧洲xxxx| 成人精品在线观看视频| 国产香蕉精品| 亚洲电影中文字幕| 麻豆tv在线观看| 久久视频免费| 91精品国产综合久久福利| 99re精彩视频| 久久天堂影院| 欧美日韩卡一卡二| 中日韩av在线播放| 日韩一区二区三免费高清在线观看| 色综合中文字幕| 欧美日韩激情视频在线观看| 91吃瓜在线观看| 亚洲mv在线观看| 嫩草影院中文字幕| 变态调教一区二区三区| 亚洲国产日韩在线一区模特| 国产精品久久久久久久久电影网| 亚洲性图自拍| 亚洲一本大道在线| av无码久久久久久不卡网站| 人人澡人人添人人爽一区二区| 一区二区三区四区在线播放| 国产精品久久国产| 91超碰在线| 日韩欧美国产中文字幕| 亚洲天堂av线| 成人亚洲精品| 欧美电影精品一区二区| 男女性杂交内射妇女bbwxz| 国产精品极品| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品国产91| 久久美女视频| 久久99久久99精品免观看粉嫩| 国产第一页第二页| 久久免费国产| 国产精品一区二区在线| 91黄色在线视频| 国产成人av电影| 久久九九视频| 中文字幕在线观看日本| 樱花影视一区二区| 777精品久无码人妻蜜桃| free欧美| 日韩一区二区精品在线观看| 欧美xxxxx少妇| 精品久久久久中文字幕小说| 欧美成人在线免费视频| 日本三级小视频| 麻豆精品视频在线观看免费| 成人av资源网| 国产日本在线视频| 亚洲久草在线视频| 六月丁香婷婷在线| 亚洲人成网站在线在线观看| 亚洲国产成人久久综合| 免费黄色在线网址| 亚洲大胆视频| 国产精品一区二区性色av| 风流老熟女一区二区三区| 欧美国产综合色视频| 日本福利视频在线观看| 欧美大片1688| 精品国产91久久久久久久妲己| 女女互磨互喷水高潮les呻吟 | 99re视频精品| 中文字幕人成一区| 婷婷电影在线观看| 日韩欧美国产系列| 中文字幕第二区| 亚洲伦理一区| 91视频-88av| 国产人成在线观看| 天天色图综合网| 亚洲视频在线不卡| 日韩免费看片| 日韩av大片在线| 亚洲精品国偷拍自产在线观看蜜桃| 国产亚洲成年网址在线观看| 久久精品xxx| 亚洲人成网站在线在线观看| 亚洲人成电影在线播放| 国产无精乱码一区二区三区| 激情成人综合网| 日韩av影视| 亚洲欧美se| 亚洲高清不卡av| 青娱乐在线视频免费观看| 美女诱惑一区二区| 日韩欧美精品久久| 福利影院在线看| 日韩精品资源二区在线| 91精品国产闺蜜国产在线闺蜜| 蜜臀久久99精品久久久画质超高清| 欧美成熟毛茸茸复古| av有码在线观看| 精品久久免费看| 青春草免费视频| 国产自产高清不卡| 综合久久国产| 四虎国产精品永久在线国在线| 中文字幕日韩电影| 中文字幕在线观看视频一区| 欧美极品xxx| 男女污污的视频| 欧洲三级视频| 国产精品女主播| 69久久夜色| 欧美久久久久久久久| 精品少妇一区二区三区密爱| 久久精品理论片| 中文字幕久久综合| 欧一区二区三区| 色综合导航网站| 蜜桃91麻豆精品一二三区| 一区二区三区国产精品| 超碰caoprom| 国产亚洲综合精品| 欧美在线播放一区| 成人在线免费av| 日韩一二三在线视频播| 中文文字幕一区二区三三| 国产精品无遮挡| 视频免费1区二区三区 | 欧美乱人伦中文字幕在线| 成 人 免费 黄 色| 丰满岳妇乱一区二区三区| 丰满大乳奶做爰ⅹxx视频| 老牛影视一区二区三区| 亚洲一区综合| 视频一区日韩| 97在线观看免费高清| 国产中文字幕在线| 欧美一区二区福利在线| 精品成人av一区二区在线播放| 久久免费视频一区| 中文字幕一区久久| 在线欧美三区| 日韩精品成人一区二区在线观看| 亚洲男人在线| 97在线视频免费| av资源种子在线观看| 欧美一区二区在线免费观看| 自拍偷拍欧美亚洲| 国产精品午夜在线观看| 国产乱淫av麻豆国产免费| 可以看av的网站久久看| 99精品视频网站| 一个色免费成人影院| 成人两性免费视频| 校园春色亚洲| 久久福利网址导航| 久蕉在线视频| 欧美成人精品3d动漫h| 精产国品一区二区| 亚洲一区成人在线| 亚洲女同二女同志奶水| 成人av手机在线观看| 午夜两性免费视频| 99av国产精品欲麻豆| 国产精品h视频| 一本色道久久综合亚洲精品酒店| 亚洲一区精品电影| 日本国产欧美| 97香蕉久久超级碰碰高清版| 欧美激情午夜| 亚洲欧美日本精品| 亚洲第一天堂网| 欧美日韩一卡二卡三卡| 九九热精品视频在线| 一区二区高清免费观看影视大全| 波多野结衣一二三四区| 99精品一区二区三区| 精产国品一二三区| 日本欧美大码aⅴ在线播放| 青青草成人免费在线视频| 自由日本语亚洲人高潮| 一区二区三区四区欧美日韩| 亚洲永久精品唐人导航网址| 不卡视频一区二区| 成人国产精品一区二区网站| 国产精品久久久久av| 狼人综合视频| 午夜精品一区二区三区在线播放 | 精品久久久久久久久久久aⅴ| 国产美女精品久久久| 国产日本亚洲| 国产日产久久高清欧美一区| 69堂精品视频在线播放| 日本最新高清不卡中文字幕| 亚洲女同志freevdieo| 欧美精品九九久久| 欧美xxxx视频| 欧美日韩成人在线观看| 国产欧美黑人| 久久久国产成人精品| 中文字幕在线观看日本| 中文字幕亚洲综合久久筱田步美| 国产免费a∨片在线观看不卡| 日韩av在线播放资源| 日本黄色三级视频| 日韩av影视综合网| 日韩电影免费| 亚洲人成电影在线播放| 黄色毛片在线观看| 中文字幕9999| 毛片激情在线观看| 美日韩精品免费观看视频| а√天堂官网中文在线| 欧美黑人国产人伦爽爽爽| 少女频道在线观看免费播放电视剧| 欧美插天视频在线播放| 日本一本在线免费福利| 欧美黑人性生活视频| 91在线超碰| 日韩美女av在线免费观看| 天天免费亚洲黑人免费| 国产精品偷伦一区二区| 亚洲伊人伊成久久人综合网| 亚洲aⅴ日韩av电影在线观看| 国产精品一区免费在线 | 黄色小视频免费网站| 国产在线一区观看| 岛国av免费观看| 久久在线观看免费| 日韩中文字幕有码| 国产精品久久久久久户外露出| 国产午夜精品理论片| 亚洲综合精品自拍| 制服.丝袜.亚洲.中文.综合懂色| 在线观看亚洲一区| 国产99对白在线播放| 日韩国产精品一区| 欧美精品hd| 91精品国产91久久久久久不卡 | 在线精品观看国产| 99热这里是精品| 亚洲国产三级网| 成年人视频在线看| 欧美成人在线网站| 欧美三级网站| 91久久在线观看| 久久动漫网址| 一本久久a久久精品vr综合| 国产一区二区中文| 日本爱爱免费视频| 成人午夜私人影院| 日韩精品电影一区二区三区| 亚洲自拍偷拍av| 天天天天天天天干| 亚洲电影av在线| 69久久久久| 欧美亚洲国产日韩2020| 国产精品毛片无码| 日本午夜精品电影| 黄色亚洲精品| 国产一伦一伦一伦| 播五月开心婷婷综合| 一本一本久久a久久| 欧美日韩中文在线| www.日韩在线观看| 丝袜亚洲欧美日韩综合| 超碰在线资源| 亚洲自拍小视频免费观看| 美女亚洲一区| 欧美一级欧美一级| 寂寞少妇一区二区三区| 久久久无码人妻精品一区| 一区二区不卡在线播放| 这里只有精品6| 亚洲精品视频网上网址在线观看| 午夜dj在线观看高清视频完整版 | 色av中文字幕一区| av资源亚洲| 国产日韩欧美亚洲一区| 国产韩日影视精品| 一区二区三区韩国| 久久免费午夜影院| 久久久久久久久久影院| 欧美成人bangbros| 26uuu亚洲电影在线观看| 国产在线久久久| 欧美一区二区三区高清视频| 99爱视频在线| 91亚洲永久精品| 国产精品自拍视频一区| 欧美一级片在线| 美女羞羞视频在线观看| 国产日韩换脸av一区在线观看| 精品国产美女| 精品www久久久久奶水| 99国内精品久久| 99热国产在线观看| 欧美精品一区二区三区在线| 新版中文在线官网| 97久久精品午夜一区二区| 久久久久久久久久久久久久| 日韩中文字幕a| 国产精品另类一区| 91成年人视频| 久久中文字幕在线| 精品国产亚洲一区二区在线观看 | 久久久夜夜夜| 美女爆乳18禁www久久久久久| 欧美日韩在线另类| 你懂的免费在线观看| 欧美在线观看视频| 伊人精品一区| 国产成人手机视频| 国产精品久久久久久久久动漫| 国产精品九九九九| 久久久精品久久| 亚洲午夜免费| 欧美精品一区二区三区三州| 99久久精品免费看| 国产精品久久久久久人| 国产亚洲欧美日韩精品| av成人免费| 国产精品av免费| 成人亚洲精品久久久久软件| 韩国av中文字幕| 一区二区三区四区视频| 欧美激情福利| 香蕉视频免费版| 99国产精品一区| 中文字幕免费视频观看| 免费av在线一区| 欧美精品国产白浆久久久久| 37pao成人国产永久免费视频| 亚洲国产精品v| 成 人 黄 色 片 在线播放| 国产91av在线| 日韩av自拍| 18禁一区二区三区| 色成年激情久久综合| 黄色av网站在线播放| 国产精品视频免费一区| 爽好多水快深点欧美视频| 国产激情无码一区二区三区| 精品国产乱码久久| **欧美日韩在线观看| 8x8x华人在线| 久久综合给合久久狠狠狠97色69| 中文字幕久久久久| 久久久久久久久久av| 国产免费久久| 日韩精品国产一区| 在线观看国产精品网站| 久久一卡二卡| 五月天色一区| 成人av高清在线| 中文字幕日本人妻久久久免费 | 国产激情视频一区二区在线观看 | 亚洲精品大尺度| 久久国内精品| 阿v天堂2017| 亚洲欧美日韩国产另类专区| 日本ー区在线视频| 成人女人免费毛片| 久久综合综合久久综合| 国产成人无码av|