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 < ls.endTime
+ AND ls2.endTime > 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') < NOW())
+ OR
+ (lsd.lineShiftId <= -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') < NOW())
+ )
+ </select>
</mapper>
--
Gitblit v1.7.1