From 0f5fc39356b6bff677984c33c296573bb9c8393e Mon Sep 17 00:00:00 2001
From: zhouhn <zhouhn@xiaopeng.com>
Date: 星期六, 07 三月 2026 20:58:52 +0800
Subject: [PATCH] 引入proto文件,生成与XPU通信的报文对象

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java |  137 +++++++++++++++++++++++++--------------------
 1 files changed, 77 insertions(+), 60 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 7187e2f..7b288da 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
@@ -12,6 +12,7 @@
 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.api.vo.automaticPilot.protobuf.RtTaskList;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.utils.uuid.UUID;
 import lombok.extern.slf4j.Slf4j;
@@ -51,24 +52,28 @@
      * @return
      */
     //TODO 处理feign调用的异常
-    public MqttPublishDto cloudCreateOrder(RTTask task, String vin, Long sequence) {
-        MsgContent msgContent = new MsgContent();
+    public MqttPublishDto cloudCreateOrder(RtTaskList taskList, String vin, Long sequence) {
+        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.Builder msgContentBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.newBuilder();
         // 消息头
-        RtMsgHeader header = new RtMsgHeader();
-        header.setMsg_id(UUID.randomUUID().toString());
-        header.setTimestamp(System.currentTimeMillis());
-        header.setCmd(RTCmdType.CLOUD_CREATE_ORDER);
-        header.setSequence(sequence);
-        header.setType(MessageType.MESSAGE_TYPE_REQUEST);
-        header.setSource(SourceType.CLOUD);
-        msgContent.setHeader(header);
-        // 消息内容
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("task", task);
-        msgContent.setContent_detail(jsonObject);
+        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.Builder headerBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.newBuilder();
+        headerBuilder.setMsgId(UUID.randomUUID().toString());
+        headerBuilder.setTimestamp(System.currentTimeMillis());
+        headerBuilder.setCmd(RTCmdType.CLOUD_CREATE_ORDER.getValue());
+        headerBuilder.setSequence(sequence);
+        headerBuilder.setType(com.xiaopeng.api.vo.automaticPilot.protobuf.MessageType.MESSAGE_TYPE_REQUEST);
+        headerBuilder.setSource(com.xiaopeng.api.vo.automaticPilot.protobuf.SourceType.CLOUD);
+        msgContentBuilder.setHeader(headerBuilder.build());
+
+        msgContentBuilder.setRtTaskList(taskList);
+
         MqttPublishVo vo = new MqttPublishVo();
         vo.setTopic(buildTopicByVin(vin));
-        vo.setPayload(JSON.toJSONString(msgContent));
+        try {
+            vo.setPayload(com.google.protobuf.util.JsonFormat.printer().print(msgContentBuilder.build()));
+        } catch (Exception e) {
+            log.error("Protobuf转JSON失败", e);
+            throw new RuntimeException("Protobuf转JSON失败", e);
+        }
 
         log.info("云端-->XPU 创建订单:{}", vo);
         return xpuClient.publish(vo);
@@ -81,24 +86,28 @@
      * @return
      */
     //TODO 处理feign调用的异常
-    public MqttPublishDto cloudOrderOperation(OrderOperation operation, String vin, Long sequence) {
-        MsgContent msgContent = new MsgContent();
+    public MqttPublishDto cloudOrderOperation(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperation operation, String vin, Long sequence) {
+        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.Builder msgContentBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.newBuilder();
         // 消息头
-        RtMsgHeader header = new RtMsgHeader();
-        header.setMsg_id(UUID.randomUUID().toString());
-        header.setTimestamp(System.currentTimeMillis());
-        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);
+        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.Builder headerBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.newBuilder();
+        headerBuilder.setMsgId(UUID.randomUUID().toString());
+        headerBuilder.setTimestamp(System.currentTimeMillis());
+        headerBuilder.setCmd(RTCmdType.CLOUD_ORDER_OPERATION.getValue());
+        headerBuilder.setSequence(sequence);
+        headerBuilder.setType(com.xiaopeng.api.vo.automaticPilot.protobuf.MessageType.MESSAGE_TYPE_REQUEST);
+        headerBuilder.setSource(com.xiaopeng.api.vo.automaticPilot.protobuf.SourceType.CLOUD);
+        msgContentBuilder.setHeader(headerBuilder.build());
+        
+        msgContentBuilder.setOrderOperation(operation);
+
         MqttPublishVo vo = new MqttPublishVo();
         vo.setTopic(buildTopicByVin(vin));
-        vo.setPayload(JSON.toJSONString(msgContent));
+        try {
+            vo.setPayload(com.google.protobuf.util.JsonFormat.printer().print(msgContentBuilder.build()));
+        } catch (Exception e) {
+            log.error("Protobuf转JSON失败", e);
+            throw new RuntimeException("Protobuf转JSON失败", e);
+        }
 
         log.info("云端-->XPU 修改订单:{}", vo);
         return xpuClient.publish(vo);
@@ -113,25 +122,29 @@
      * @param responseMessage
      * @return
      */
-    public MqttPublishDto responseMessage(ResponseMessage responseMessage, String vin) {
-        MsgContent msgContent = new MsgContent();
+    public MqttPublishDto responseMessage(com.xiaopeng.api.vo.automaticPilot.protobuf.ResponseMessage responseMessage, String vin) {
+        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.Builder msgContentBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.newBuilder();
         // 消息头
-        RtMsgHeader header = new RtMsgHeader();
-        header.setMsg_id(UUID.randomUUID().toString());
-        header.setTimestamp(System.currentTimeMillis());
-        header.setCmd(RTCmdType.CLOUD_TASK_CONTROL);
+        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.Builder headerBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.newBuilder();
+        headerBuilder.setMsgId(UUID.randomUUID().toString());
+        headerBuilder.setTimestamp(System.currentTimeMillis());
+        headerBuilder.setCmd(RTCmdType.CLOUD_TASK_CONTROL.getValue());
         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);
+        headerBuilder.setSequence(snowflake.nextId());
+        headerBuilder.setType(com.xiaopeng.api.vo.automaticPilot.protobuf.MessageType.MESSAGE_TYPE_RESPONSE);
+        headerBuilder.setSource(com.xiaopeng.api.vo.automaticPilot.protobuf.SourceType.CLOUD);
+        msgContentBuilder.setHeader(headerBuilder.build());
+        
+        msgContentBuilder.setResponse(responseMessage);
+
         MqttPublishVo vo = new MqttPublishVo();
         vo.setTopic(buildTopicByVin(vin));
-        vo.setPayload(JSON.toJSONString(msgContent));
+        try {
+            vo.setPayload(com.google.protobuf.util.JsonFormat.printer().print(msgContentBuilder.build()));
+        } catch (Exception e) {
+            log.error("Protobuf转JSON失败", e);
+            throw new RuntimeException("Protobuf转JSON失败", e);
+        }
 
         log.info("云端-->XPU 响应消息:{}", vo);
         return xpuClient.publish(vo);
@@ -144,24 +157,28 @@
      * @return
      */
     //TODO 处理feign调用的异常
-    public MqttPublishDto cloudPushNavigation(RestoreNavigationData navigationData, String xpuId, Long sequence) {
-        MsgContent msgContent = new MsgContent();
+    public MqttPublishDto cloudPushNavigation(com.xiaopeng.api.vo.automaticPilot.protobuf.RestoreNavigationData navigationData, String xpuId, Long sequence) {
+        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.Builder msgContentBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgContent.newBuilder();
         // 消息头
-        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);
+        com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.Builder headerBuilder = com.xiaopeng.api.vo.automaticPilot.protobuf.MsgHeader.newBuilder();
+        headerBuilder.setMsgId(UUID.randomUUID().toString());
+        headerBuilder.setTimestamp(System.currentTimeMillis());
+        headerBuilder.setCmd(RTCmdType.CLOUD_NAVIGATION_RESPONSE.getValue());
+        headerBuilder.setSequence(sequence);
+        headerBuilder.setType(com.xiaopeng.api.vo.automaticPilot.protobuf.MessageType.MESSAGE_TYPE_RESPONSE);
+        headerBuilder.setSource(com.xiaopeng.api.vo.automaticPilot.protobuf.SourceType.CLOUD);
+        msgContentBuilder.setHeader(headerBuilder.build());
+        
+        msgContentBuilder.setRestoreNavigationData(navigationData);
+
         MqttPublishVo vo = new MqttPublishVo();
         vo.setTopic(buildTopicByXpuId(xpuId));
-        vo.setPayload(JSON.toJSONString(msgContent));
+        try {
+            vo.setPayload(com.google.protobuf.util.JsonFormat.printer().print(msgContentBuilder.build()));
+        } catch (Exception e) {
+            log.error("Protobuf转JSON失败", e);
+            throw new RuntimeException("Protobuf转JSON失败", e);
+        }
 
         log.info("云端-->XPU 下发导航信息:{}", vo);
         return xpuClient.publish(vo);

--
Gitblit v1.7.1