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