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