From bc7ea9b2430833d1bda26cb75e756ab0e28ab34f Mon Sep 17 00:00:00 2001
From: yyy <1083599556@qq.com>
Date: 星期三, 22 四月 2026 17:47:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/1.0' into 1.0

---
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java |   44 ++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
index d0df525..b30db02 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
@@ -11,13 +11,13 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.mongodb.client.MongoCollection;
 import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto;
 import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto;
 import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto;
 import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto;
 import com.xiaopeng.api.feignClient.maintenance.*;
+import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
 import com.xiaopeng.api.model.account.XpOperationsUser;import com.xiaopeng.api.model.maintenance.XpTask;
 import com.xiaopeng.api.model.maintenance.XpTaskRule;
 import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
@@ -25,6 +25,7 @@
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicleAnnualRecord;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
+import com.xiaopeng.api.vo.operation.VehiclePositionVo;
 import com.xiaopeng.api.vo.vehicleConvoy.VehicleDoorStatusVo;
 import com.xiaopeng.api.vo.vehicleConvoy.VehicleStateVo;
 import com.xiaopeng.api.vo.vehicleConvoy.VehiclesCommandCallbackVo;
@@ -40,7 +41,7 @@
 import com.xiaopeng.vehicleConvoy.model.exportExcel.XpVehicleExportExcel;
 import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel;
 import com.xiaopeng.vehicleConvoy.model.query.*;
-import com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO;
+import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO;
 import com.xiaopeng.vehicleConvoy.service.IXpFleetService;
 import com.xiaopeng.vehicleConvoy.service.IXpFleetVehicleService;
 import com.xiaopeng.vehicleConvoy.service.IXpVehicleAnnualRecordService;
@@ -57,6 +58,9 @@
 import org.springframework.context.MessageSource;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.data.geo.Distance;
+import org.springframework.data.geo.Metrics;
+import org.springframework.data.geo.Point;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
@@ -64,6 +68,7 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -73,6 +78,7 @@
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -1156,4 +1162,38 @@
         VehicleDoorStatusVo vehicleDoorStatus = xpVehicleService.getVehicleDoorStatus(orderId);
         return R.ok(vehicleDoorStatus);
     }
+
+    @Resource
+    XpVehicleClient xpVehicleClient;
+    /**
+     * 周围车辆点位查询
+     */
+    @ApiOperation(value = "周围车辆点位查询", notes = "", tags = {"小程序-周围车辆点位查询"})
+    @GetMapping("/api/v1/mini-program/vehicle/nearby")
+    @XpClientCheck(checkToken = false, checkOtpToken = true)
+    public R<List<XpVehicleVO>> carAround(@RequestParam double lon,@RequestParam double lat,HttpServletRequest request) {
+
+        Point point = new Point(lon, lat);
+        Distance distance = new Distance(3, Metrics.KILOMETERS);
+        Criteria criteria = Criteria.where("point")
+                .nearSphere(point)
+                .maxDistance(distance.getNormalizedValue());
+        Query query = new Query(criteria);
+        List<VehiclePositionVo> vehiclePositions = mongoTemplate.find(query, VehiclePositionVo.class);
+
+        List<XpVehicleVO> xpVehicleList = vehiclePositions.stream()
+                .sorted(Comparator.comparingDouble(VehiclePositionVo::getDistance))
+                .map(vp -> {
+                    XpVehicle xpVehicle = xpVehicleClient.findByVehicleVin(vp.getVin()).getData();
+                    XpVehicleVO vo = new XpVehicleVO();
+                    BeanUtils.copyProperties(xpVehicle, vo);
+                    vo.setDirection(vp.getCourse());
+                    return vo;
+                })
+                .filter(v -> v.getState() == 0)
+                .limit(5)
+                .collect(Collectors.toList());
+
+        return R.ok(xpVehicleList);
+    }
 }

--
Gitblit v1.7.1