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){ 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; } 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; @@ -119,4 +130,37 @@ } @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); } } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/DriverPosition.java
New file @@ -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; }