From e14f7128416b282450db0c042e63646805df2ecf Mon Sep 17 00:00:00 2001
From: 曾富康 <1067864236@qq.com>
Date: 星期四, 18 六月 2026 11:23:14 +0800
Subject: [PATCH] 司机端注册新增字段

---
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java |   39 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
index d5dc12e..a548e9b 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -34,6 +34,9 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+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.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
@@ -433,6 +436,42 @@
         }
     }
 
+    @ResponseBody
+    @PostMapping("/base/driver/queryNearbyCar")
+    @ApiOperation(value = "首页查询5公里范围内的车辆位置", tags = {"司机端-首页"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "经度", name = "lon", required = true, dataType = "String"),
+            @ApiImplicitParam(value = "纬度", name = "lat", required = true, dataType = "String")
+    })
+    public ResultUtil<List<Map<String, Object>>> queryNearbyCar(String lon, String lat){
+        GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.parseDouble(lon), Double.parseDouble(lat));
+        Distance distanceR = new Distance(5, Metrics.KILOMETERS);
+        Circle circle = new Circle(geoJsonPoint, distanceR);
+        Query query = Query.query(Criteria.where("point").withinSphere(circle));
+        List<DriverPosition> driverPositions = mongoTemplate.find(query, DriverPosition.class);
+
+        List<Map<String, Object>> collect = new ArrayList<>();
+        if(driverPositions.size() > 0){
+            List<Integer> driverIds = driverPositions.stream().map(DriverPosition::getDriverId).collect(Collectors.toList());
+            List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().in("id", driverIds)
+                    .eq("authState", 2).eq("state", 2));
+            collect = drivers.stream().map(driver -> {
+                String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + driver.getId());
+                if(ToolUtil.isNotEmpty(value)){
+                    Optional<DriverPosition> driverPosition = driverPositions.stream().filter(position -> position.getDriverId().equals(driver.getId())).findFirst();
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("driverId", driver.getId());
+                    map.put("name", driver.getName());
+                    map.put("lot", driverPosition.isPresent() ? driverPosition.get().getPoint().getX() : "");
+                    map.put("lat", driverPosition.isPresent() ? driverPosition.get().getPoint().getY() : "");
+                    return map;
+                }
+                return null;
+            }).filter(Objects::nonNull).collect(Collectors.toList());
+        }
+        return ResultUtil.success(collect);
+    }
+
 
     @ResponseBody
     @PostMapping("/api/driver/queryOrderDataFromDriver")

--
Gitblit v1.7.1