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