From 28ac22a4dd20a5abfa5fae11ce081d8120f1f476 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 21 四月 2026 22:18:28 +0800
Subject: [PATCH] 新增加客服系统对接接口

---
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/CarControlCallbackController.java |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/CarControlCallbackController.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/CarControlCallbackController.java
index ec4a633..5ce0817 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/CarControlCallbackController.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/CarControlCallbackController.java
@@ -6,6 +6,7 @@
 import com.xiaopeng.api.vo.vehicleConvoy.VehicleStateVo;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.exception.ServiceException;
+import com.xiaopeng.common.redis.service.RedisService;
 import com.xiaopeng.vehicleConvoy.model.dto.CarControlCallbackDTO;
 import com.xiaopeng.vehicleConvoy.service.AsyncVehicleStateService;
 import lombok.extern.slf4j.Slf4j;
@@ -17,6 +18,7 @@
 import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 控车回调接口
@@ -28,6 +30,7 @@
 
     @Resource
     private AsyncVehicleStateService asyncVehicleStateService;
+    private RedisService redisService;
 
     /**
      * 车控指令执行的回调接口
@@ -51,6 +54,8 @@
                     // 通知异步服务处理回调
                     asyncVehicleStateService.handleStateCallback(request.getMsgRef(), stateData);
                 }
+                // 尝试解析车辆空调数据
+                parseAirConditioningSwitchFromCallback(request);
             }
         } catch (Exception e) {
             log.error("处理车辆状态回调异常: msgId={}", request.getMsgRef(), e);
@@ -94,6 +99,8 @@
             // 解析door信息
             Map<String, Object> door = (Map<String, Object>) instant.get("door");
             if (door != null) {
+                //存入缓存用于后续使用
+                redisService.setCacheObject("DOOR:" + callback.getMsgId(), JSON.toJSONString(door), 30L, TimeUnit.SECONDS);
                 // 获取trunk_ajar_st_new值
                 Object trunkAjarStNewObj = door.get("trunk_ajar_st_new");
                 if (trunkAjarStNewObj != null) {
@@ -115,4 +122,52 @@
             return null;
         }
     }
+
+
+    /**
+     * 从回调消息中解析车辆空调状态数据
+     */
+    private VehicleTemperatureDto parseAirConditioningSwitchFromCallback(CarControlCallbackDTO callback) {
+        try {
+            if (callback.getMsgContent() == null) {
+                return null;
+            }
+
+            log.debug("解析空调状态数据: msgId={}, content={}", callback.getMsgRef(), JSON.toJSONString(callback.getMsgContent()));
+
+            // 解析msgContent为Map结构
+            Map<String, Object> msgContent = (Map<String, Object>) callback.getMsgContent();
+
+            // 检查返回码
+            Integer code = (Integer) msgContent.get("code");
+            if (code == null || code != 200) {
+                log.warn("空调状态回调返回错误码: msgId={}, code={}", callback.getMsgRef(), code);
+                return null;
+            }
+
+            // 获取instant数据
+            Map<String, Object> instant = (Map<String, Object>) msgContent.get("instant");
+            if (instant == null) {
+                log.warn("回调数据中缺少instant字段: msgId={}", callback.getMsgRef());
+                return null;
+            }
+
+            // 创建VehicleTemperatureDto对象
+            VehicleTemperatureDto stateData = new VehicleTemperatureDto();
+            Map<String, VehicleStateVo> stateMap = new HashMap<>();
+
+            // 解析hvac信息
+            Map<String, Object> hvac = (Map<String, Object>) instant.get("hvac");
+            if (hvac != null) {
+                log.info("解析到空调: msgId={}, hvac_on={}", callback.getMsgRef(), JSON.toJSONString(hvac));
+                //存入缓存用于后续使用
+                redisService.setCacheObject("HVAC:" + callback.getMsgId(), JSON.toJSONString(hvac), 30L, TimeUnit.SECONDS);
+            }
+            stateData.setStateMap(stateMap);
+            return stateData;
+        } catch (Exception e) {
+            log.warn("解析空调状态数据失败: msgId={}", callback.getMsgRef(), e);
+            return null;
+        }
+    }
 }

--
Gitblit v1.7.1