From 912a4cfecbc4f0783e2045fb2287c5110ec64767 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 13 二月 2026 22:01:45 +0800
Subject: [PATCH] bug修改,计算费用工具类

---
 xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java |   52 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 44 insertions(+), 8 deletions(-)

diff --git a/xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java b/xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java
index 971dd31..a004bcd 100644
--- a/xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java
+++ b/xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/XPUUtil.java
@@ -8,16 +8,23 @@
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
 import com.xiaopeng.api.dto.automaticPilot.MqttPublishDto;
+import com.xiaopeng.api.feignClient.automaticPilot.VmpOpenServiceClient;
 import com.xiaopeng.api.feignClient.automaticPilot.XPUClient;
 import com.xiaopeng.api.vo.automaticPilot.MqttPublishVo;
 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;
 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;
 
 /**
  * 自动驾驶接口对接文档
@@ -28,6 +35,15 @@
 
     @Resource
     private XPUClient xpuClient;
+
+    @Resource
+    private VmpOpenServiceClient vmpOpenServiceClient;
+
+    // 查询车管绑定类型,1:XPUID,2:待扩展
+    public static final String XPU_ID_TYPE = "1";
+    // 查询车管 车辆xpuid信息返回字段,用于按需返回字段
+    public static final List<String> TYPE_LIST = Collections.singletonList("1");
+
 
 
     /**
@@ -51,10 +67,11 @@
         jsonObject.put("task", task);
         msgContent.setContent_detail(jsonObject);
         log.info("云端-->XPU 创建订单:{}", msgContent);
-
+        //根据车辆VIN查询XPUID
+        String xpuId = getXpuIdByVin(vin);
         //组装请求消息体
         MqttPublishVo vo = new MqttPublishVo();
-        vo.setTopic("topic-prod-xpu-robotaxi-high/" + vin);
+        vo.setTopic("topic-prod-xpu-robotaxi-high/" + xpuId);
         vo.setPayload(JSON.toJSONString(msgContent));
         return xpuClient.publish(vo);
     }
@@ -82,14 +99,12 @@
         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-prod-xpu-robotaxi-high/" + vin);
+        vo.setTopic("topic-prod-xpu-robotaxi-high/" + xpuId);
         vo.setPayload(JSON.toJSONString(msgContent));
-
-
-
-
         return xpuClient.publish(vo);
     }
 
@@ -118,11 +133,32 @@
         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-prod-xpu-robotaxi-high/" + vin);
+        vo.setTopic("topic-prod-xpu-robotaxi-high/" + xpuId);
         vo.setPayload(JSON.toJSONString(msgContent));
         return xpuClient.publish(vo);
     }
 
+
+
+
+    /**
+     * @description: 根据vin查询xpuId
+     * @param: vin
+     * @return: xpuId
+     */
+    public String getXpuIdByVin(String vin)  {
+        Map<String, String> xpuIdMapping = vmpOpenServiceClient.getVehicleBindInfoByVin(vin, TYPE_LIST);
+        log.info("getMqttPublishTopic vin,{},xpuIdMapping,{}", vin,  JSON.toJSONString(xpuIdMapping));
+        if (xpuIdMapping == null || StringUtils.isEmpty(xpuIdMapping.get(XPU_ID_TYPE)) ) {
+            log.error("根据vin查询车辆xpuid信息为空,vin={}", vin);
+            throw new RuntimeException("根据vin查询车辆xpuid信息为空");
+        }
+        return xpuIdMapping.get(XPU_ID_TYPE);
+    }
+
+
 }

--
Gitblit v1.7.1