From f443bf994990854466787e2acbc983fb47cea3e4 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 16 四月 2026 16:00:50 +0800
Subject: [PATCH] Merge branch '1.0' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java |   78 ++++++++++++++++++++------------------
 1 files changed, 41 insertions(+), 37 deletions(-)

diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
index 0635290..ec76fa1 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -49,7 +49,9 @@
 
 import javax.annotation.Resource;
 import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -107,6 +109,8 @@
 
     // 自定义线程池
     private static final ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
+
+//    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(20);
 
     static {
         threadPoolTaskExecutor.setCorePoolSize(20);
@@ -1059,16 +1063,8 @@
                             continue;
                         }
                         log.info("关闭巡游单成功 {} {}", vehicleId1.getPlateNumber(), orderNo);
-                        PushOrderDto pushOrderDto = new PushOrderDto();
+                        PushOrderDto pushOrderDto = buildPushOrderDto(xpOrder);
                         pushOrderDto.setVin(vehiclePosition.getVin());
-                        pushOrderDto.setOrderId(xpOrder.getId().toString());
-                        pushOrderDto.setStartLatitude(xpOrder.getStartLat());
-                        pushOrderDto.setStartLongitude(xpOrder.getStartLon());
-                        pushOrderDto.setEndLatitude(xpOrder.getEndLat());
-                        pushOrderDto.setEndLongitude(xpOrder.getEndLon());
-                        pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
-                        pushOrderDto.setOrderType(OrderType.USER_ORDER);
-                        pushOrderDto.setStage(1);
                         // 调用推送服务  orderId + carVin
                         orderMissionClient.pushOrder(pushOrderDto);
                         log.info("开始推送 {} 订单到XPU", xpOrder.getOrderNumber());
@@ -1090,9 +1086,8 @@
             if (vehiclePositionVos.getCode() != 200) {
                 continue;
             }
+
             LonLatDto lonLatDto = new LonLatDto(Double.parseDouble(split[0]), Double.parseDouble(split[1]));
-            RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
-            routeAndFareDto.setDestination(lonLatDto);
 
             Optional<XpOrder> lucyOrderOpt = servingVehicles.getData().stream()
                     //获取位置
@@ -1101,37 +1096,51 @@
                     .map(xpOrderClient::queryOrderById)
                     .filter(R::isSuccess)
                     .map(R::getData)
-                    .filter(o -> isClose(o, routeAndFareDto))
+                    .filter(o -> {
+                        RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
+                        routeAndFareDto.setDestination(lonLatDto);
+                        return isClose(o, routeAndFareDto);
+                    })
                     .findAny();
 
             if (lucyOrderOpt.isPresent()) {
                 XpOrder lucyOder = lucyOrderOpt.get();
+                log.info("有空闲车辆 {} 订单 {}", lucyOder.getOrderNumber(), orderNo);
+                XpVehicle xpVehicle = xpVehicleClient.queryById(lucyOder.getVehicleId()).getData();
+                // 设置路线信息
+                RouteAndFareDto routeAndFareDto = new RouteAndFareDto();
+                routeAndFareDto.setDestination(lonLatDto);
                 routeAndFareDto.setOrigin(new LonLatDto(lucyOder.getEndLon(),lucyOder.getEndLat()));
-                routeAndFareDto.setOrigin(lonLatDto);
-
-                RouteAndFareDto routeAndFare = null;//TODO 获取导航路线
-                if (null == routeAndFare) { //轨迹不在运营区
-                    continue;
-                }
-                // 当轨迹是否在运营区内,存储
-                xpOrder.setStatus(1);
-                xpOrderClient.updateOrder(xpOrder);
-                scheduler.scheduleWithFixedDelay(this::pushProgress, 0, 5, TimeUnit.SECONDS);
+                Object cacheObject = redisService.getCacheObject(CacheConstants.navigationEnd(lucyOder.getAppUserId().toString()));
+                RouteVo routeRemain = JSON.parseObject(cacheObject.toString(), RouteVo.class);
+                RouteVo routeToOrigin = xpMapClient.getDistanceAndDuration(routeAndFareDto).getData();
+                routeToOrigin.getPolyline().addAll(0, routeRemain.getPolyline());
+                routeToOrigin.setDuration(routeToOrigin.getDuration() + routeRemain.getDuration());
+                routeToOrigin.setDistance(routeToOrigin.getDistance() + routeRemain.getDistance());
+                PushOrderDto pushOrderDto = buildPushOrderDto(xpOrder);
+                pushOrderDto.setVin(xpVehicle.getVehicleVin());
+                // 订单流转
+                orderMissionClient.pushOrder(pushOrderDto);
+                redisService.setCacheObject(CacheConstants.nextOrder(lucyOder.getId().toString()), xpOrder.getId());
+                redisService.setCacheObject(CacheConstants.navigationStart(xpOrder.getAppUserId().toString()), routeToOrigin);
+                redisService.removeByPattern(quoteName,xpOrder.getOrderNumber());
+                log.info("将订单 {} 从队列 {} 弹出去", orderNo, quoteName);
             }
         }
         return false;
     }
 
-    private void pushProgress() {
-        //TODO 调用push message 服务
+    private static PushOrderDto buildPushOrderDto(XpOrder xpOrder) {
         PushOrderDto pushOrderDto = new PushOrderDto();
-//        pushOrderDto.setVin(lucyOrder.get().getVin());
-//        pushOrderDto.setOrderId(xpOrder.getId().toString());
-//        pushOrderDto.setStartLatitude(xpOrder.getStartLat());
-//        pushOrderDto.setStartLongitude(xpOrder.getStartLon());
-//        pushOrderDto.setEndLatitude(xpOrder.getEndLat());
-//        pushOrderDto.setEndLongitude(xpOrder.getEndLon());
-//        pushOrderDto.setOrderType(OrderType.USER_ORDER);
+        pushOrderDto.setOrderId(xpOrder.getId().toString());
+        pushOrderDto.setStartLatitude(xpOrder.getStartLat());
+        pushOrderDto.setStartLongitude(xpOrder.getStartLon());
+        pushOrderDto.setEndLatitude(xpOrder.getEndLat());
+        pushOrderDto.setEndLongitude(xpOrder.getEndLon());
+        pushOrderDto.setEndPoiName(xpOrder.getEndPointName());
+        pushOrderDto.setOrderType(OrderType.USER_ORDER);
+        pushOrderDto.setStage(1);
+        return pushOrderDto;
     }
 
     private boolean isClose(XpOrder xpOrder,RouteAndFareDto routeAndFareDto) {
@@ -1142,11 +1151,6 @@
 
     @Resource
     private MongoTemplate mongoTemplate;
-    boolean isClose(Long orderId) {
-        // yong id 去查目的地坐标,判断是否小于800
-        return false;
-    }
-
 
 
     /**

--
Gitblit v1.7.1