From 80fd77e1bcb47726e440b8a728838189cd39a56a Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期二, 30 六月 2026 21:25:35 +0800
Subject: [PATCH] 跨城改派fix

---
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java |   51 ++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java
index 912fc37..6c2aaa7 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java
@@ -79,6 +79,7 @@
     private ILineService lineService;
     @Autowired
     private IReassignService reassignService;
+    @Resource
     private LineMapper lineMapper;
 
 
@@ -446,28 +447,48 @@
             return new ArrayList<>();
         }
 
-        // 如果提供了订单ID,使用新的改派逻辑(包含needConfirm字段)
-        if (ToolUtil.isNotEmpty(orderIds)) {
-            try {
-                // 使用第一个订单ID来查询(改派场景通常是单个订单,多个订单取第一个)
-                String firstOrderId = orderIds.split(",")[0].trim();
-                List<Map<String, Object>> drivers = reassignService.queryDriver(firstOrderId);
-                return OtherDriverShiftWarpper.fromMaps(drivers);
-            } catch (Exception e) {
-                e.printStackTrace();
-                // 如果新逻辑失败,降级到旧逻辑
+        List<Map<String, Object>> rows = lineShiftDriverMapper.queryOtherDriverShiftListWithShiftId(driverShiftId);
+        // 同批次司机不需要确认。
+        Set<Integer> driverIds = new HashSet<>();
+        for (Map<String, Object> row : rows) {
+            row.put("needConfirm", 1);
+            if (row.get("driverId") != null) {
+                driverIds.add(Integer.valueOf(row.get("driverId").toString()));
             }
         }
 
-        // 旧逻辑:只查询同批次司机(兼容没有传orderIds的场景)
-        List<Map<String, Object>> rows = lineShiftDriverMapper.queryOtherDriverShiftListWithShiftId(driverShiftId);
-        // 旧逻辑默认都是同批次,不需要确认
-        for (Map<String, Object> row : rows) {
-            row.put("needConfirm", 1);
+        // 扩展内容:对应时间段无订单且无其他预约批次的同公司其他司机,需要确认。
+        Integer firstOrderId = getFirstOrderId(orderIds);
+        if (firstOrderId != null) {
+            List<Map<String, Object>> extraRows = lineShiftDriverMapper.queryAvailableCompanyDriversForShift(driverShiftId, firstOrderId);
+            for (Map<String, Object> row : extraRows) {
+                if (row.get("driverId") == null) {
+                    continue;
+                }
+                Integer extraDriverId = Integer.valueOf(row.get("driverId").toString());
+                if (driverIds.contains(extraDriverId)) {
+                    continue;
+                }
+                row.put("needConfirm", 2);
+                rows.add(row);
+                driverIds.add(extraDriverId);
+            }
         }
         return OtherDriverShiftWarpper.fromMaps(rows);
     }
 
+    private Integer getFirstOrderId(String orderIds) {
+        if (ToolUtil.isEmpty(orderIds)) {
+            return null;
+        }
+        try {
+            String firstOrderId = orderIds.split(",")[0].trim();
+            return ToolUtil.isEmpty(firstOrderId) ? null : Integer.valueOf(firstOrderId);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public ResultUtil<Map<String, Object>> addSelfTrip(Integer driverId, AddSelfTripWarpper warpper) throws Exception {

--
Gitblit v1.7.1