From 06006887e9625a5d8b2f348ce9aca65ee296c768 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 25 二月 2026 18:49:59 +0800
Subject: [PATCH] 修改推送导航数据逻辑

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |  121 ++++++++++++++++++++++++++++++----------
 1 files changed, 90 insertions(+), 31 deletions(-)

diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index c017bdb..4a458e9 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -5,6 +5,7 @@
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -41,8 +42,10 @@
 import com.xiaopeng.api.model.order.*;
 import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
+import com.xiaopeng.api.vo.OrderType;
 import com.xiaopeng.api.vo.account.UserCouponVo;
 import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.OrderOperationType;
+import com.xiaopeng.api.vo.operation.RouteVo;
 import com.xiaopeng.api.vo.order.*;
 import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
 import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
@@ -1649,46 +1652,102 @@
     @Transactional
 //    @ShardingTransactionType(TransactionType.BASE)
     public void popOrder(PopOrderDto dto) {
-        XpOrder order = this.getById(dto.getOrderId());
-        order.setAcceptanceTime(LocalDateTime.now());
-        AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
-        R<XpVehicle> byVehicleVin = xpVehicleClient.findByVehicleVin(dto.getXpVehicleVin());
-        XpVehicle vehicle = null;
-        if (byVehicleVin.getCode() == 200) {
-            vehicle = byVehicleVin.getData();
-            order.setVehicleId(vehicle.getId());
-            addTaxiPassengerVo.setVin(vehicle.getVehicleVin());
+        String orderType = dto.getOrderType();
+        Long orderId = dto.getOrderId();
+        //巡游单处理逻辑
+        if(OrderType.CRUISE_ORDER.equals(orderType)){
+            // todo 需要处理巡游的逻辑
+
+
+
         }
-        order.setStatus(2);
+        //乘客单处理逻辑
+        if(OrderType.USER_ORDER.equals(orderType)){
+            XpOrder order = this.getById(orderId);
+            //订单为待接单状态
+            if(order.getStatus() == 1){
+                AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
+                order.setAcceptanceTime(LocalDateTime.now());
+                R<XpVehicle> byVehicleVin = xpVehicleClient.findByVehicleVin(dto.getXpVehicleVin());
+                XpVehicle vehicle = null;
+                if (byVehicleVin.getCode() == 200) {
+                    vehicle = byVehicleVin.getData();
+                    order.setVehicleId(vehicle.getId());
+                    addTaxiPassengerVo.setVin(vehicle.getVehicleVin());
+                }
+                order.setStatus(2);
 
-        addTaxiPassengerVo.setUid(order.getAppUserId().toString());
-        addTaxiPassengerVo.setOrderNo(order.getOrderNumber());
-        // TODO appid
-        addTaxiPassengerVo.setAppId("");
+                // Redis弹出这个队列元素
+                // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
+                String popFirstElement = redisService.popFirstElement(order.getQueueName());
+                XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
+                String[] split = popFirstElement.split("_");
+                xpGeoQueryEntity.setOrderId(split[0]);
+                // 存mongo数据
+                xpPricingClient.updateXpGeoQueryEntity(split[0]);
+                this.updateById(order);
 
-        BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
-        if (baseVehicleUserDto.getCode() == 200) {
+                // 修改车辆信息
+                vehicle.setState(1);
+                xpVehicleClient.updateVehicleById(vehicle);
 
-            // Redis弹出这个队列元素
-            // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
-            String popFirstElement = redisService.popFirstElement(order.getQueueName());
-            XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
-            String[] split = popFirstElement.split("_");
-            xpGeoQueryEntity.setOrderId(split[0]);
-            // 存mongo数据
-            xpPricingClient.updateXpGeoQueryEntity(split[0]);
-            this.updateById(order);
-
-            // 修改车辆信息
-            vehicle.setState(1);
-            xpVehicleClient.updateVehicleById(vehicle);
-
-
+                //绑定用户和车辆关系
+                addTaxiPassengerVo.setUid(order.getAppUserId().toString());
+                addTaxiPassengerVo.setOrderNo(order.getOrderNumber());
+                // TODO appid
+                addTaxiPassengerVo.setAppId("");
+                userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
+                //推送乘客车辆到达预约点的导航数据
+                sendRoute(order.getAppUserId().toString(), orderId, "ORDER_NAVIGATION_START_DATA");
+            }else{
+                //推送行起点到终点的驶轨迹给乘客端
+                sendRoute(order.getAppUserId().toString(), orderId, "ORDER_NAVIGATION_END_DATA");
+            }
         }
     }
 
 
     /**
+     * 发送乘客导航路径数据
+     * @param appUserId
+     * @param keyStr
+     */
+    public void sendRoute(String appUserId, Long orderId, String keyStr){
+        Object cacheObject = redisService.getCacheObject(keyStr + ":" + appUserId);
+        if(null != cacheObject){
+            RouteVo routeVo = JSON.parseObject(cacheObject.toString(), RouteVo.class);
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("type", "ORDER_ROUTE");
+            jsonObject.put("timestamp", System.currentTimeMillis());
+            JSONObject content = new JSONObject();
+            content.put("orderId", orderId);
+            content.put("routeType", "ORDER_NAVIGATION_START_DATA".equals(keyStr) ? 1 : 2);
+            JSONObject route = new JSONObject();
+            route.put("distance", routeVo.getDistance());
+            route.put("duration", routeVo.getDuration());
+            route.put("routeID", routeVo.getRouteID());
+
+            List<JSONObject> collect = routeVo.getPolyline().stream().map(item->{
+                JSONObject point = new JSONObject();
+                point.put("latitude", item.getLatitude());
+                point.put("longitude", item.getLongitude());
+                return point;
+            }).collect(Collectors.toList());
+
+            route.put("polyline", collect);
+            content.put("route", route);
+            jsonObject.put("content", content);
+            SendMessageDTO messageDTO = new SendMessageDTO();
+            messageDTO.setAppUserId(appUserId);
+            messageDTO.setMessage(jsonObject.toJSONString());
+            xpPushMessageClient.sendRoute(messageDTO);
+        }
+    }
+
+
+
+
+    /**
      * 获取当前用户正在执行的订单
      *
      * @param uid

--
Gitblit v1.7.1