From 74a43b8dd5694edffa29c72ac4bd7af4c701e0ff Mon Sep 17 00:00:00 2001
From: zhuml4 <zhuml4@xiaopeng.com>
Date: 星期六, 07 三月 2026 21:02:13 +0800
Subject: [PATCH] 更新XPU报文解析逻辑

---
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java |   80 +++++++++++++++++++++++++++------------
 1 files changed, 55 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 379ad0d..f06bcc2 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
@@ -130,11 +130,24 @@
 
     private MsgContent parseMsgContent(String message) {
         try {
+            // 首先解析外层JSON,提取payload字段
+            JSONObject outerJson = JSON.parseObject(message);
+            String payload = outerJson.getString("payload");
+
+            if (StringUtils.isEmpty(payload)) {
+                log.error("Payload is empty in message: {}", message);
+                return null;
+            }
+
+            // 使用payload构建MsgContent
             MsgContent.Builder builder = MsgContent.newBuilder();
-            JsonFormat.parser().ignoringUnknownFields().merge(message, builder);
+            JsonFormat.parser().ignoringUnknownFields().merge(payload, builder);
             return builder.build();
         } catch (InvalidProtocolBufferException e) {
             log.error("Failed to parse message: {}", message, e);
+            return null;
+        } catch (Exception e) {
+            log.error("Failed to extract payload from message: {}", message, e);
             return null;
         }
     }
@@ -220,31 +233,48 @@
         }
         //TODO 这里的逻辑要再确认下
         //消息应答
-        if(MessageType.MESSAGE_TYPE_RESPONSE == type){
-            ResponseMessage response = msgContent.getResponse();
-            StatusCode code = response.getCode();
-            long requestSeq = response.getRequestSeq();
-            if(code == StatusCode.OK){
-                log.info("收到XPU消息的响应,code: {}, message: {}", code.getNumber(), message);
-                Object sequence = redisTemplate.opsForValue().get(requestSeq);
-                if(sequence!=null){
-                    log.info("收到XPU消息的响应,sequence: {}", sequence);
-                    JSONObject jsonObject = JSON.parseObject(sequence.toString());
-                    String event = jsonObject.getString("event");
-                    //推送导航的响应消息
-                    if(SystemEventType.PUSH_NAVIGATION.equals(event)){
-                        log.info("推送导航的响应消息,{}", jsonObject.toJSONString());
-                        String orderId = jsonObject.getString("orderId");
-                        String vin = jsonObject.getString("vin");
-                        String orderType = jsonObject.getString("orderType");
-                        PopOrderDto dto = new PopOrderDto();
-                        dto.setOrderId(Long.valueOf(orderId));
-                        dto.setXpVehicleVin(vin);
-                        dto.setOrderType(orderType);
-                        xpOrderClient.popOrder(dto);
-                    }
-                }
+        if(MessageType.MESSAGE_TYPE_RESPONSE == type) {
+            //区分业务类型
+            int cmdValue = header.getCmd();
+            RTCmdType cmd = RTCmdType.getByValue(cmdValue);
+            if (cmd == null) {
+                log.warn("Unknown cmd value: {}", cmdValue);
+                return;
             }
+            if (cmd == RTCmdType.CLOUD_SEND_RT_TASK) {
+                RtTaskListResponse response = msgContent.getRtTaskListResponse();
+                try {
+                    log.info("云端下发订单操作的响应消息 (XPU→云端):{}", jsonPrinter.print(response));
+                } catch (InvalidProtocolBufferException e) {
+                    log.error("Failed to print RtTaskListResponse: {}", response, e);
+                }
+            } else {
+                log.info("响应消息不在处理范围内,忽略:{}", message);
+            }
+//            ResponseMessage response = msgContent.getResponse();
+//            StatusCode code = response.getCode();
+//            long requestSeq = response.getRequestSeq();
+//            if(code == StatusCode.OK){
+//                log.info("收到XPU消息的响应,code: {}, message: {}", code.getNumber(), message);
+//                Object sequence = redisTemplate.opsForValue().get(requestSeq);
+//                if(sequence!=null){
+//                    log.info("收到XPU消息的响应,sequence: {}", sequence);
+//                    JSONObject jsonObject = JSON.parseObject(sequence.toString());
+//                    String event = jsonObject.getString("event");
+//                    //推送导航的响应消息
+//                    if(SystemEventType.PUSH_NAVIGATION.equals(event)){
+//                        log.info("推送导航的响应消息,{}", jsonObject.toJSONString());
+//                        String orderId = jsonObject.getString("orderId");
+//                        String vin = jsonObject.getString("vin");
+//                        String orderType = jsonObject.getString("orderType");
+//                        PopOrderDto dto = new PopOrderDto();
+//                        dto.setOrderId(Long.valueOf(orderId));
+//                        dto.setXpVehicleVin(vin);
+//                        dto.setOrderType(orderType);
+//                        xpOrderClient.popOrder(dto);
+//                    }
+//                }
+//            }
         }
     }
 

--
Gitblit v1.7.1