From b8d0dc0a294ba8e07e861b3b78e953d7d5ba480c Mon Sep 17 00:00:00 2001
From: zhouhn <zhouhn@xiaopeng.com>
Date: 星期六, 07 三月 2026 20:58:06 +0800
Subject: [PATCH] 完善云端导航信息下发的逻辑

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java |   51 ++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 42 insertions(+), 9 deletions(-)

diff --git a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java
index 0e1bc4d..68e872c 100644
--- a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java
+++ b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java
@@ -11,6 +11,7 @@
 import com.xiaopeng.api.vo.automaticPilot.proto.down.*;
 import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudCreateOrder.RTTask;
 import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.OrderOperation;
+import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudPushNavigation.RestoreNavigationData;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.utils.uuid.UUID;
 import lombok.extern.slf4j.Slf4j;
@@ -59,13 +60,14 @@
         header.setCmd(RTCmdType.CLOUD_CREATE_ORDER);
         header.setSequence(sequence);
         header.setType(MessageType.MESSAGE_TYPE_RESPONSE);
+        header.setSource(SourceType.CLOUD);
         msgContent.setHeader(header);
         // 消息内容
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("task", task);
         msgContent.setContent_detail(jsonObject);
         MqttPublishVo vo = new MqttPublishVo();
-        vo.setTopic(buildTopic(vin));
+        vo.setTopic(buildTopicByVin(vin));
         vo.setPayload(JSON.toJSONString(msgContent));
 
         log.info("云端-->XPU 创建订单:{}", vo);
@@ -81,7 +83,7 @@
      * @return
      */
     //TODO 处理feign调用的异常
-    public MqttPublishDto cloudOrderOperation(OrderOperation operation, String vin,Long  sequence) {
+    public MqttPublishDto cloudOrderOperation(OrderOperation operation, String vin, Long sequence) {
         MsgContent msgContent = new MsgContent();
         // 消息头
         RtMsgHeader header = new RtMsgHeader();
@@ -90,21 +92,19 @@
         header.setCmd(RTCmdType.CLOUD_ORDER_OPERATION);
         header.setSequence(sequence);
         header.setType(MessageType.MESSAGE_TYPE_REQUEST);
+        header.setSource(SourceType.CLOUD);
         msgContent.setHeader(header);
         // 消息内容
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("operation", operation);
         msgContent.setContent_detail(jsonObject);
         MqttPublishVo vo = new MqttPublishVo();
-        vo.setTopic(buildTopic(vin));
+        vo.setTopic(buildTopicByVin(vin));
         vo.setPayload(JSON.toJSONString(msgContent));
 
         log.info("云端-->XPU 修改订单:{}", vo);
         return xpuClient.publish(vo);
     }
-
-
-
 
     /**
      * 响应消息
@@ -122,20 +122,49 @@
         Snowflake snowflake = IdUtil.getSnowflake(0, 0);
         header.setSequence(snowflake.nextId());
         header.setType(MessageType.MESSAGE_TYPE_RESPONSE);
+        header.setSource(SourceType.CLOUD);
         msgContent.setHeader(header);
         // 消息内容
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("resposne", responseMessage);
         msgContent.setContent_detail(jsonObject);
         MqttPublishVo vo = new MqttPublishVo();
-        vo.setTopic(buildTopic(vin));
+        vo.setTopic(buildTopicByVin(vin));
         vo.setPayload(JSON.toJSONString(msgContent));
 
         log.info("云端-->XPU 响应消息:{}", vo);
         return xpuClient.publish(vo);
     }
 
+    /**
+     * 下发导航地址到车端
+     *
+     * @param operation
+     * @return
+     */
+    //TODO 处理feign调用的异常
+    public MqttPublishDto cloudPushNavigation(RestoreNavigationData navigationData, String xpuId, Long sequence) {
+        MsgContent msgContent = new MsgContent();
+        // 消息头
+        RtMsgHeader header = new RtMsgHeader();
+        header.setMsg_id(UUID.randomUUID().toString());
+        header.setTimestamp(System.currentTimeMillis());
+        header.setCmd(RTCmdType.CLOUD_NAVIGATION_RESPONSE);
+        header.setSequence(sequence);
+        header.setType(MessageType.MESSAGE_TYPE_RESPONSE);
+        header.setSource(SourceType.CLOUD);
+        msgContent.setHeader(header);
+        // 消息内容
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("navigationData", navigationData);
+        msgContent.setContent_detail(jsonObject);
+        MqttPublishVo vo = new MqttPublishVo();
+        vo.setTopic(buildTopicByXpuId(xpuId));
+        vo.setPayload(JSON.toJSONString(msgContent));
 
+        log.info("云端-->XPU 下发导航信息:{}", vo);
+        return xpuClient.publish(vo);
+    }
 
 
     /**
@@ -153,12 +182,16 @@
         return xpuIdMapping.get(XPU_ID_TYPE);
     }
 
-    private String buildTopic(String vin) {
+    private String buildTopicByVin(String vin) {
+        String xpuId = getXpuIdByVin(vin);
+        return this.buildTopicByXpuId(xpuId);
+    }
+
+    private String buildTopicByXpuId(String xpuId) {
         String prefix = topicPrefix == null ? "" : topicPrefix;
         if (!prefix.endsWith("/")) {
             prefix = prefix + "/";
         }
-        String xpuId = getXpuIdByVin(vin);
         String value = xpuId;
         if (xpuId.length() > 10) {
             int start = 10;

--
Gitblit v1.7.1