From a6d543bcef73e2a78d8da9b065e241643c166aa8 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 13 二月 2026 11:40:29 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java |   70 ++++++++++++++++++++++++-----------
 1 files changed, 48 insertions(+), 22 deletions(-)

diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
index fd2e6ad..5fc94c8 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
@@ -2,22 +2,26 @@
 
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
 import org.springframework.data.domain.Sort;
+import org.springframework.data.geo.GeoResults;
 import org.springframework.data.geo.Point;
 import org.springframework.data.geo.Distance;
 import org.springframework.data.geo.Metrics;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.NearQuery;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class VehiclePositionService {
-    
+
     @Resource
     private MongoTemplate mongoTemplate;
-    
+
     /**
      * 查询附近指定距离内且状态正常的车辆
      * @param longitude 经度
@@ -28,27 +32,32 @@
     public List<VehiclePosition> findAvailableVehiclesNearby(double longitude,
                                                              double latitude,
                                                              double distanceInMeters,int num) {
-        // 创建查询点
-        Point referencePoint = new Point(longitude, latitude);
-        
-        // 设置最大距离(MongoDB使用公里或米,这里转换为公里)
-        distanceInMeters = distanceInMeters / 1000;
+        try {
+            // 1. 创建查询点
+            Point referencePoint = new Point(longitude, latitude);
 
-        // 构建查询条件
-        Query query = new Query();
-        query.addCriteria(Criteria.where("point")
-                .near(referencePoint)
-                .maxDistance(distanceInMeters));
-        query.addCriteria(Criteria.where("status").is(1)); // 运营中
-        query.addCriteria(Criteria.where("state").is(1));  // 接单中
-        
-        // 可以添加排序,按距离排序
-         query.with(Sort.by(Sort.Direction.ASC, "point"));
-        
-        // 可以限制返回数量
-         query.limit(num);
-        
-        return mongoTemplate.find(query, VehiclePosition.class);
+            // 2. 构建 NearQuery - 完全使用 NearQuery 的 API
+            NearQuery nearQuery = NearQuery.near(referencePoint, Metrics.KILOMETERS)
+                    .maxDistance(distanceInMeters / 1000)  // 转成公里
+                    .spherical(true);
+
+
+            // 4. 执行查询 - 明确指定集合名
+            GeoResults<VehiclePosition> geoResults = mongoTemplate.geoNear(
+                    nearQuery,
+                    VehiclePosition.class,
+                    "vehicle_position"  // 明确指定集合名,避免映射错误
+            );
+
+            // 5. 提取结果
+            return geoResults.getContent().stream()
+                    .map(geoResult -> geoResult.getContent())
+                    .collect(Collectors.toList());
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ArrayList<>();
+        }
     }
 
 
@@ -63,4 +72,21 @@
         return mongoTemplate.findOne(query, VehiclePosition.class);
     }
 
+
+    /**
+     * 所有的车辆
+     */
+    public List<VehiclePosition> findAll() {
+
+        // 构建查询条件
+        Query query = new Query();
+        query.addCriteria(Criteria.where("status").is(1)); // 运营中
+        query.addCriteria(Criteria.where("state").is(1));  // 接单中
+
+        // 可以添加排序,按距离排序
+        query.with(Sort.by(Sort.Direction.ASC, "point"));
+
+        return mongoTemplate.find(query, VehiclePosition.class);
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.7.1