From 79501f59e629cc3f52a2ca66e1610591ba7802e3 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期五, 15 八月 2025 13:54:47 +0800 Subject: [PATCH] 修改bug --- UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java | 64 +++++++++++++++++++++++++++++-- 1 files changed, 59 insertions(+), 5 deletions(-) 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..70e2b5d 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,35 @@ package com.stylefeng.guns.modular.api; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.stylefeng.guns.core.util.ToolUtil; 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 lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +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; +import org.springframework.data.redis.core.RedisTemplate; 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 javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; /** * 司机控制器 @@ -27,6 +37,7 @@ @Api @RestController @RequestMapping("") +@Slf4j public class DriverController { @Autowired @@ -34,6 +45,12 @@ @Autowired private IOrderEvaluateService orderEvaluateService; + + @Autowired + private MongoTemplate mongoTemplate; + + @Resource + private RedisTemplate<String, Object> redisTemplate; @@ -55,6 +72,9 @@ }) public ResultUtil<BaseWarpper> queryIdleDriver(Integer type, Double lon, Double lat){ try { + if(type==2){ + type=null; + } List<Driver> list = driverService.queryIdleDriver(type, lon, lat, 5D, null); BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setNumber(list.size()); @@ -117,6 +137,40 @@ 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公里范围内的坐标 + Query query = Query.query(Criteria.where("point").nearSphere(new Point(Double.parseDouble(lon), Double.parseDouble(lat))).maxDistance(5000)); + List<DriverPosition> driverPositions = mongoTemplate.find(query, DriverPosition.class); + log.info("地理空间检索出的数据:{}", JSON.toJSONString(driverPositions)); + 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" + String.valueOf(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); + } } -- Gitblit v1.7.1