xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/QueryOrderRouteDTO.java
New file @@ -0,0 +1,22 @@ package com.xiaopeng.api.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; import java.io.Serializable; @Data @ApiModel(value = "查询订单实时轨迹信息入参QueryOrderRouteDTO") public class QueryOrderRouteDTO implements Serializable { @NotNull(message = "订单id不能为空") @ApiModelProperty(value = "订单id") private Long orderId; @NotNull(message = "轨迹类型不能为空") @ApiModelProperty(value = "轨迹类型 1=接驾轨迹 2=行程轨迹") private Integer routeType; } xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpMapController.java
@@ -4,6 +4,8 @@ import com.xiaopeng.api.dto.map.OrderRouteAndFareDto; import com.xiaopeng.api.dto.map.RouteAndFareDto; import com.xiaopeng.api.dto.operation.LonLatDto; import com.xiaopeng.api.feignClient.order.XpOrderClient; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.vo.map.PointByIpVo; import com.xiaopeng.api.vo.map.XpDistanceAndDurationVo; import com.xiaopeng.api.vo.operation.RouteVo; @@ -38,11 +40,13 @@ private final GDMapGeocodingUtil gdMapGeocodingUtil; private final XpGeoFencingPolygonService xpGeoFencingPolygonService; private final RedisService redisService; private final XpOrderClient xpOrderClient; public XpMapController(GDMapGeocodingUtil gdMapGeocodingUtil, XpGeoFencingPolygonService xpGeoFencingPolygonService, RedisService redisService) { public XpMapController(GDMapGeocodingUtil gdMapGeocodingUtil, XpGeoFencingPolygonService xpGeoFencingPolygonService, RedisService redisService, XpOrderClient xpOrderClient) { this.gdMapGeocodingUtil = gdMapGeocodingUtil; this.xpGeoFencingPolygonService = xpGeoFencingPolygonService; this.redisService = redisService; this.xpOrderClient = xpOrderClient; } @@ -112,9 +116,17 @@ // 存储redis redisService.setCacheObject(CacheConstants.ORDER_ROUTE + "_" + dto.getOrderId() + "_" +dto.getRouteType(), routeVo); // 查询订单信息 XpOrder xpOrder = xpOrderClient.queryOrderById(dto.getOrderId()).getData(); // 封装消息内容 Integer routeType = dto.getRouteType(); if(routeType == 2){ routeType = 3; }else { routeType = xpOrder.getStatus() == 4 ? 1 : 2; } // 存储路线偏离缓存,后续进行轨迹截取 redisService.setCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +dto.getRouteType(), routeVo); redisService.setCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +routeType, routeVo); return R.ok(routeVo); } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -4,19 +4,23 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiaopeng.api.dto.QueryOrderRouteDTO; import com.xiaopeng.api.dto.order.GetOrderNumDto; import com.xiaopeng.api.dto.order.PopOrderDto; import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO; import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.operation.RouteVo; import com.xiaopeng.api.vo.order.FareBreakdownVo; import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo; import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo; import com.xiaopeng.api.vo.order.XpPointInfoVo; import com.xiaopeng.common.core.constant.CacheConstants; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.WebUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.redis.service.RedisService; import com.xiaopeng.order.mangodb.model.OrderTrajectory; import com.xiaopeng.order.model.dto.XpOrderCommentDto; import com.xiaopeng.order.model.dto.XpOrderPayDto; @@ -62,6 +66,7 @@ public class XpOrderController { private final IXpOrderService xpOrderService; private final RedisService redisService; /** * 获取订单统计数据(内部接口) @@ -451,4 +456,24 @@ return R.ok(); } /** * 订单查询实时轨迹路线 */ @ApiOperation(value = "订单查询实时轨迹路线") @PostMapping("/api/v1/order/queryOrderRoute") public R<RouteVo> queryOrderRoute(@RequestBody QueryOrderRouteDTO dto) { // 查询订单信息 XpOrder xpOrder = xpOrderService.getById(dto.getOrderId()); // 封装消息内容 Integer routeType = dto.getRouteType(); if(routeType == 2){ routeType = 3; }else { routeType = xpOrder.getStatus() == 4 ? 1 : 2; } // 获取路线规划 RouteVo routeVo = redisService.getCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +routeType); return R.ok(routeVo); } } xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/controller/PushOrderRouteController.java
@@ -41,14 +41,19 @@ */ @PostMapping("/inner/v1/order/pushOrderRoute") public R<String> pushOrderRoute(@Validated @RequestBody PushOrderRouteDTO dto) { // 查询订单信息 XpOrder xpOrder = xpOrderClient.queryOrderById(dto.getOrderId()).getData(); // 封装消息内容 Integer routeType = dto.getRouteType(); if(routeType == 2){ routeType = 3; }else { routeType = xpOrder.getStatus() == 4 ? 1 : 2; } // 获取路线规划 RouteVo routeVo = redisService.getCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +dto.getRouteType()); RouteVo routeVo = redisService.getCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +routeType); if(Objects.nonNull(routeVo)){ // 查询订单信息 XpOrder xpOrder = xpOrderClient.queryOrderById(dto.getOrderId()).getData(); // 计算实时点位到线段的最优截取 List<LonLatDto> lonLatDtos = MapMatchingUtil.clipBySegmentDistance(routeVo.getPolyline(), new LonLatDto(dto.getLongitude(), dto.getLatitude())); @@ -58,7 +63,7 @@ routeVo.setPolyline(lonLatDtos); // 存储最新路线偏离缓存,后续进行轨迹截取 redisService.setCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +dto.getRouteType(), routeVo); redisService.setCacheObject(CacheConstants.ORDER_ROUTE_CAPTURE + "_" + dto.getOrderId() + "_" +routeType, routeVo); // 封装轨迹点位集合 Map<String, Object> polyline = new HashMap<>(); @@ -72,13 +77,6 @@ route.put("duration",dto.getDuration()); route.put("polyline",JSONObject.toJSONString(polyline)); // 封装消息内容 Integer routeType = dto.getRouteType(); if(routeType == 2){ routeType = 3; }else { routeType = xpOrder.getStatus() == 4 ? 1 : 2; } Map<String, Object> content = new HashMap<>(); content.put("orderId",dto.getOrderId()); content.put("routeType",routeType);