From a98b1ad3334d92aee1af5a2e5c439c742855cdeb Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 07 三月 2026 21:12:12 +0800
Subject: [PATCH] 合并代码

---
 xp-robotaxi-automaticPilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java |   59 +++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 49 insertions(+), 10 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 65f7f82..321f25e 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,8 +6,10 @@
 import com.alibaba.fastjson2.JSON;
 import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
 import com.xiaopeng.api.dto.operation.LonLatDto;
+import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
 import com.xiaopeng.api.feignClient.map.XpMapClient;
 import com.xiaopeng.api.feignClient.order.XpOrderClient;
+import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
 import com.xiaopeng.api.model.order.XpOrder;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
@@ -18,20 +20,22 @@
 import com.xiaopeng.api.vo.automaticPilot.proto.up.MsgContent;
 import com.xiaopeng.api.vo.automaticPilot.proto.up.RTCmdType;
 import com.xiaopeng.api.vo.automaticPilot.proto.up.RtMsgHeader;
-import com.xiaopeng.api.vo.automaticPilot.proto.up.systemStatusXpu.RealtimePose;
-import com.xiaopeng.api.vo.automaticPilot.proto.up.systemStatusXpu.SystemRuntimeStatus;
-import com.xiaopeng.api.vo.automaticPilot.proto.up.systemStatusXpu.VehicleStaticInfo;
-import com.xiaopeng.api.vo.automaticPilot.proto.up.systemStatusXpu.Wgs;
+import com.xiaopeng.api.vo.automaticPilot.proto.up.systemStatusXpu.*;
 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.automaticPilot.util.XPUUtil;
 import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.utils.uuid.UUID;
+import com.xiaopeng.common.redis.service.RedisService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -61,7 +65,11 @@
     @Resource
     private XPUUtil xpuUtil;
 
+    @Autowired
+    public RedisTemplate redisTemplate;
 
+    @Resource
+    private XpPushMessageClient xpPushMessageClient;
 
 
     /**
@@ -153,6 +161,7 @@
             switch (cmd) {
                 case SYSTEM_STATUS_XPU:
                     log.info("XPU发布系统运行状态 (XPU→云端):{}", message);
+                    systemStatusXpu(msgContent);
                     break;
                 case XPU_NAVIGATION_REQUEST:
                     log.info("XPU向云端请求导航 (XPU→云端):{}", message);
@@ -229,12 +238,42 @@
         //获取车辆静态信息
         VehicleStaticInfo staticInfo = systemRuntimeStatus.getVehicle_status().getStatic_info();
         String vin = staticInfo.getVin();
-        xpVehicleClient.
-        VehiclePosition vehiclePosition = new VehiclePosition();
-        vehiclePosition.setVehicle_id(staticInfo.getVehicle_id());
-        mongoTemplate.save()
+        redisTemplate.opsForGeo().add("vehiclePosition:" + vin, new GeoJsonPoint(longitude, latitude), vin);
 
-
+        //保存车辆实时信息到mongodb
+        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class);
+        if(null == vehiclePosition){
+            vehiclePosition = new VehiclePosition();
+        }
+        vehiclePosition.setVin(vin);
+        vehiclePosition.setPoint(new GeoJsonPoint(longitude, latitude));
+        vehiclePosition.setCourse(course);
+        vehiclePosition.setAlt(alt);
+        VehicleStatus vehicleStatus = systemRuntimeStatus.getVehicle_status();
+        //车辆动态信息
+        VehicleDynamicStatus dynamicStatus = vehicleStatus.getDynamic_status();
+        dynamicStatus.setSpeed(dynamicStatus.getSpeed());
+        vehiclePosition.setCurrentElectricity(dynamicStatus.getBattery_level());
+        //订单信息
+        OrderStatusInfo runningOrderStatusInfo = systemRuntimeStatus.getRunning_order_status_info();
+        Long orderId = null;
+        String order_id = runningOrderStatusInfo.getOrder_id();
+        vehiclePosition.setHasOrder(0);
+        if(StringUtils.isNotEmpty(order_id)){
+            if(order_id.contains("XU")){
+                vehiclePosition.setHasOrder(1);
+                orderId = Long.parseLong(order_id.substring(2));
+            }else{
+                orderId = Long.parseLong(order_id);
+            }
+        }
+        vehiclePosition.setOrderId(orderId);
+        mongoTemplate.save(vehiclePosition);
+        //调用推送服务接口
+        SendMessageDTO dto = new SendMessageDTO();
+        dto.setAppUserId(orderId);
+        dto.setMessage(JSON.toJSONString(vehiclePosition));
+        xpPushMessageClient.sendVehicleLocation(dto);
     }
 
 
@@ -301,7 +340,7 @@
             //驶往上车点的行程
             if(orderPhase.equals(OrderPhase.ROUTE_TO_PICKUP)){
                 XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
-                VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("orderId").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
+                VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
                 if(Objects.isNull(vehiclePosition)){
                     throw new RuntimeException("车辆位置信息不存在");
                 }

--
Gitblit v1.7.1