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/dao/mapping/LineShiftDriverMapper.xml |  169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 164 insertions(+), 5 deletions(-)

diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineShiftDriverMapper.xml b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineShiftDriverMapper.xml
index aa8d75b..83908a6 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineShiftDriverMapper.xml
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineShiftDriverMapper.xml
@@ -67,6 +67,7 @@
             -- 司机信息
             d.headImgUrl as headImgUrl,
             CONCAT(LEFT(d.name, 1), '师傅') as driverName,
+            d.sex as sex,
             c.carLicensePlate as carLicensePlate,
             CONCAT(cb.name, cm.name) as carBrand,
             c.carColor as carColor,
@@ -76,7 +77,7 @@
             -- 线路信息
             l.id as lineId,
             l.name as lineName,
-            lp.content as priceContent,
+            null as priceContent,
             DATE_FORMAT(lsd.day, '%Y-%m-%d') as day,
             ls.startTime as startTime,
             ls.endTime as endTime,
@@ -114,7 +115,6 @@
             LEFT JOIN t_car_brand cb ON c.carBrandId = cb.id
             LEFT JOIN t_car_model cm ON c.carModelId = cm.id
             LEFT JOIN t_car_service cs ON c.id = cs.carId AND cs.type = 3
-            LEFT JOIN t_line_price lp ON l.id = lp.lineId AND cs.serverCarModelId = lp.serverCarModelId AND lp.state = 1
         WHERE lsd.id = #{lineShiftDriverId}
     </select>
 
@@ -145,9 +145,30 @@
         INNER JOIN t_line_shift ls ON l.id = ls.lineId AND ls.state = 1
         LEFT JOIN t_line_shift_driver lsd ON ls.id = lsd.lineShiftId
             AND lsd.driverId = #{driverId}
-            AND DATE_FORMAT(lsd.`day`, '%Y-%m-%d') = #{date}
+            AND lsd.`day` = #{date}
         WHERE dl.driverId = #{driverId}
+          AND NOT EXISTS (
+              SELECT 1
+              FROM t_line_shift_driver done_lsd
+              INNER JOIN t_order_cross_city occ ON occ.lineShiftDriverId = done_lsd.id
+              WHERE done_lsd.driverId = #{driverId}
+                AND done_lsd.lineShiftId = ls.id
+                AND done_lsd.`day` = #{date}
+                AND occ.isDelete = 1
+                AND occ.state IN (6, 8, 9)
+          )
         ORDER BY lineCompletedCount DESC, l.id, ls.startTime
+    </select>
+
+    <select id="countCompletedShiftOrders" resultType="int">
+        SELECT COUNT(1)
+        FROM t_line_shift_driver lsd
+        INNER JOIN t_order_cross_city occ ON occ.lineShiftDriverId = lsd.id
+        WHERE lsd.driverId = #{driverId}
+          AND lsd.lineShiftId = #{lineShiftId}
+          AND lsd.`day` = DATE(#{time})
+          AND occ.isDelete = 1
+          AND occ.state IN (6, 8, 9)
     </select>
 
     <!-- 【202604】查询司机本人已领取/被分配的排班列表(今天及之后) -->
@@ -172,11 +193,28 @@
             LEFT JOIN (
                 SELECT lineShiftDriverId, MIN(id) AS orderId
                 FROM t_order_cross_city
-                WHERE state != 10
+                WHERE isDelete = 1
+                  AND state NOT IN (10, 12)
                 GROUP BY lineShiftDriverId
             ) occ ON occ.lineShiftDriverId = lsd.id
             WHERE lsd.driverId = #{driverId}
               AND lsd.lineShiftId != -1
+              AND NOT (
+                  EXISTS (
+                      SELECT 1
+                      FROM t_order_cross_city occ_has
+                      WHERE occ_has.lineShiftDriverId = lsd.id
+                        AND occ_has.isDelete = 1
+                        AND occ_has.state NOT IN (10, 12)
+                  )
+                  AND NOT EXISTS (
+                  SELECT 1
+                  FROM t_order_cross_city occ_end
+                  WHERE occ_end.lineShiftDriverId = lsd.id
+                    AND occ_end.isDelete = 1
+                        AND occ_end.state NOT IN (8, 9, 10, 12)
+                  )
+              )
               <if test="startDate != null and startDate != ''">
                   AND lsd.day = #{startDate}
               </if>
@@ -195,7 +233,7 @@
                 lsd.totalSeat as totalSeat,
                 st.startTime as startTime,
                 st.startTime as endTime,
-                '自主行程' as lineName,
+                CONCAT(st.startCityName,'-',st.endCityName) as lineName,
                 1 as assignType,
                 NULL as orderId,
                 NULL as orderType,
@@ -206,6 +244,22 @@
                AND st.state = 1
             WHERE lsd.driverId = #{driverId}
               AND lsd.lineShiftId = -1
+              AND NOT (
+                  EXISTS (
+                      SELECT 1
+                      FROM t_order_cross_city occ_has
+                      WHERE occ_has.lineShiftDriverId = lsd.id
+                        AND occ_has.isDelete = 1
+                        AND occ_has.state NOT IN (10, 12)
+                  )
+                  AND NOT EXISTS (
+                  SELECT 1
+                  FROM t_order_cross_city occ_end
+                  WHERE occ_end.lineShiftDriverId = lsd.id
+                    AND occ_end.isDelete = 1
+                        AND occ_end.state NOT IN (8, 9, 10, 12)
+                  )
+              )
               <if test="startDate != null and startDate != ''">
                   AND lsd.day = #{startDate}
               </if>
@@ -215,6 +269,13 @@
         ) t
         ORDER BY t.day ASC, t.startTime ASC, t.lineShiftDriverId ASC
         LIMIT #{offset}, #{size}
+    </select>
+
+    <select id="queryCustomerIdByLineShiftDriverId" resultType="java.lang.Integer">
+        select customerId
+        from t_line_shift_driver
+        where id = #{lineShiftDriverId}
+        limit 1
     </select>
 
     <select id="queryOtherDriverShiftListWithShiftId" resultType="java.util.Map">
@@ -248,4 +309,102 @@
           AND ls.state = 1
         ORDER BY ls.startTime ASC, other.id ASC
     </select>
+
+    <select id="queryAvailableCompanyDriversForShift" resultType="java.util.Map">
+        SELECT
+            0 - d.id as lineShiftDriverId,
+            d.id as driverId,
+            d.headImgUrl as headImgUrl,
+            d.name as driverName,
+            c.carLicensePlate as carLicensePlate,
+            CONCAT(IFNULL(cb.name, ''), IFNULL(cm.name, '')) as carModel,
+            IFNULL(c.carColor, '') as carColor,
+            (IFNULL(cm.seat, 1) - 1) as laveSeat,
+            (IFNULL(cm.seat, 1) - 1) as totalSeat,
+            IFNULL((
+                SELECT ROUND(AVG(oe.fraction), 2)
+                FROM t_order_evaluate oe
+                WHERE oe.driverId = d.id
+            ), 0) as score,
+            ls.startTime as startTime,
+            2 as needConfirm
+        FROM t_line_shift_driver cur
+        INNER JOIN t_line_shift ls ON cur.lineShiftId = ls.id
+        INNER JOIN t_order_cross_city occ ON occ.id = #{orderId}
+        INNER JOIN t_driver currentDriver ON cur.driverId = currentDriver.id
+        INNER JOIN t_driver d
+            ON d.id != cur.driverId
+            AND d.state = 2
+            AND (
+                (IFNULL(currentDriver.franchiseeId, 0) > 0 AND d.franchiseeId = currentDriver.franchiseeId)
+                OR (IFNULL(currentDriver.franchiseeId, 0) = 0 AND d.companyId = currentDriver.companyId)
+            )
+        INNER JOIN t_car c ON d.carId = c.id
+        LEFT JOIN t_car_brand cb ON c.carBrandId = cb.id
+        LEFT JOIN t_car_model cm ON c.carModelId = cm.id
+        WHERE cur.id = #{driverShiftId}
+          AND cur.lineShiftId != -1
+          AND ls.state = 1
+          AND (IFNULL(cm.seat, 1) - 1) >= IFNULL(occ.peopleNumber, 1)
+          AND NOT EXISTS (
+              SELECT 1
+              FROM t_line_shift_driver lsd2
+              INNER JOIN t_line_shift ls2 ON lsd2.lineShiftId = ls2.id
+              WHERE lsd2.driverId = d.id
+                AND lsd2.lineShiftId != -1
+                AND DATE(lsd2.day) = DATE(cur.day)
+                AND lsd2.id != cur.id
+                AND ls2.startTime &lt; ls.endTime
+                AND ls2.endTime &gt; ls.startTime
+          )
+          AND NOT EXISTS (
+              SELECT 1
+              FROM t_order_cross_city occ2
+              WHERE occ2.driverId = d.id
+                AND occ2.isDelete = 1
+                AND occ2.state IN (2, 3, 4, 5, 11)
+                AND DATE(occ2.travelTime) = DATE(cur.day)
+          )
+          AND NOT EXISTS (
+              SELECT 1
+              FROM t_order_taxi ot
+              WHERE ot.driverId = d.id
+                AND ot.state IN (2, 3, 4, 5, 11)
+                AND DATE(ot.travelTime) = DATE(cur.day)
+          )
+          AND NOT EXISTS (
+              SELECT 1
+              FROM t_order_private_car opc
+              WHERE opc.driverId = d.id
+                AND opc.state IN (2, 3, 4, 5, 11)
+                AND DATE(opc.travelTime) = DATE(cur.day)
+          )
+        ORDER BY d.id ASC
+    </select>
+
+    <select id="queryExpiredNoOrderShiftIds" resultType="java.lang.Integer">
+        SELECT lsd.id
+        FROM t_line_shift_driver lsd
+                 LEFT JOIN t_line_shift ls ON ls.id = lsd.lineShiftId
+                 LEFT JOIN t_driver_self_trip st ON st.id = lsd.customerId
+        WHERE lsd.day IS NOT NULL
+          AND NOT EXISTS (
+            SELECT 1
+            FROM t_order_cross_city occ
+            WHERE occ.lineShiftDriverId = lsd.id
+              AND occ.isDelete = 1
+              AND occ.state NOT IN (10, 12)
+        )
+          AND (
+            (lsd.lineShiftId > 0
+                AND ls.id IS NOT NULL
+                AND ls.state = 1
+                AND STR_TO_DATE(CONCAT(DATE_FORMAT(lsd.day, '%Y-%m-%d'), ' ', ls.endTime), '%Y-%m-%d %H:%i') &lt; NOW())
+                OR
+            (lsd.lineShiftId &lt;= -1
+                AND st.id IS NOT NULL
+                AND st.state = 1
+                AND STR_TO_DATE(CONCAT(DATE_FORMAT(lsd.day, '%Y-%m-%d'), ' ', st.startTime), '%Y-%m-%d %H:%i') &lt; NOW())
+            )
+    </select>
 </mapper>

--
Gitblit v1.7.1