From 9de6e6b4ef769c6b365bd7fd335d77c50a015d83 Mon Sep 17 00:00:00 2001
From: zhouhn <zhouhn@xiaopeng.com>
Date: 星期六, 07 三月 2026 20:58:02 +0800
Subject: [PATCH] 统一mqtt的topic地址生成到一个函数方法

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java |   54 +++++++++++++++++++++++++++---------------------------
 1 files changed, 27 insertions(+), 27 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 7a3da72..0e1bc4d 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
@@ -2,9 +2,6 @@
 
 import cn.hutool.core.lang.Snowflake;
 import cn.hutool.core.util.IdUtil;
-import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpResponse;
-import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
 import com.xiaopeng.api.dto.automaticPilot.MqttPublishDto;
@@ -14,7 +11,6 @@
 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.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.utils.uuid.UUID;
 import lombok.extern.slf4j.Slf4j;
@@ -22,7 +18,6 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -34,8 +29,8 @@
 @Component
 public class XPUUtil {
 
-    @Value("${xpu.topic}")
-    private String topic;
+    @Value("${xpu.topic.msg.prefix:Robotaxi/Msg/Xpu}")
+    private String topicPrefix;
 
     @Resource
     private XPUClient xpuClient;
@@ -48,15 +43,13 @@
     // 查询车管 车辆xpuid信息返回字段,用于按需返回字段
     public static final List<String> TYPE_LIST = Collections.singletonList("1");
 
-
-
     /**
      * Robotaxi创建订单推送给XPU
      *
      * @param task
      * @return
      */
-    //TODO 没有处理feign调用的异常
+    //TODO 处理feign调用的异常
     public MqttPublishDto cloudCreateOrder(RTTask task, String vin, Long sequence) {
         MsgContent msgContent = new MsgContent();
         // 消息头
@@ -71,14 +64,11 @@
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("task", task);
         msgContent.setContent_detail(jsonObject);
-        log.info("云端-->XPU 创建订单:{}", msgContent);
-        //根据车辆VIN查询XPUID
-        String xpuId = getXpuIdByVin(vin);
-        //组装请求消息体
         MqttPublishVo vo = new MqttPublishVo();
-        //TODO 这里的topic组装有问题
-        vo.setTopic(topic + "/" + xpuId);
+        vo.setTopic(buildTopic(vin));
         vo.setPayload(JSON.toJSONString(msgContent));
+
+        log.info("云端-->XPU 创建订单:{}", vo);
         return xpuClient.publish(vo);
     }
 
@@ -90,7 +80,7 @@
      * @param operation
      * @return
      */
-    //TODO 没有处理feign调用的异常
+    //TODO 处理feign调用的异常
     public MqttPublishDto cloudOrderOperation(OrderOperation operation, String vin,Long  sequence) {
         MsgContent msgContent = new MsgContent();
         // 消息头
@@ -105,13 +95,11 @@
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("operation", operation);
         msgContent.setContent_detail(jsonObject);
-        log.info("云端-->XPU 操作订单:{}", msgContent);
-        //根据车辆VIN查询XPUID
-        String xpuId = getXpuIdByVin(vin);
-        //组装请求消息体
         MqttPublishVo vo = new MqttPublishVo();
-        vo.setTopic(topic + "/" + xpuId);
+        vo.setTopic(buildTopic(vin));
         vo.setPayload(JSON.toJSONString(msgContent));
+
+        log.info("云端-->XPU 修改订单:{}", vo);
         return xpuClient.publish(vo);
     }
 
@@ -139,13 +127,11 @@
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("resposne", responseMessage);
         msgContent.setContent_detail(jsonObject);
-        log.info("云端-->XPU 响应消息:{}", msgContent);
-        //根据车辆VIN查询XPUID
-        String xpuId = getXpuIdByVin(vin);
-        //组装请求消息体
         MqttPublishVo vo = new MqttPublishVo();
-        vo.setTopic(topic + "/" + xpuId);
+        vo.setTopic(buildTopic(vin));
         vo.setPayload(JSON.toJSONString(msgContent));
+
+        log.info("云端-->XPU 响应消息:{}", vo);
         return xpuClient.publish(vo);
     }
 
@@ -167,5 +153,19 @@
         return xpuIdMapping.get(XPU_ID_TYPE);
     }
 
+    private String buildTopic(String vin) {
+        String prefix = topicPrefix == null ? "" : topicPrefix;
+        if (!prefix.endsWith("/")) {
+            prefix = prefix + "/";
+        }
+        String xpuId = getXpuIdByVin(vin);
+        String value = xpuId;
+        if (xpuId.length() > 10) {
+            int start = 10;
+            int end = Math.min(24, xpuId.length());
+            value = xpuId.substring(start, end);
+        }
+        return prefix + value + "00000000";
+    }
 
 }

--
Gitblit v1.7.1