From 34aceb8d18043d99404b9016e2d4bea998efcfb7 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期六, 28 二月 2026 11:51:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java
index de2d954..7cb81de 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java
@@ -1,14 +1,24 @@
 package com.xiaopeng.maintenance.schedule;
 
+import cn.hutool.core.util.IdUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
+import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
+import com.xiaopeng.api.feignClient.operation.XpCruisePlanClient;
+import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
 import com.xiaopeng.api.model.maintenance.XpTaskRule;
+import com.xiaopeng.api.model.order.XpCruiseOrder;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
+import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
@@ -42,6 +52,18 @@
 
     @Autowired
     private XpVehicleClient xpVehicleClient;
+
+    @Autowired
+    private XpCruiseOrderClient xpCruiseOrderClient;
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private OrderMissionClient orderMissionClient;
+
+    @Autowired
+    private XpCruisePlanClient xpCruisePlanClient;
 
     /**
      * 每分钟检查一次是否需要执行收车任务
@@ -162,6 +184,7 @@
                 return result.getData().stream()
                         .filter(v -> v.getVehicleType() != null && v.getVehicleType() == 2)
                         .filter(v -> v.getOperatingStatus() != null && v.getOperatingStatus() == 1)
+                        .filter(v -> v.getState() != null && v.getState() == 0)
                         .collect(Collectors.toList());
             }
         } catch (Exception e) {
@@ -179,10 +202,37 @@
      * 2. 更新车辆状态为"已收车"
      * </p>
      *
-     * @param vehicle 车辆信息
+     * @param xpVehicle 车辆信息
      */
-    private void sendCollectionCommand(XpVehicle vehicle) {
-        // TODO: 具体发送收车指令的实现
-        log.info("向车辆[{}]发送收车指令", vehicle.getPlateNumber());
+    private void sendCollectionCommand(XpVehicle xpVehicle) {
+        // 收车 关闭当前巡游单子 生成新的返程单子  找到收车站点
+        R<String> r = xpCruiseOrderClient.updateCruiseOrder(xpVehicle.getVehicleVin());
+
+        // redis 获取当前最新经纬度位置
+        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class);
+        XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
+        if(vehiclePosition!=null){
+            double x = vehiclePosition.getPoint().getX();
+            double y = vehiclePosition.getPoint().getY();
+            xpCruiseOrder.setStartLon(x);
+            xpCruiseOrder.setStartLat(y);
+        }
+
+        xpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
+        xpCruiseOrder.setVehicleId(xpVehicle.getId());
+        xpCruiseOrder.setFleetId(xpVehicle.getFleetId());
+        xpCruiseOrder.setOrderType(2);
+        xpCruiseOrder.setStatus(1);
+        xpCruiseOrder.setOrderReverse(1);
+        xpCruiseOrder.setLastOrderId(r.getData());
+
+        // 找到收车站点
+        R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder);
+        if(returnCruisePoint!=null){
+            xpCruiseOrderClient.addCruiseOrder(returnCruisePoint.getData());
+            // 下发命令
+            orderMissionClient.pushOrder(new PushOrderDto( xpCruiseOrder.getVehicleVin(),xpCruiseOrder.getId(),null));
+        }
+        log.info("向车辆[{}]发送收车指令", xpVehicle.getPlateNumber());
     }
 }

--
Gitblit v1.7.1