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 |  264 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 229 insertions(+), 35 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 21d5c55..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
@@ -13,6 +13,7 @@
         <result column="totalSeat" property="totalSeat"/>
         <result column="inserTime" property="inserTime"/>
         <result column="assignType" property="assignType"/>
+        <result column="customerId" property="customerId"/>
     </resultMap>
 
 
@@ -26,7 +27,8 @@
         laveSeatNumber as laveSeatNumber,
         totalSeat as totalSeat,
         inserTime as inserTime,
-        assignType as assignType
+        assignType as assignType,
+        customerId as customerId
         from t_line_shift_driver where 1 = 1
         <if test="null != driverId">
             and driverId = #{driverId}
@@ -35,7 +37,7 @@
             and lineShiftId = #{lineShiftId}
         </if>
         <if test="null != time">
-            and DATE_FORMAT(`day`, '%Y-%m%-%d') = DATE_FORMAT(#{time}, '%Y-%m%-%d')
+            and DATE_FORMAT(`day`, '%Y-%m-%d') = DATE_FORMAT(#{time}, '%Y-%m-%d')
         </if>
         order by `day`
     </select>
@@ -65,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,
@@ -74,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,
@@ -112,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>
 
@@ -143,49 +145,143 @@
         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】查询司机本人已领取/被分配的排班列表(今天及之后) -->
     <select id="queryMyDriverShiftList" resultType="java.util.Map">
-        SELECT
-            lsd.id as lineShiftDriverId,
-            lsd.lineShiftId as lineShiftId,
-            lsd.laveSeat as laveSeat,
-            lsd.totalSeat as totalSeat,
-            ls.startTime as startTime,
-            ls.endTime as endTime,
-            l.name as lineName,
-            IFNULL(lsd.assignType, 1) as assignType,
-            occ.orderId as orderId,
-            CASE WHEN occ.orderId IS NOT NULL THEN 3 ELSE NULL END as orderType,
-            DATE_FORMAT(lsd.day, '%Y-%m-%d') as day
-        FROM t_line_shift_driver lsd
-        LEFT JOIN t_line_shift ls ON lsd.lineShiftId = ls.id
-        LEFT JOIN t_line l ON ls.lineId = l.id
-        LEFT JOIN (
-            SELECT lineShiftDriverId, MIN(id) AS orderId
-            FROM t_order_cross_city
-            GROUP BY lineShiftDriverId
-        ) occ ON occ.lineShiftDriverId = lsd.id
-        WHERE lsd.driverId = #{driverId}
-        <if test="startDate != null and startDate != ''">
-          AND lsd.day = CAST(#{startDate} AS DATE)
-        </if>
-        <if test="startDate == null or startDate == ''">
-          AND lsd.day &gt;= CURDATE()
-        </if>
-          AND ls.state = 1
-          AND l.state = 1
-        ORDER BY lsd.day ASC, ls.startTime ASC, lsd.id ASC
+        SELECT *
+        FROM (
+            SELECT
+                lsd.id as lineShiftDriverId,
+                lsd.lineShiftId as lineShiftId,
+                lsd.laveSeat as laveSeat,
+                lsd.totalSeat as totalSeat,
+                ls.startTime as startTime,
+                ls.endTime as endTime,
+                l.name as lineName,
+                IFNULL(lsd.assignType, 1) as assignType,
+                occ.orderId as orderId,
+                CASE WHEN occ.orderId IS NOT NULL THEN 3 ELSE NULL END as orderType,
+                DATE_FORMAT(lsd.day, '%Y-%m-%d') as day
+            FROM t_line_shift_driver lsd
+            LEFT JOIN t_line_shift ls ON lsd.lineShiftId = ls.id
+            LEFT JOIN t_line l ON ls.lineId = l.id
+            LEFT JOIN (
+                SELECT lineShiftDriverId, MIN(id) AS orderId
+                FROM t_order_cross_city
+                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>
+              <if test="startDate == null or startDate == ''">
+                  AND lsd.day &gt;= CURDATE()
+              </if>
+              AND ls.state = 1
+              AND l.state = 1
+
+            UNION ALL
+
+            SELECT
+                lsd.id as lineShiftDriverId,
+                lsd.lineShiftId as lineShiftId,
+                lsd.laveSeat as laveSeat,
+                lsd.totalSeat as totalSeat,
+                st.startTime as startTime,
+                st.startTime as endTime,
+                CONCAT(st.startCityName,'-',st.endCityName) as lineName,
+                1 as assignType,
+                NULL as orderId,
+                NULL as orderType,
+                DATE_FORMAT(lsd.day, '%Y-%m-%d') as day
+            FROM t_line_shift_driver lsd
+            INNER JOIN t_driver_self_trip st
+                ON st.id = lsd.customerId
+               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>
+              <if test="startDate == null or startDate == ''">
+                  AND lsd.day &gt;= CURDATE()
+              </if>
+        ) 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">
         SELECT
             other.id as lineShiftDriverId,
+            other.driverId as driverId,
             d.headImgUrl as headImgUrl,
             d.name as driverName,
             c.carLicensePlate as carLicensePlate,
@@ -213,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