From 40336cf9405d83bb045cc703e1a8f98264a1a0d5 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 02 三月 2026 14:16:35 +0800
Subject: [PATCH] update

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |  235 ++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 155 insertions(+), 80 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 0c6ed38..b85b47f 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
@@ -1469,93 +1469,168 @@
             // 修改车辆状态
             vehicle.setState(0);
 
-            // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作
-            R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail();
-            XpTaskRule xpTaskRule = xpTaskRuleR.getData();
 
-            // 生成新的巡游单子 回到最新巡游的初始起点位置
-            XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
-            int temp=0;
-            if(xpCruiseOrders==null){
-                temp=1;
-                //特殊情况 可能没有产生终止的订单  (到站点就被正常接单了)所以找正常订单
-                xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
-            }
-            XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
-            xpCruiseOrder.setVehicleId(vehicle.getId());
-            xpCruiseOrder.setFleetId(vehicle.getFleetId());
-            xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin());
-            xpCruiseOrder.setOrderType(2);
-            // 返程起点是当前正常订单的终点
-            xpCruiseOrder.setStartPointId(order.getEndPointId());
-            xpCruiseOrder.setStartPointName(order.getEndPointName());
-            xpCruiseOrder.setStartLon(order.getEndLon());
-            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());
-            }
-
-
-            xpCruiseOrder.setStatus(0);
-            xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
-            xpCruiseOrder.setCreateTime(LocalDateTime.now());
-            xpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
-
-            // 判断当前时分秒是否大于收车时间
-            LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
-            if (vehicleCollectionTime.isBefore(LocalTime.now())) {
-                vehicle.setOperatingStatus(3);
-                //找到车辆的收车点位 更新终点点位
-                R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
-                xpCruiseOrder = returnCruisePoint.getData();
-            }
-            xpVehicleClient.updateVehicleById(vehicle);
-
-            xpCruiseOrderMapper.insert(xpCruiseOrder);
-
-
-            R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId());
-            XpPoint data = xpPointR.getData();
-            //下发命令
-            // 添加自动结束行程定时任务job
-            Map<String, ? extends Object> jobMaps =
-                    new ImmutableMap.Builder<String, String>().
-                            put("id", xpCruiseOrder.getId())
-                            .build();
-            QuartzManager.addJob(
-                    AddCruiseMissionJob.class,
-                    (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(),
-                    TimeJobType.ADD_CRUISE_MISSION,
-                    DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())),
-                    jobMaps
-            );
+            addCruiseMission(vehicle,order);
+//            // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作
+//            R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail();
+//            XpTaskRule xpTaskRule = xpTaskRuleR.getData();
+//
+//            // 生成新的巡游单子 回到最新巡游的初始起点位置
+//            XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+//            int temp=0;
+//            if(xpCruiseOrders==null){
+//                temp=1;
+//                //特殊情况 可能没有产生终止的订单  (到站点就被正常接单了)所以找正常订单
+//                xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+//            }
+//            XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
+//            xpCruiseOrder.setVehicleId(vehicle.getId());
+//            xpCruiseOrder.setFleetId(vehicle.getFleetId());
+//            xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin());
+//            xpCruiseOrder.setOrderType(2);
+//            // 返程起点是当前正常订单的终点
+//            xpCruiseOrder.setStartPointId(order.getEndPointId());
+//            xpCruiseOrder.setStartPointName(order.getEndPointName());
+//            xpCruiseOrder.setStartLon(order.getEndLon());
+//            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());
+//            }
+//
+//
+//            xpCruiseOrder.setStatus(0);
+//            xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
+//            xpCruiseOrder.setCreateTime(LocalDateTime.now());
+//            xpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
+//
+//            // 判断当前时分秒是否大于收车时间
+//            LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
+//            if (vehicleCollectionTime.isBefore(LocalTime.now())) {
+//                vehicle.setOperatingStatus(3);
+//                //找到车辆的收车点位 更新终点点位
+//                R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
+//                xpCruiseOrder = returnCruisePoint.getData();
+//            }
+//            xpVehicleClient.updateVehicleById(vehicle);
+//
+//            xpCruiseOrderMapper.insert(xpCruiseOrder);
+//
+//
+//            R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId());
+//            XpPoint data = xpPointR.getData();
+//            //下发命令
+//            // 添加自动结束行程定时任务job
+//            Map<String, ? extends Object> jobMaps =
+//                    new ImmutableMap.Builder<String, String>().
+//                            put("id", xpCruiseOrder.getId())
+//                            .build();
+//            QuartzManager.addJob(
+//                    AddCruiseMissionJob.class,
+//                    (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(),
+//                    TimeJobType.ADD_CRUISE_MISSION,
+//                    DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())),
+//                    jobMaps
+//            );
 
 
         }
-
-
-
-
-
-
-
-
-
-
-
     }
 
 
+    /**
+     * 添加巡游任务下发命令
+     * @param vehicle
+     * @param order
+     */
+
+    public void addCruiseMission(XpVehicle vehicle, XpOrder order) {
+
+        if(order.getStatus()!=8){
+            return;
+        }
+
+        // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作
+        R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail();
+        XpTaskRule xpTaskRule = xpTaskRuleR.getData();
+
+        // 生成新的巡游单子 回到最新巡游的初始起点位置
+        XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+        int temp=0;
+        if(xpCruiseOrders==null){
+            temp=1;
+            //特殊情况 可能没有产生终止的订单  (到站点就被正常接单了)所以找正常订单
+            xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
+        }
+        XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
+        xpCruiseOrder.setVehicleId(vehicle.getId());
+        xpCruiseOrder.setFleetId(vehicle.getFleetId());
+        xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin());
+        xpCruiseOrder.setOrderType(2);
+        // 返程起点是当前正常订单的终点
+        xpCruiseOrder.setStartPointId(order.getEndPointId());
+        xpCruiseOrder.setStartPointName(order.getEndPointName());
+        xpCruiseOrder.setStartLon(order.getEndLon());
+        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());
+        }
+
+
+        xpCruiseOrder.setStatus(0);
+        xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
+        xpCruiseOrder.setCreateTime(LocalDateTime.now());
+        xpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
+
+        // 判断当前时分秒是否大于收车时间
+        LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
+        if (vehicleCollectionTime.isBefore(LocalTime.now())) {
+            vehicle.setOperatingStatus(3);
+            //找到车辆的收车点位 更新终点点位
+            R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
+            xpCruiseOrder = returnCruisePoint.getData();
+        }
+        xpVehicleClient.updateVehicleById(vehicle);
+
+        xpCruiseOrderMapper.insert(xpCruiseOrder);
+
+
+        R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId());
+        XpPoint data = xpPointR.getData();
+        //下发命令
+        // 添加自动结束行程定时任务job
+        Map<String, ? extends Object> jobMaps =
+                new ImmutableMap.Builder<String, String>().
+                        put("id", xpCruiseOrder.getId())
+                        .build();
+        QuartzManager.addJob(
+                AddCruiseMissionJob.class,
+                (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(),
+                TimeJobType.ADD_CRUISE_MISSION,
+                DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())),
+                jobMaps
+        );
+    }
+
     private MileageDto mileageType(MileageDto param, JSONArray startingFareJsonArray, Date mileageDate, LocalDateTime begin, String num14, String num16, String num17, String num21, String num22, String num24, String num25, String num30, String num31) {
         // 计算出是在哪个普通时间段内
         for (Object o : startingFareJsonArray) {

--
Gitblit v1.7.1