From 55404fc745824de24dcd1444526874a81ec0027a Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 25 二月 2026 16:09:10 +0800
Subject: [PATCH] 修改推送导航数据逻辑

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java |   84 +++++++++++++++++++++++++++++++-----------
 1 files changed, 62 insertions(+), 22 deletions(-)

diff --git a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
index a38349c..bb817af 100644
--- a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
+++ b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
@@ -43,6 +43,7 @@
 import com.xiaopeng.common.core.enums.PushMessageTypeEnum;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.utils.uuid.UUID;
+import com.xiaopeng.common.redis.service.RedisService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -92,6 +93,8 @@
 
     @Resource
     private Snowflake snowflake;
+    @Autowired
+    private RedisService redisService;
 
 
     /**
@@ -465,17 +468,30 @@
         //订单类型  1:乘客订单,2=巡游订单
         LonLatDto destination = new LonLatDto();
         LonLatDto origin = new LonLatDto();
+        //导航id
+        String routeID = "";
         if (orderId.contains("XU")) {
             // todo 下发巡游单的导航数据
             //巡游单
             if (orderPhase.equals(OrderPhase.ROUTE_TO_CRUISE)) {
+                //先响应消息
+                responseMessage(sequence, "");
+                //构建导航数据给到车端
                 origin.setLongitude(116.40528);
                 origin.setLatitude(39.90498);
                 destination.setLongitude(116.40528);
                 destination.setLatitude(39.90498);
 
-                //先响应消息
-                responseMessage(sequence, "");
+                OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
+                dto.setOrderId(Long.parseLong(orderId));
+                dto.setOrigin(origin);
+                dto.setDestination(destination);
+                R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
+                if (200 != routeVoR.getCode()) {
+                    throw new RuntimeException("获取订单线路和运费失败");
+                }
+                RouteVo routeVo = routeVoR.getData();
+                routeID = routeVo.getRouteID();
             }
         } else {
             //正常单
@@ -499,31 +515,55 @@
                 origin.setLatitude(vehiclePosition.getPoint().getY());
                 destination.setLongitude(xpOrder.getStartLon());
                 destination.setLatitude(xpOrder.getStartLat());
+
+                OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
+                dto.setOrderId(Long.parseLong(orderId));
+                dto.setOrigin(origin);
+                dto.setDestination(destination);
+                R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
+                if (200 != routeVoR.getCode()) {
+                    throw new RuntimeException("获取订单线路和运费失败");
+                }
+                RouteVo routeVo = routeVoR.getData();
+                routeID = routeVo.getRouteID();
             }
             //驶往下车点的行程
             if (orderPhase.equals(OrderPhase.ROUTE_TO_DESTINATION)) {
-                //查询起点到终点的线路
-                origin.setLongitude(xpOrder.getStartLon());
-                origin.setLatitude(xpOrder.getStartLat());
-                destination.setLongitude(xpOrder.getEndLon());
-                destination.setLatitude(xpOrder.getEndLat());
+                //直接取缓存中的导航数据推送给车端和乘客
+                Object cacheObject = redisService.getCacheObject("ORDER_NAVIGATION_DATA:" + xpOrder.getAppUserId());
+                if(null == cacheObject){
+                    //没有缓存数据,重新规划线路
+                    //查询起点到终点的线路
+                    origin.setLongitude(xpOrder.getStartLon());
+                    origin.setLatitude(xpOrder.getStartLat());
+                    destination.setLongitude(xpOrder.getEndLon());
+                    destination.setLatitude(xpOrder.getEndLat());
+                    OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
+                    dto.setOrderId(Long.parseLong(orderId));
+                    dto.setOrigin(origin);
+                    dto.setDestination(destination);
+                    R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
+                    if (200 != routeVoR.getCode()) {
+                        throw new RuntimeException("获取订单线路和运费失败");
+                    }
+                    RouteVo routeVo = routeVoR.getData();
+                    routeID = routeVo.getRouteID();
+                    //缓存导航数据,用于后面的逻辑中给乘客端推送导航数据
+                    redisService.setCacheObject("ORDER_NAVIGATION_DATA:" + xpOrder.getAppUserId(), com.alibaba.fastjson.JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
+                }else{
+                    RouteVo routeVo = JSON.parseObject(cacheObject.toString(), RouteVo.class);
+                    routeID = routeVo.getRouteID();
+                }
             }
-            OrderRouteAndFareDto dto = new OrderRouteAndFareDto();
-            dto.setOrderId(Long.parseLong(orderId));
-            dto.setOrigin(origin);
-            dto.setDestination(destination);
-            R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
-            if (200 != routeVoR.getCode()) {
-                throw new RuntimeException("获取订单线路和运费失败");
+            if(StringUtils.isNotEmpty(routeID)){
+                XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
+                R<String> stringR = xpMapClient.queryRouted(routeID);
+                if (200 != stringR.getCode()) {
+                    throw new RuntimeException("根据导航ID获取车端需要的导航数据失败");
+                }
+                //构建导航下发请求对象
+                cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
             }
-            XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
-            RouteVo routeVo = routeVoR.getData();
-            R<String> stringR = xpMapClient.queryRouted(routeVo.getRouteID());
-            if (200 != stringR.getCode()) {
-                throw new RuntimeException("根据导航ID获取车端需要的导航数据失败");
-            }
-            //构建导航下发请求对象
-            cloudPushNavigationInfo(requestId, routeVo.getRouteID(), stringR.getData(), orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
         }
     }
 

--
Gitblit v1.7.1