From ae58e2ed4030730b772b30c91a8f129de63a94f6 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期日, 27 七月 2025 10:45:21 +0800
Subject: [PATCH] 添加首页地图车辆相关皆苦

---
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverPosition.java |   22 +++++++
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java        |   59 +++++++++++--------
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java  |    5 +
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java          |   54 ++++++++++++++++-
 4 files changed, 109 insertions(+), 31 deletions(-)

diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
index aae9336..c721ab2 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -24,7 +24,6 @@
 import com.stylefeng.guns.modular.system.service.*;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
 import com.stylefeng.guns.modular.system.util.WeChatUtil;
-import com.stylefeng.guns.modular.system.util.qianyuntong.NCOSSUtil;
 import com.stylefeng.guns.modular.system.util.qianyuntong.QianYunTongConfig;
 import com.stylefeng.guns.modular.system.warpper.*;
 import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
@@ -36,25 +35,19 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.geo.Point;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.http.*;
-import org.springframework.util.Base64Utils;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.math.BigDecimal;
-import java.security.SecureRandom;
 import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -88,7 +81,7 @@
     @Autowired
     private ICarService carService;
     
-    @Autowired
+    @Resource
     private RegionMapper regionMapper;
     
     @Autowired
@@ -109,7 +102,6 @@
     @Autowired
     private GunsProperties gunsProperties;
 
-
     @Autowired
     private ICompanyService companyService;
 
@@ -119,9 +111,23 @@
     @Autowired
     private TDriverPromotionActivityService driverPromotionActivityService;
 
-
     @Autowired
     private QianYunTongConfig qianYunTongConfig;
+    
+    @Value("${wx.url}")
+    private String ACCESS_TOKEN_URL;
+    
+    @Value("${wx.appletsAppSecret}")
+    private String memberAppSecret;
+    
+    @Value("${wx.appletsAppid}")
+    private String wxAppId;
+    
+    @Autowired
+    private RestTemplate restTemplate;
+    
+    @Autowired
+    private MongoTemplate mongoTemplate;
     
     /**
      * 获取短信验证码
@@ -600,17 +606,7 @@
         return ResultUtil.error("获取二维码失败");
     }
 
-    @Value("${wx.url}")
-    private String ACCESS_TOKEN_URL;
-
-    @Value("${wx.appletsAppSecret}")
-    private String memberAppSecret;
-
-    @Value("${wx.appletsAppid}")
-    private String wxAppId;
-
-    @Autowired
-    private RestTemplate restTemplate;
+    
 
 
     public  String getAccessToken() {
@@ -734,6 +730,17 @@
     @PostMapping("/base/savePosition")
     public String savePosition(OrderPosition orderPosition){
         try {
+            //将最新定位存储mongodb中
+            GeoJsonPoint point = new GeoJsonPoint(new Point(Double.parseDouble(orderPosition.getLon()),
+                    Double.parseDouble(orderPosition.getLat())));
+            DriverPosition position = mongoTemplate.findOne(Query.query(Criteria.where("driverId")
+                    .is(orderPosition.getDriverId())), DriverPosition.class);
+            if(null == position){
+                position = new DriverPosition();
+            }
+            position.setPoint(point);
+            mongoTemplate.save(position);
+            //处理业务上的功能
             orderPositionService.saveData(orderPosition);
             return JSON.toJSONString(ResultUtil.success());
         }catch (Exception e){
diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java
index f16917d..6647db0 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderPosition.java
@@ -2,6 +2,7 @@
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.util.Date;
@@ -47,4 +48,8 @@
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date insertTime;
+    /**
+     * 坐标点
+     */
+    private GeoJsonPoint point;
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
index f409dcd..9c730f0 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -1,25 +1,33 @@
 package com.stylefeng.guns.modular.api;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.stylefeng.guns.modular.system.model.Driver;
 import com.stylefeng.guns.modular.system.service.IDriverService;
 import com.stylefeng.guns.modular.system.service.IOrderEvaluateService;
 import com.stylefeng.guns.modular.system.util.ResultUtil;
 import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
 import com.stylefeng.guns.modular.system.warpper.DriverInfoWarpper;
+import com.stylefeng.guns.modular.system.warpper.DriverPosition;
 import com.stylefeng.guns.modular.system.warpper.OrderEvaluateWarpper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.geo.GeoResult;
+import org.springframework.data.geo.GeoResults;
+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.NearQuery;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 司机控制器
@@ -34,6 +42,9 @@
 
     @Autowired
     private IOrderEvaluateService orderEvaluateService;
+    
+    @Autowired
+    private MongoTemplate mongoTemplate;
 
 
 
@@ -117,6 +128,39 @@
             return ResultUtil.runErr();
         }
     }
-
-
+    
+    
+    
+    @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){
+        //mongodb查询附近5公里范围内的坐标
+        NearQuery query = NearQuery.near(new Point(Double.parseDouble(lon), Double.parseDouble(lat)));
+        query.query(Query.query(Criteria.where("point")));
+        query.maxDistance(5000);
+        GeoResults<DriverPosition> results = mongoTemplate.geoNear(query, DriverPosition.class);
+        List<Map<String, Object>> collect = new ArrayList<>();
+        if(collect.size() > 0){
+            List<GeoResult<DriverPosition>> content1 = results.getContent();
+            List<DriverPosition> positionList = content1.stream().map(GeoResult::getContent).collect(Collectors.toList());
+            List<Integer> driverIds = positionList.stream().map(DriverPosition::getDriverId).collect(Collectors.toList());
+            List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().in("driverId", driverIds)
+                    .eq("authState", 2).eq("state", 2));
+            collect = drivers.stream().map(driver -> {
+                Optional<DriverPosition> driverPosition = positionList.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;
+            }).collect(Collectors.toList());
+        }
+        return ResultUtil.success(collect);
+    }
 }
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverPosition.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverPosition.java
new file mode 100644
index 0000000..7c1d683
--- /dev/null
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverPosition.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/27 10:07
+ */
+@Data
+@Document(collection = "driver_position")
+public class DriverPosition {
+	@Id
+	private Integer driverId;
+	/**
+	 * 点位
+	 */
+	private GeoJsonPoint point;
+}
+

--
Gitblit v1.7.1