From 80f6c17c34dae2c5f9f861e274f4e8d5e2394d5c Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 25 二月 2026 18:00:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java |  100 +++++++++++++++++++++++++++++++++++++------------
 1 files changed, 75 insertions(+), 25 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 0c14fe8..1a3149a 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
@@ -51,6 +51,7 @@
 import com.xiaopeng.common.core.utils.SnowFlake;
 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;
@@ -103,6 +104,8 @@
 
     @Resource
     private Snowflake snowflake;
+    @Autowired
+    private RedisService redisService;
 
 
     /**
@@ -476,17 +479,37 @@
         //订单类型  1:乘客订单,2=巡游订单
         LonLatDto destination = new LonLatDto();
         LonLatDto origin = new LonLatDto();
+        //导航id
+        String routeID = "";
+        Long vehicleId = null;
         if (orderId.contains("XU")) {
             // todo 下发巡游单的导航数据
             //巡游单
             if (orderPhase.equals(OrderPhase.ROUTE_TO_CRUISE)) {
-                origin.setLongitude(116.40528);
-                origin.setLatitude(39.90498);
-                destination.setLongitude(116.40528);
-                destination.setLatitude(39.90498);
-
                 //先响应消息
                 responseMessage(sequence, "");
+                /* 构建导航数据给到车端 */
+                R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(orderId);
+                XpCruiseOrder xpCruiseOrder = cruiseOrder.getData();
+
+                origin.setLongitude(xpCruiseOrder.getStartLon());
+                origin.setLatitude(xpCruiseOrder.getStartLat());
+                destination.setLongitude(xpCruiseOrder.getEndLon());
+                destination.setLatitude(xpCruiseOrder.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();
+
+
+//                vehicleId = xpOrder.getVehicleId();
             }
         } else {
             //正常单
@@ -510,31 +533,57 @@
                 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("获取订单线路和运费失败");
-            }
-            XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
-            RouteVo routeVo = routeVoR.getData();
-            R<String> stringR = xpMapClient.queryRouted(routeVo.getRouteID());
+            vehicleId = xpOrder.getVehicleId();
+        }
+
+        if(StringUtils.isNotEmpty(routeID)){
+            XpVehicle xpVehicle = xpVehicleClient.queryById(vehicleId).getData();
+            R<String> stringR = xpMapClient.queryRouted(routeID);
             if (200 != stringR.getCode()) {
                 throw new RuntimeException("根据导航ID获取车端需要的导航数据失败");
             }
             //构建导航下发请求对象
-            cloudPushNavigationInfo(requestId, routeVo.getRouteID(), stringR.getData(), orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
+            cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
         }
     }
 
@@ -707,15 +756,15 @@
             //到达目的地
             if(OrderStatusEnum.COMPLETED.equals(status)){
 
-                    // 返程找到目前的订单 -》之前的订单 查询生成一个   正常巡游 找到下一个点位   若到达最后点位  则反向找点位  每次判断是否收车状态 是则不进行处理了
+                // 返程找到目前的订单 -》之前的订单 查询生成一个   正常巡游 找到下一个点位   若到达最后点位  则反向找点位  每次判断是否收车状态 是则不进行处理了
                 // 找到这个订单
                 R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(orderId);
                 if(cruiseOrder!=null){
                     XpCruiseOrder xpCruiseOrder = cruiseOrder.getData();
                     Long vehicleId = xpCruiseOrder.getVehicleId();
 
-                    // 关闭当前巡游单子
-                    xpCruiseOrderClient.updateCruiseOrder(xpCruiseOrder.getVehicleVin());
+                    // 关闭当前巡游单子 已完成
+                    xpCruiseOrderClient.closeCruiseOrder(xpCruiseOrder.getVehicleVin());
                     R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(vehicleId);
                     XpVehicle xpVehicle = xpVehicleR.getData();
                     // 运营中 继续执行
@@ -727,6 +776,7 @@
 
                             // 修改一下id 加一个一样的巡游单子
                             lastXpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
+                            lastXpCruiseOrder.setStatus(1);
                             xpCruiseOrderClient.addCruiseOrder(lastXpCruiseOrder);
 
 

--
Gitblit v1.7.1