From ed838e62602c0a63a64ff4bd144a0d16cc9a7cf8 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 10 四月 2026 09:39:25 +0800
Subject: [PATCH] 和客户同步1.0版本

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java |  183 ++++++++++++++++++++++++++++++++-------------
 1 files changed, 129 insertions(+), 54 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 b79d9e2..33b5f45 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
@@ -8,6 +8,7 @@
 import com.xiaopeng.api.dto.automaticPilot.MqttPublishDto;
 import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
 import com.xiaopeng.api.dto.automaticPilot.VehicleEventDTO;
+import com.xiaopeng.api.dto.map.HistoryPointDto;
 import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
 import com.xiaopeng.api.dto.operation.CruisePointDto;
 import com.xiaopeng.api.dto.operation.LonLatDto;
@@ -117,10 +118,16 @@
     @Value("${robotaxi.appId:xp_robotaxi_api}")
     private String appid;
 
+    @Value("${automatic.content.waittime:20000}")
+    private Long waittime;
+
     @Resource
     private XpTaskClient xpTaskClient;
     @Resource
     private VehicleBuriedPointClient vehicleBuriedPointClient;
+
+    @Value("${xpu.res.ping.enable: true}")
+    private boolean xpuResPingEnable;
 
     @Resource
     private XpTestOrderClient testOrderClient;
@@ -199,7 +206,7 @@
             switch (cmd) {
                 case SYSTEM_STATUS_XPU:
                     log.info("XPU发布系统运行状态 (XPU→云端):{}", message);
-                    systemStatusXpu(msgContent);
+                    systemStatusXpu(cmd, msgContent);
                     systemStatusXpuAndReassign(msgContent);
                     break;
                 case XPU_NAVIGATION_REQUEST:
@@ -223,7 +230,7 @@
                     break;
                 case ORDER_STATE_UPDATE_EVENT:
                     log.info("订单状态变化(XPU→云端)(XPU→座舱):{}", message);
-                    orderStateUpdateEvent(msgContent);
+                    orderStateUpdateEvent(cmd, msgContent);
                     break;
                 case POINT_ARRIVAL_STATUS_EVENT:
                     log.info("到达目标点状态(XPU→云端)(XPU→座舱):{}", message);
@@ -253,6 +260,12 @@
                 case ORDER_STATE_UPDATE_TO_CDU_EVENT:
                     log.info("更新订单状态到CDU (XPU→云端):{}", message);
                     break;
+                case ORDER_NEAR_DESTINATION_EVENT:
+                    log.info("车辆即将到达订单终点 (XPU→云端):{}", message);
+//                    if(orderId.contains("XU")){
+//                        buildPushOrderStatus(orderId, OrderStatusEnum.COMPLETED, sequence);
+//                    }
+                    break;
                 default:
                     log.info("消息不在处理范围内,忽略:{}", message);
             }
@@ -271,7 +284,12 @@
                 RtTaskListResponse response = msgContent.getRtTaskListResponse();
                 try {
                     log.info("云端下发订单操作的响应消息 (XPU→云端):{}", jsonPrinter.print(response));
-                    Object sequence = redisService.getCacheObject("CREATE_ORDER:" + response.getResults().getOrderId());
+                    RtTaskResult rtTaskResult = response.getResults(0);
+                    if (rtTaskResult.getStatus() != TaskResultStatus.ACCEPTED) {
+                        log.error("订单操作失败,orderId {} taskId {} 错误码 {}", rtTaskResult.getOrderId(), rtTaskResult.getTaskId(), rtTaskResult.getStatus());
+                        return;
+                    }
+                    Object sequence = redisService.getCacheObject("CREATE_ORDER:" + response.getResults(0).getOrderId());
                     if(sequence!=null){
                         JSONObject jsonObject = JSON.parseObject(sequence.toString());
                         String orderId = jsonObject.getString("orderId");
@@ -288,7 +306,7 @@
                         dto.setXpVehicleVin(vin);
                         dto.setOrderType(orderType);
                         xpOrderClient.popOrder(dto);
-                        log.info("订单状态更新:{}", response.getResults().getOrderId());
+                        log.info("订单状态更新:{}", response.getResults(0).getOrderId());
                     }
                 } catch (InvalidProtocolBufferException e) {
                     log.error("Failed to print RtTaskListResponse: {}", response, e);
@@ -308,7 +326,7 @@
      *
      * @param msgContent
      */
-    public void systemStatusXpu(MsgContent msgContent) {
+    public void systemStatusXpu(RTCmdType cmd, MsgContent msgContent) {
         //开始处理消息对应的业务逻辑
         SystemRuntimeStatus systemRuntimeStatus = msgContent.getSystemRuntimeStatus();
         //获取实时位置
@@ -322,10 +340,16 @@
         VehicleStaticInfo staticInfo = systemRuntimeStatus.getVehicleStatus().getStaticInfo();
         String xpuId = staticInfo.getXpuId();
         XpVehicle xpVehicle = xpVehicleClient.findByVehicleXpuId(xpuId).getData();
+        if(null == xpVehicle){
+            log.info("XPUID查询车辆无效 {}", xpuId);
+            return;
+        }
         String vin = xpVehicle.getVehicleVin();
         //先响应消息
         long sequence = msgContent.getHeader().getSequence();
-        responseMessage(sequence, vin);
+        if (xpuResPingEnable) {
+            responseMessage(cmd, sequence, vin);
+        }
         //保存车辆实时位置到redis
         if(0 != longitude && 0 != latitude){
             redisTemplate.opsForGeo().add("vehiclePosition:" + vin, new Point(longitude, latitude), vin);
@@ -350,6 +374,27 @@
         }
         //保存车辆实时信息到mongodb
         if(0 != longitude && 0 != latitude){
+            //缓存车辆历史定位,用户辅助获取导航抓路用
+            List<Object> cacheList = redisService.getCacheList("VEHICLE_HISTORY_POINT_LIST:" + xpVehicle.getId());
+            List<HistoryPointDto> history = new ArrayList<>();
+            if(cacheList!=null && !cacheList.isEmpty()){
+                for (Object cache : cacheList) {
+                    HistoryPointDto historyPointDto = JSON.parseObject(cache.toString(), HistoryPointDto.class);
+                    history.add(historyPointDto);
+                }
+            }
+            if(history.size() >= 10){
+                history.subList(history.size() - 10, history.size());
+            }
+            HistoryPointDto historyPointDto = new HistoryPointDto();
+            historyPointDto.setLocation(longitude + "," + latitude);
+            historyPointDto.setLocateTime(System.currentTimeMillis() + "");
+            historyPointDto.setAccuracy(naviPose.getPosAcc());
+            historyPointDto.setDirection(course);
+            historyPointDto.setSpeed(dynamicStatus.getSpeed());
+            history.add(historyPointDto);
+            redisService.setCacheList("VEHICLE_HISTORY_POINT_LIST:" + xpVehicle.getId(), history);
+
             VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class);
             if (null == vehiclePosition) {
                 vehiclePosition = new VehiclePosition();
@@ -375,36 +420,38 @@
                         .set("mileageRange", dynamicStatus.getDstBatDisp())
                         .set("hasOrder", hasOrder)
                         .set("orderId", orderId)
-                        .set("totalOdometer", dynamicStatus.getTotalOdometer()
-                        .set("addTime", System.currentTimeMillis()));
+                        .set("totalOdometer", dynamicStatus.getTotalOdometer())
+                        .set("addTime", System.currentTimeMillis());
                 mongoTemplate.updateFirst(new Query(Criteria.where("vin").is(vin)), update, VehiclePosition.class);
             }
             //调用推送服务接口,给乘客推送剩余轨迹和里程时长
             if (null != orderId && !order_id.contains("XU")) {
-                RtTripInfo rtTripInfo = systemRuntimeStatus.getRtTripInfo();
+                RtTripInfo rtTripInfo = systemRuntimeStatus.getRunningOrderStatusInfo().getRtTripInfo();
                 PushOrderRouteDTO dto = new PushOrderRouteDTO();
                 dto.setOrderId(orderId);
                 dto.setRouteType(1);
                 dto.setLongitude(longitude);
                 dto.setLatitude(latitude);
-                //TODO 这两个字段现在拿不到
-//            dto.setDuration(rtTripInfo.getRemaining_time());
-//            dto.setDistance(rtTripInfo.getRemaining_distance().intValue());
-//            dto.setDirection();
-                //只有乘客订单需要推送剩余导航数据
-                if(!order_id.contains("TEST")){
-                    xpPushMessageClient.pushOrderRoute(dto);
+                if (rtTripInfo.hasCurrentTask() && rtTripInfo.getCurrentTask().hasNaviProgressInfo()) {
+                    dto.setDuration(rtTripInfo.getCurrentTask().getNaviProgressInfo().getRouteRemainTime());
+                    dto.setDistance(rtTripInfo.getCurrentTask().getNaviProgressInfo().getRouteRemainDist());
+                    dto.setDirection(course.intValue());
                 }
 
-                //存储历史轨迹
                 OrderTrajectoryVo orderTrajectory = new OrderTrajectoryVo();
                 orderTrajectory.setOrderId(orderId);
                 orderTrajectory.setLocation(longitude + "," + latitude);
                 orderTrajectory.setDirection(dto.getDirection());
-                orderTrajectory.setSpeed(0D);
+                orderTrajectory.setSpeed((double) dynamicStatus.getSpeed());
                 orderTrajectory.setLocatetime(System.currentTimeMillis());
                 orderTrajectory.setCreateTime(new Date());
-                xpOrderClient.saveVehicleLocation(orderTrajectory);
+                //只有乘客订单需要推送剩余导航数据
+                if(!order_id.contains("TEST")){
+                    xpPushMessageClient.pushOrderRoute(dto);//存储历史轨迹
+                    xpOrderClient.saveVehicleLocation(orderTrajectory);
+                }else{
+                    testOrderClient.saveVehicleLocation(orderTrajectory);
+                }
             }
         }
     }
@@ -425,6 +472,7 @@
         GearLevel gearLevel = systemRuntimeStatus.getVehicleStatus().getDynamicStatus().getGearLevel();
         int value = gearLevel.getNumber();
         redisService.setCacheObject(CacheConstants.GEAR_LEVEL + systemRuntimeStatus.getVehicleStatus().getStaticInfo().getXpuId(), value);
+        log.info("车辆挡位:{} {}", CacheConstants.GEAR_LEVEL + systemRuntimeStatus.getVehicleStatus().getStaticInfo().getXpuId(), value);
         // 判断是否为故障状态
         XpVehicle vehicle = null;
         if (abnormalReason == AbnormalReason.FAULT) {
@@ -518,7 +566,7 @@
      */
     public void xpuNavigationRequest(MsgContent msgContent) {
         //开始处理消息对应的业务逻辑
-        NavigationRequest naviRequest = msgContent.getNavigationRequset();
+        NavigationRequest naviRequest = msgContent.getNavigationRequest();
         String requestId = naviRequest.getRequestId();
         String orderId = naviRequest.getOrderId();
         String taskId = naviRequest.getTaskId();
@@ -531,15 +579,15 @@
                 break;
             case ROUTE_TO_PICKUP:
                 log.info("驶往上车点的行程 {}", orderId);
-                buildNaviRequest(requestId, orderId, orderPhase, msgContent.getHeader().getSequence());
+                buildNaviRequest(requestId, orderId, orderPhase, msgContent.getHeader().getSequence(), taskId);
                 break;
             case ROUTE_TO_DESTINATION:
                 log.info("驶往下车点的行程 {}", orderId);
-                buildNaviRequest(requestId, orderId, orderPhase, msgContent.getHeader().getSequence());
+                buildNaviRequest(requestId, orderId, orderPhase, msgContent.getHeader().getSequence(), taskId);
                 break;
             case ROUTE_TO_CRUISE:
                 log.info("巡游阶段路线 {}", orderId);
-                buildNaviRequest(requestId, orderId, orderPhase, msgContent.getHeader().getSequence());
+                buildNaviRequest(requestId, orderId, orderPhase, msgContent.getHeader().getSequence(), taskId);
                 break;
         }
     }
@@ -553,7 +601,7 @@
     public void navigationDeviationEvent(MsgContent msgContent) {
         //开始处理消息对应的业务逻辑
         NavigationDeviationEvent deviationEvent = msgContent.getNaviDeviationEvent();
-        String requestId = deviationEvent.getNavigationDeviationMessage().getNaviRecalcRequestSeq() + "";
+        String requestId = deviationEvent.getNavigationDeviationMessage().getRequestId() + "";
         //导航id
         String routeID = "";
         Long vehicleId = null;
@@ -568,7 +616,7 @@
         //订单类型  1:乘客订单,2=巡游订单
         LonLatDto destination = new LonLatDto();
         LonLatDto origin = new LonLatDto();
-
+        RouteVo routeVo = null;
         if (orderId.contains("XU")) {
             orderType = OrderType.CRUISE_ORDER;
 
@@ -590,7 +638,7 @@
             if (200 != routeVoR.getCode()) {
                 throw new RuntimeException("获取订单线路和运费失败");
             }
-            RouteVo routeVo = routeVoR.getData();
+            routeVo = routeVoR.getData();
             routeID = routeVo.getRouteID();
 
 
@@ -614,11 +662,12 @@
                     dto.setOrigin(origin);
                     dto.setDestination(destination);
                     dto.setRouteType(1);
+                    dto.setVehicleId(testOrder.getVehicleId());
                     R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
                     if (200 != routeVoR.getCode()) {
                         throw new RuntimeException("获取订单线路和运费失败");
                     }
-                    RouteVo routeVo = routeVoR.getData();
+                    routeVo = routeVoR.getData();
                     routeID = routeVo.getRouteID();
                     //缓存数据,用于后续推给乘客导航线路
                     redisService.setCacheObject("TEST_ORDER_NAVIGATION_START_DATA:" + testOrder.getVehicleId(), JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
@@ -639,7 +688,7 @@
                     if (200 != routeVoR.getCode()) {
                         throw new RuntimeException("获取订单线路和运费失败");
                     }
-                    RouteVo routeVo = routeVoR.getData();
+                    routeVo = routeVoR.getData();
                     routeID = routeVo.getRouteID();
                     //缓存导航数据,用于后面的逻辑中给乘客端推送导航数据
                     redisService.setCacheObject("TEST_ORDER_NAVIGATION_END_DATA:" + testOrder.getVehicleId(), JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
@@ -663,7 +712,7 @@
                 if (200 != routeVoR.getCode()) {
                     throw new RuntimeException("获取订单线路和运费失败");
                 }
-                RouteVo routeVo = routeVoR.getData();
+                routeVo = routeVoR.getData();
                 routeID = routeVo.getRouteID();
 
                 vehicleId = testOrder.getVehicleId();
@@ -690,11 +739,12 @@
                 dto.setOrigin(origin);
                 dto.setDestination(destination);
                 dto.setRouteType(1);
+                dto.setVehicleId(xpOrder.getVehicleId());
                 R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
                 if (200 != routeVoR.getCode()) {
                     throw new RuntimeException("获取订单线路和运费失败");
                 }
-                RouteVo routeVo = routeVoR.getData();
+                routeVo = routeVoR.getData();
                 routeID = routeVo.getRouteID();
                 //缓存数据,用于后续推给乘客导航线路
                 redisService.setCacheObject("ORDER_NAVIGATION_START_DATA:" + xpOrder.getAppUserId(), JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
@@ -715,7 +765,7 @@
                 if (200 != routeVoR.getCode()) {
                     throw new RuntimeException("获取订单线路和运费失败");
                 }
-                RouteVo routeVo = routeVoR.getData();
+                routeVo = routeVoR.getData();
                 routeID = routeVo.getRouteID();
                 //缓存导航数据,用于后面的逻辑中给乘客端推送导航数据
                 redisService.setCacheObject("ORDER_NAVIGATION_END_DATA:" + xpOrder.getAppUserId(), JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
@@ -724,13 +774,28 @@
         }
         //直接响应回最新导航数据
         if(StringUtils.isNotEmpty(routeID)){
+            //推送小程序新的导航数据
+            if(orderType.equals(OrderType.USER_ORDER)){
+                PushOrderRouteDTO dto = new PushOrderRouteDTO();
+                dto.setOrderId(Long.parseLong(orderId));
+                dto.setRouteType(1);
+                dto.setLongitude(longitude);
+                dto.setLatitude(latitude);
+                if (null != routeVo) {
+                    dto.setDuration(routeVo.getDuration().doubleValue());
+                    dto.setDistance(routeVo.getDistance().doubleValue());
+                    dto.setDirection(routeVo.getDirection().intValue());
+                }
+                xpPushMessageClient.pushOrderRoute(dto);
+            }
+
             XpVehicle xpVehicle = xpVehicleClient.queryById(vehicleId).getData();
             R<String> stringR = xpMapClient.queryRouted(routeID);
             if (200 != stringR.getCode()) {
                 throw new RuntimeException("根据导航ID获取车端需要的导航数据失败");
             }
             //构建响应导航数据给车端
-            cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
+            cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId(), taskId);
         }
     }
 
@@ -741,7 +806,7 @@
      * @param orderId
      * @param orderPhase
      */
-    public void buildNaviRequest(String requestId, String orderId, OrderPhase orderPhase, Long sequence) {
+    public void buildNaviRequest(String requestId, String orderId, OrderPhase orderPhase, Long sequence, String taskId) {
         //订单类型  1:乘客订单,2=巡游订单
         LonLatDto destination = new LonLatDto();
         LonLatDto origin = new LonLatDto();
@@ -804,6 +869,7 @@
                         dto.setOrigin(origin);
                         dto.setDestination(destination);
                         dto.setRouteType(2);
+                        dto.setVehicleId(testOrder.getVehicleId());
                         R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
                         if (200 != routeVoR.getCode()) {
                             throw new RuntimeException("获取订单线路和运费失败");
@@ -901,6 +967,7 @@
                     dto.setOrigin(origin);
                     dto.setDestination(destination);
                     dto.setRouteType(1);
+                    dto.setVehicleId(xpOrder.getVehicleId());
                     R<RouteVo> routeVoR = xpMapClient.getOrderDistanceAndDuration(dto);
                     if (200 != routeVoR.getCode()) {
                         throw new RuntimeException("获取订单线路和运费失败");
@@ -955,7 +1022,7 @@
             }
             log.info("根据导航ID获取车端需要的导航数据 订单 {} 导航数据 {}", orderId, stringR.getData());
             //构建导航下发请求对象
-            cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId());
+            cloudPushNavigationInfo(requestId, routeID, stringR.getData(), orderType, orderId, xpVehicle.getVehicleVin(), xpVehicle.getXpuId(), taskId);
         }
     }
 
@@ -1013,12 +1080,12 @@
     /**
      * 构建响应消息
      */
-    public void responseMessage(Long request_seq, String vin) {
+    public void responseMessage(RTCmdType cmd, Long request_seq, String vin) {
         ResponseMessage.Builder responseMessageBuilder = ResponseMessage.newBuilder();
         responseMessageBuilder.setRequestSeq(request_seq);
         responseMessageBuilder.setCode(StatusCode.OK);
         responseMessageBuilder.setTimestamp(System.currentTimeMillis());
-        xpuUtil.responseMessage(responseMessageBuilder.build(), vin);
+        xpuUtil.responseMessage(cmd, responseMessageBuilder.build(), vin);
 
     }
 
@@ -1027,7 +1094,7 @@
      * 订单状态更新事件
      * @param msgContent
      */
-    public void orderStateUpdateEvent(MsgContent msgContent) {
+    public void orderStateUpdateEvent(RTCmdType cmd, MsgContent msgContent) {
         //先响应消息
         long sequence = msgContent.getHeader().getSequence();
         //开始处理消息对应的业务逻辑
@@ -1049,7 +1116,7 @@
                         if(orderId.contains("TEST")){
                             testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.READY_DEPART.getCode());
                         }else{
-                            buildPushOrderStatus(orderId, OrderStatusEnum.READY_DEPART, sequence);
+                            buildPushOrderStatus(cmd, orderId, OrderStatusEnum.READY_DEPART, sequence);
                             xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.READY_DEPART.getCode());
                         }
                     }
@@ -1064,7 +1131,7 @@
                         if(orderId.contains("TEST")){
                             testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.PICK_UP.getCode());
                         }else{
-                            buildPushOrderStatus(orderId, OrderStatusEnum.PICK_UP, sequence);
+                            buildPushOrderStatus(cmd, orderId, OrderStatusEnum.PICK_UP, sequence);
                             xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PICK_UP.getCode());
                         }
                     }
@@ -1079,18 +1146,24 @@
                         if(orderId.contains("TEST")){
                             testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.PICK_UP_GUESTS.getCode());
                         }else{
-                            buildPushOrderStatus(orderId, OrderStatusEnum.PICK_UP_GUESTS, sequence);
+                            buildPushOrderStatus(cmd, orderId, OrderStatusEnum.PICK_UP_GUESTS, sequence);
                             xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PICK_UP_GUESTS.getCode());
                         }
                     }
                     break;
                 case ORDER_PASSENGER_ONBOARD:
+                    //先手动暂停触发,因为现目前车机响应状态时机不对
+                    try {
+                        Thread.sleep(waittime);
+                    } catch (InterruptedException e) {
+                        throw new RuntimeException(e);
+                    }
                     //乘客已上车
                     if(!orderId.contains("XU")){
                         if(orderId.contains("TEST")){
                             testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.PASSENGER_BOARDED.getCode());
                         }else{
-                            buildPushOrderStatus(orderId, OrderStatusEnum.PASSENGER_BOARDED, sequence);
+                            buildPushOrderStatus(cmd, orderId, OrderStatusEnum.PASSENGER_BOARDED, sequence);
                             xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.PASSENGER_BOARDED.getCode());
                         }
                     }
@@ -1101,7 +1174,7 @@
                         if(orderId.contains("TEST")){
                             testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.IN_SERVICE.getCode());
                         }else{
-                            buildPushOrderStatus(orderId, OrderStatusEnum.IN_SERVICE, sequence);
+                            buildPushOrderStatus(cmd, orderId, OrderStatusEnum.IN_SERVICE, sequence);
                             xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.IN_SERVICE.getCode());
                         }
                     }
@@ -1116,7 +1189,7 @@
                         if(orderId.contains("TEST")){
                             testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
                         }else{
-                            buildPushOrderStatus(orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
+                            buildPushOrderStatus(cmd, orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
                             xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
                         }
                     }
@@ -1171,7 +1244,7 @@
                             log.info("改派旧车取消回调,跳过订单取消处理,orderId: {}, taskId: {}, cancelScene: {}, context: {}",
                                     orderId, taskId, cancelContext.getString("cancelScene"), cancelContext);
                             //响应消息
-                            responseMessage(sequence, cancelContext.getString("vin"));
+                            responseMessage(cmd, sequence, cancelContext.getString("vin"));
                             return;
                         }
                         if(orderId.contains("TEST")){
@@ -1210,13 +1283,13 @@
                             }
                             if(xpOrder.getStatus() > 5 && xpOrder.getStatus() < 8){
                                 //行程中取消订单,按照行程结束处理
-                                buildPushOrderStatus(orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
+                                buildPushOrderStatus(cmd, orderId, OrderStatusEnum.SEE_OFF_GUESTS, sequence);
                                 xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.SEE_OFF_GUESTS.getCode());
-                                redisService.setCacheObject("ORDER_STATUS:" + orderId.substring(4), OrderStatusEnum.SEE_OFF_GUESTS.getCode(), 24L, TimeUnit.HOURS);
+                                redisService.setCacheObject("ORDER_STATUS:" + orderId, OrderStatusEnum.SEE_OFF_GUESTS.getCode(), 24L, TimeUnit.HOURS);
                             }else{
-                                buildPushOrderStatus(orderId, OrderStatusEnum.CANCELED, sequence);
+                                buildPushOrderStatus(cmd, orderId, OrderStatusEnum.CANCELED, sequence);
                                 xpOrderClient.updateOrderStatus(Long.parseLong(orderId), OrderStatusEnum.CANCELED.getCode());
-                                redisService.setCacheObject("ORDER_STATUS:" + orderId.substring(4), OrderStatusEnum.CANCELED.getCode(), 24L, TimeUnit.HOURS);
+                                redisService.setCacheObject("ORDER_STATUS:" + orderId, OrderStatusEnum.CANCELED.getCode(), 24L, TimeUnit.HOURS);
                             }
                         }
                     }
@@ -1224,7 +1297,7 @@
                 case ORDER_ARRIVED_AT_CRUISE_DESTINATION:
                     //到达巡游终点
                     if(orderId.contains("XU")){
-                        buildPushOrderStatus(orderId, OrderStatusEnum.COMPLETED, sequence);
+                        buildPushOrderStatus(cmd, orderId, OrderStatusEnum.COMPLETED, sequence);
                         String cruiseOrderId = orderId.substring(2);
                         XpCruiseOrder xpCruiseOrder = xpCruiseOrderClient.getCruiseOrder(Long.parseLong(cruiseOrderId)).getData();
                         if (Objects.nonNull(xpCruiseOrder)){
@@ -1263,7 +1336,7 @@
                         if(testOrder.getOrderType() == 2){
                             XpVehicle xpVehicle = xpVehicleClient.queryById(testOrder.getVehicleId()).getData();
                             //响应消息
-                            responseMessage(sequence, xpVehicle.getVehicleVin());
+                            responseMessage(cmd, sequence, xpVehicle.getVehicleVin());
                             //测试巡游单处理逻辑
                             testOrderClient.updateOrderStatus(Long.parseLong(orderId.substring(4)), OrderStatusEnum.COMPLETED.getCode());
                             redisService.setCacheObject("TEST_ORDER_STATUS:" + orderId.substring(4), OrderStatusEnum.COMPLETED.getCode(), 24L, TimeUnit.HOURS);
@@ -1286,7 +1359,7 @@
      * @param orderId
      * @param status
      */
-    public void buildPushOrderStatus(String orderId, OrderStatusEnum status, Long sequence){
+    public void buildPushOrderStatus(RTCmdType cmd, String orderId, OrderStatusEnum status, Long sequence){
         if(orderId.contains("XU")){
             //巡游单
             //到达目的地
@@ -1302,7 +1375,7 @@
                     R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(vehicleId);
                     XpVehicle xpVehicle = xpVehicleR.getData();
                     //响应消息
-                    responseMessage(sequence, xpVehicle.getVehicleVin());
+                    responseMessage(cmd, sequence, xpVehicle.getVehicleVin());
                     // 运营中 继续执行
                     if(xpVehicle.getOperatingStatus()==1 && xpVehicle.getState()==0){
                         log.info("巡游单到达终点,继续执行下一笔巡游单");
@@ -1342,7 +1415,7 @@
             XpOrder xpOrder = xpOrderR.getData();
             XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
             //响应消息
-            responseMessage(sequence, xpVehicle.getVehicleVin());
+            responseMessage(cmd, sequence, xpVehicle.getVehicleVin());
 
             //构建推送消息
             Map<String, Object> params = new HashMap<>();
@@ -1419,13 +1492,15 @@
      * @param vin                   车辆VIN
      * @param xpuId                 XPU设备id
      */
-    public void cloudPushNavigationInfo(String requestId, String routeId, String routeDataContent, String orderType, String orderId, String vin, String xpuId) {
+    public void cloudPushNavigationInfo(String requestId, String routeId, String routeDataContent, String orderType, String orderId, String vin, String xpuId, String taskId) {
         //组装报文,将routeDateContent信息推送到XPU
         RestoreNavigationData.Builder navigationDataBuilder = RestoreNavigationData.newBuilder();
         navigationDataBuilder.setRouteId(routeId);
         navigationDataBuilder.setRequestId(requestId);
         navigationDataBuilder.setContent(routeDataContent);
         navigationDataBuilder.setTimestamp(System.currentTimeMillis());
+        navigationDataBuilder.setOrderId(orderId);
+        navigationDataBuilder.setTaskId(taskId);
         long sequence = snowflake.nextId();
         log.info("开始推送导航数据 {}", orderId);
         MqttPublishDto mqttPublishDto = xpuUtil.cloudPushNavigation(navigationDataBuilder.build(), xpuId, sequence);

--
Gitblit v1.7.1