From 52e0d9f8bb4b82a9869286a6fe2bbd9f7c5d1098 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期六, 14 三月 2026 14:07:13 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |   61 +++++++++++++++++++++++-------
 1 files changed, 46 insertions(+), 15 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 6d44021..adfa25b 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
@@ -948,6 +948,7 @@
             returnOrder.setStatus(1);    // 进行中
             returnOrder.setLastOrderId(lastCruise.getId());
             returnOrder.setCreateTime(LocalDateTime.now());
+            returnOrder.setMissionId(lastCruise.getMissionId());
 
             // 返程起点 = 当前订单的终点(车辆当前位置附近)
             returnOrder.setStartPointId(order.getEndPointId());
@@ -1991,17 +1992,39 @@
         xpCruiseOrder.setStartLat(order.getEndLat());
 
         // 完成的直接走终点   终止的走起点
-        if (temp == 0) {
-            xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId());
-            xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName());
-            xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon());
-            xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat());
-        } else {
-            xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId());
-            xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName());
-            xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon());
-            xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat());
+        if(null != xpCruiseOrders){
+            if (temp == 0) {
+                //当上一笔单有起点点位,才需要将上一笔巡游单的起点作为本次的终点导航
+                //上一笔单没有起点点位,统一用后面的巡游计划的第一个点位作为本次的终点导航
+                if(null != xpCruiseOrders.getStartPointId()){
+                    xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId());
+                    xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName());
+                    xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon());
+                    xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat());
+                }
+            } else {
+                xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId());
+                xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName());
+                xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon());
+                xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat());
+            }
+            xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
+            xpCruiseOrder.setMissionId(xpCruiseOrders.getMissionId());
         }
+        //所有没有赋值终点点位的情况,全部导航到巡游计划的第一个点位开始执行巡游任务
+        if(null == xpCruiseOrder.getEndPointId()){
+            // 先找计划
+            List<XpCruisePlanPoint> planPointList = xpCruisePlanClient.getCruisePlanPointList(vehicle.getId()).getData();
+            XpCruisePlanPoint xpCruisePlanPoint = planPointList.get(0);
+            Long endPointId = xpCruisePlanPoint.getPointId();
+            XpPoint endPoint = xpPointClient.queryById(endPointId).getData();
+            xpCruiseOrder.setEndPointId(endPointId);
+            xpCruiseOrder.setEndPointName(endPoint.getPointName());
+            xpCruiseOrder.setEndLon(endPoint.getPointLon());
+            xpCruiseOrder.setEndLat(endPoint.getPointLat());
+            xpCruiseOrder.setMissionId(xpCruisePlanPoint.getCruisePlanId());
+        }
+
 
 
         xpCruiseOrder.setStatus(0);
@@ -2083,10 +2106,14 @@
         // 完成的直接走终点   终止的走起点
         if(null != xpCruiseOrders){
             if (temp == 0) {
-                xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId());
-                xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName());
-                xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon());
-                xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat());
+                //当上一笔单有起点点位,才需要将上一笔巡游单的起点作为本次的终点导航
+                //上一笔单没有起点点位,统一用后面的巡游计划的第一个点位作为本次的终点导航
+                if(null != xpCruiseOrders.getStartPointId()){
+                    xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId());
+                    xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName());
+                    xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon());
+                    xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat());
+                }
             } else {
                 xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId());
                 xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName());
@@ -2094,7 +2121,10 @@
                 xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat());
             }
             xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
-        }else{
+            xpCruiseOrder.setMissionId(xpCruiseOrders.getMissionId());
+        }
+        //所有没有赋值终点点位的情况,全部导航到巡游计划的第一个点位开始执行巡游任务
+        if(null == xpCruiseOrder.getEndPointId()){
             // 先找计划
             List<XpCruisePlanPoint> planPointList = xpCruisePlanClient.getCruisePlanPointList(vehicle.getId()).getData();
             XpCruisePlanPoint xpCruisePlanPoint = planPointList.get(0);
@@ -2104,6 +2134,7 @@
             xpCruiseOrder.setEndPointName(endPoint.getPointName());
             xpCruiseOrder.setEndLon(endPoint.getPointLon());
             xpCruiseOrder.setEndLat(endPoint.getPointLat());
+            xpCruiseOrder.setMissionId(xpCruisePlanPoint.getCruisePlanId());
         }
 
 

--
Gitblit v1.7.1