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/service/KafkaConsumerService.java |  162 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 85 insertions(+), 77 deletions(-)

diff --git a/xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java b/xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
index 44f658b..865ca65 100644
--- a/xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
+++ b/xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
@@ -6,12 +6,15 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
 import com.xiaopeng.api.dto.operation.LonLatDto;
+import com.xiaopeng.api.dto.operation.ReassignOrderDTO;
 import com.xiaopeng.api.dto.order.PopOrderDto;
 import com.xiaopeng.api.dto.pushMessage.PushOrderRouteDTO;
 import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
 import com.xiaopeng.api.feignClient.map.XpMapClient;
+import com.xiaopeng.api.feignClient.operation.ReassignOrderClient;
 import com.xiaopeng.api.feignClient.order.XpOrderClient;
 import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
+import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
 import com.xiaopeng.api.model.order.XpOrder;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
@@ -32,6 +35,7 @@
 import com.xiaopeng.api.vo.automaticPilot.proto.up.xpuNavigationRequest.NavigationRequest;
 import com.xiaopeng.api.vo.automaticPilot.proto.up.xpuNavigationRequest.OrderPhase;
 import com.xiaopeng.api.vo.operation.RouteVo;
+import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
 import com.xiaopeng.automaticPilot.util.XPUUtil;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.enums.OrderStatusEnum;
@@ -52,6 +56,9 @@
 import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+
+import static org.bouncycastle.asn1.x500.style.RFC4519Style.l;
+import static org.bouncycastle.asn1.x500.style.RFC4519Style.uid;
 
 /**
  * Kafka 消费者服务
@@ -77,9 +84,13 @@
 
     @Autowired
     public RedisTemplate redisTemplate;
+    @Autowired
+    private UserVehicleClient userVehicleClient;
 
     @Resource
     private XpPushMessageClient xpPushMessageClient;
+    @Autowired
+    private ReassignOrderClient reassignOrderClient;
 
 
 
@@ -89,6 +100,24 @@
      */
     public void topicProdRobotaxiXpuHigh(String message) {
         MsgContent msgContent = JSON.parseObject(message, MsgContent.class);
+        handleXPUMessage(msgContent, message);
+    }
+
+    /**
+     * 消费消息 - XPU上报Robotaxi云端的消息topic(低优先级)
+     */
+    public void topicProdRobotaxiXpuNormal(String message) {
+        MsgContent msgContent = JSON.parseObject(message, MsgContent.class);
+        handleXPUMessage(msgContent, message);
+    }
+
+
+    /**
+     * 处理XPU消息
+     * @param msgContent
+     * @param message
+     */
+    public void handleXPUMessage(MsgContent msgContent, String message){
         RtMsgHeader header = msgContent.getHeader();
         MessageType type = header.getType();
         //处理请求消息
@@ -166,94 +195,21 @@
                 Object sequence = redisTemplate.opsForValue().get(requestSeq);
                 if(sequence!=null){
                     String[] split = sequence.toString().split("_");
-                    if(split[0].equals("pushOrder")){
+                    String typeStr = split[0];
+                    // 推单处理
+                    if(typeStr.equals("pushOrder")){
                         PopOrderDto dto = new PopOrderDto();
                         dto.setOrderId(Long.valueOf(split[1]));
                         dto.setXpVehicleVin(split[2]);
                         xpOrderClient.popOrder(dto);
                     }
                 }
-
-
             }
         }
     }
 
-    /**
-     * 消费消息 - XPU上报Robotaxi云端的消息topic(低优先级)
-     */
-    public void topicProdRobotaxiXpuNormal(String message) {
-        MsgContent msgContent = JSON.parseObject(message, MsgContent.class);
-        RtMsgHeader header = msgContent.getHeader();
-        MessageType type = header.getType();
-        //处理请求消息
-        if (MessageType.MESSAGE_TYPE_REQUEST == type) {
-            //区分业务类型
-            RTCmdType cmd = header.getCmd();
-            switch (cmd) {
-                case SYSTEM_STATUS_XPU:
-                    log.info("XPU发布系统运行状态 (XPU→云端):{}", message);
-                    systemStatusXpu(msgContent);
-                    break;
-                case XPU_NAVIGATION_REQUEST:
-                    log.info("XPU向云端请求导航 (XPU→云端):{}", message);
-                    xpuNavigationRequest(msgContent);
-                    break;
-                case TRIP_STATUS_UPDATE_EVENT:
-                    log.info("行程状态更新(XPU→云端)(XPU→座舱):{}", message);
-                    break;
-                case PULLOVER_STATUS_EVENT:
-                    log.info("靠边停车状态(XPU→云端)(XPU→座舱):{}", message);
-                    break;
-                case DRIVING_MODE_UPDATE_EVENT:
-                    log.info("驾驶模式变化(XPU→云端)(XPU→座舱):{}", message);
-                    break;
-                case SYSTEM_STATUS_UPDATE_EVENT:
-                    log.info("系统状态变化(XPU→云端)(XPU→座舱):{}", message);
-                    break;
-                case TASK_STATE_UPDATE_EVENT:
-                    log.info("任务状态变化(XPU→云端)(XPU→座舱):{}", message);
-                    break;
-                case ORDER_STATE_UPDATE_EVENT:
-                    log.info("订单状态变化(XPU→云端)(XPU→座舱):{}", message);
-                    orderStateUpdateEvent(msgContent);
-                    break;
-                case POINT_ARRIVAL_STATUS_EVENT:
-                    log.info("到达目标点状态(XPU→云端)(XPU→座舱):{}", message);
-                    break;
-                case PICKUP_CONFIRMATION_EVENT:
-                    log.info("用户上车确认(XPU→云端)(XPU→座舱):{}", message);
-                    break;
-                case DROPOFF_INFO_EVENT:
-                    log.info("用户下车信息(XPU→云端):{}", message);
-                    break;
-                case NAVIGATION_DEVIATION_EVENT:
-                    log.info("导航偏航(XPU→云端):{}", message);
-                    navigationDeviationEvent(msgContent);
-                    break;
-                case EMERGENCY_STOP_EVENT:
-                    log.info("急停(XPU→云端)(XPU→座舱):{}", message);
-                    break;
-                case NAVIGATION_UPDATE_EVENT:
-                    log.info("导航信息变化(XPU→云端):{}", message);
-                    break;
-                case TASK_QUEUE_UPDATE_EVENT:
-                    log.info("XPU待执行任务队列(XPU→云端):{}", message);
-                    break;
-                case SYSTEM_STATE_ANAPSHOT_SYNC_EVENT:
-                    log.info("每次MQTT连接之后触发 (XPU→云端):{}", message);
-                    break;
-                case ORDER_STATE_UPDATE_TO_CDU_EVENT:
-                    log.info("更新订单状态到CDU (XPU→云端):{}", message);
-                    break;
-                default:
-                    log.info("消息不在处理范围内,忽略:{}", message);
-            }
 
 
-        }
-
-    }
 
 
     /**
@@ -273,7 +229,9 @@
         Float alt = naviPose.getAlt();
         //获取车辆静态信息
         VehicleStaticInfo staticInfo = systemRuntimeStatus.getVehicle_status().getStatic_info();
-        String vin = staticInfo.getVin();
+        String xpuId = staticInfo.getXpu_id();
+        XpVehicle xpVehicle = xpVehicleClient.findByVehicleXpuId(xpuId).getData();
+        String vin = xpVehicle.getVehicleVin();
         //先响应消息
         Long sequence = msgContent.getHeader().getSequence();
         responseMessage(sequence, vin);
@@ -325,6 +283,56 @@
 
 
     /**
+     * XPU发布系统运行状态---车辆实时位置
+     *
+     * @param msgContent
+     */
+    public void systemStatusXpuAndReassign(MsgContent msgContent) {
+        //开始处理消息对应的业务逻辑
+        SystemRuntimeStatus systemRuntimeStatus = msgContent.getContent_detail().getObject("systemRuntimeStatus", SystemRuntimeStatus.class);
+        AbnormalReason abnormalReason = systemRuntimeStatus.getSystem_status().getAbnormal_reason();
+        // 判断是否为故障状态
+        if (abnormalReason == AbnormalReason.FAULT) {
+            log.info("车辆故障,开始处理故障");
+            // TODO 添加异常任务
+            // 解绑用户与车辆关系
+            CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo();
+            String orderId = systemRuntimeStatus.getRunning_order_status_info().getOrder_id();
+            XpOrder xpOrder = xpOrderClient.queryOrderById(Long.parseLong(orderId)).getData();
+            XpVehicle vehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
+            if (vehicle != null) {
+                // 修改车辆状态
+                vehicle.setOperatingStatus(4);
+                xpVehicleClient.updateVehicleById(vehicle);
+                cancelTaxiPassengerVo.setVin(vehicle.getVehicleVin());
+                cancelTaxiPassengerVo.setUid(xpOrder.getAppUserId().toString());
+                cancelTaxiPassengerVo.setOrderNo(xpOrder.getOrderNumber());
+                // TODO
+//            cancelTaxiPassengerVo.setAppId();
+                userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo);
+            }
+            // 取消订单
+            R<?> r = xpOrderClient.cancelOrder(String.valueOf(xpOrder.getId()));
+            if (r.getCode() == R.SUCCESS){
+                log.info("取消订单成功");
+                // 重新派单
+                ReassignOrderDTO reassignOrderDTO = new ReassignOrderDTO();
+                reassignOrderDTO.setUid(xpOrder.getAppUserId().toString());
+                reassignOrderDTO.setOrderNo(xpOrder.getOrderNumber());
+                reassignOrderDTO.setCount(10);
+                RealtimePose pose = systemRuntimeStatus.getPose();
+                Wgs naviPose = pose.getNavi_pose();
+                Double latitude = naviPose.getLatitude();
+                Double longitude = naviPose.getLongitude();
+                reassignOrderDTO.setLongitude(longitude);
+                reassignOrderDTO.setLatitude(latitude);
+                reassignOrderClient.reassignOrder(reassignOrderDTO);
+            }
+        }
+    }
+
+
+    /**
      * XPU向云端请求导航
      *
      * @param msgContent

--
Gitblit v1.7.1