From eecc2a5240a4b9389d8396d36624055da808ad9b Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期六, 28 二月 2026 11:40:01 +0800
Subject: [PATCH] feat(management):订单改派逻辑完善、收车定时任务逻辑完善

---
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java |   44 ++++++++++++++++++++++++++++++++++----------
 1 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
index 4d98c05..8d09c4f 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -11,6 +11,7 @@
 import com.xiaopeng.api.feignClient.operation.XpElectronicClient;
 import com.xiaopeng.api.feignClient.order.XpOrderClient;
 import com.xiaopeng.api.model.operation.XpElectronicFence;
+import com.xiaopeng.api.model.operation.XpElectronicFenceArea;
 import com.xiaopeng.api.model.order.XpOrder;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicleAnnualRecord;
@@ -83,22 +84,45 @@
     }
 
     @Override
-    public List<XpVehicle> listAvailableVehicles() {
-        // 构建查询条件
-        LambdaQueryWrapper<XpVehicle> wrapper = new LambdaQueryWrapper<>();
+    public List<XpVehicle> listAvailableVehicles(Long orderId) {
+        // 1. 通过订单ID查询订单信息,获取区域ID
+        R<XpOrder> orderResult = xpOrderClient.queryOrderById(orderId);
+        if (orderResult == null || orderResult.getData() == null) {
+            log.warn("查询订单失败,orderId: {}", orderId);
+            return Collections.emptyList();
+        }
 
-        // 必要条件:可改派车辆的4个核心条件
-        wrapper.ne(XpVehicle::getStatus, 3)  // 状态不是保险/年检过期
-               .isNotNull(XpVehicle::getStatus)
-               .eq(XpVehicle::getOperatingStatus, 1)  // 运营中
-               .eq(XpVehicle::getAcceptOrTest, 1)  // 接单模式
-               .eq(XpVehicle::getAcceptOrTestStatus, 1);  // 开始接单
+        XpOrder order = orderResult.getData();
+        Long areaId = order.getXpElectronicFenceAreaId();
+
+        if (areaId == null) {
+            log.warn("订单区域ID为空,orderId: {}", orderId);
+            return Collections.emptyList();
+        }
+
+        // 2. 通过区域ID查询围栏ID
+        R<XpElectronicFenceArea> areaResult = xpElectronicClient.queryElectronicFenceAreaById(areaId);
+        if (areaResult == null || areaResult.getData() == null) {
+            log.warn("查询围栏区域失败,areaId: {}", areaId);
+            return Collections.emptyList();
+        }
+
+        Long electronicId = areaResult.getData().getElectronicId();
+        if (electronicId == null) {
+            log.warn("围栏ID为空,areaId: {}", areaId);
+            return Collections.emptyList();
+        }
+
+        // 3. 根据围栏ID查询车辆列表 (operatingStatus=1 且 state=0)
+        LambdaQueryWrapper<XpVehicle> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(XpVehicle::getElectronicId, electronicId)
+               .eq(XpVehicle::getOperatingStatus, 1)
+               .eq(XpVehicle::getState, 0);
 
         // 排序:按电量降序、入库时间降序
         wrapper.orderByDesc(XpVehicle::getCurrentElectricity)
                .orderByDesc(XpVehicle::getWarehousingTime);
 
-        // 执行查询
         return this.list(wrapper);
     }
 

--
Gitblit v1.7.1