longz
2026-06-30 80fd77e1bcb47726e440b8a728838189cd39a56a
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>