<?xml version="1.0" encoding="UTF-8"?>
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<mapper namespace="com.stylefeng.guns.modular.crossCity.dao.LineShiftDriverMapper">
|
|
<!-- 通用查询映射结果 -->
|
<resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.crossCity.model.LineShiftDriver">
|
<id column="id" property="id"/>
|
<result column="lineShiftId" property="lineShiftId"/>
|
<result column="driverId" property="driverId"/>
|
<result column="day" property="day"/>
|
<result column="laveSeat" property="laveSeat"/>
|
<result column="laveSeatNumber" property="laveSeatNumber"/>
|
<result column="totalSeat" property="totalSeat"/>
|
<result column="inserTime" property="inserTime"/>
|
<result column="assignType" property="assignType"/>
|
<result column="customerId" property="customerId"/>
|
</resultMap>
|
|
|
<select id="queryByDriver" resultType="LineShiftDriver">
|
select
|
id as id,
|
lineShiftId as lineShiftId,
|
driverId as driverId,
|
`day` as `day`,
|
laveSeat as laveSeat,
|
laveSeatNumber as laveSeatNumber,
|
totalSeat as totalSeat,
|
inserTime as inserTime,
|
assignType as assignType,
|
customerId as customerId
|
from t_line_shift_driver where 1 = 1
|
<if test="null != driverId">
|
and driverId = #{driverId}
|
</if>
|
<if test="null != lineShiftId">
|
and lineShiftId = #{lineShiftId}
|
</if>
|
<if test="null != time">
|
and DATE_FORMAT(`day`, '%Y-%m-%d') = DATE_FORMAT(#{time}, '%Y-%m-%d')
|
</if>
|
order by `day`
|
</select>
|
|
<!-- 【202601】查询司机在指定日期的排班信息 -->
|
<select id="queryDriverShiftByDate" 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.id as lineId,
|
l.name as lineName
|
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
|
WHERE lsd.driverId = #{driverId}
|
AND DATE_FORMAT(lsd.`day`, '%Y-%m-%d') = #{date}
|
AND ls.state = 1
|
AND l.state = 1
|
ORDER BY l.id, ls.startTime
|
</select>
|
<select id="getDetail" resultType="java.util.Map">
|
SELECT
|
-- 司机信息
|
d.headImgUrl as headImgUrl,
|
CONCAT(LEFT(d.name, 1), '师傅') as driverName,
|
c.carLicensePlate as carLicensePlate,
|
CONCAT(cb.name, cm.name) as carBrand,
|
c.carColor as carColor,
|
(SELECT IFNULL(ROUND(AVG(fraction), 2), 0) FROM t_order_evaluate WHERE driverId = lsd.driverId) as score,
|
(SELECT COUNT(*) FROM t_order_cross_city WHERE driverId = lsd.driverId AND state = 9) as orderCount,
|
|
-- 线路信息
|
l.id as lineId,
|
l.name as lineName,
|
lp.content as priceContent,
|
DATE_FORMAT(lsd.day, '%Y-%m-%d') as day,
|
ls.startTime as startTime,
|
ls.endTime as endTime,
|
lsd.totalSeat as totalSeat,
|
lsd.laveSeat as laveSeat,
|
lsd.laveSeatNumber as laveSeatNumber,
|
|
-- 站点信息
|
(SELECT siteId FROM t_line_site WHERE lineId = l.id AND type = 1 LIMIT 1) as startSiteId,
|
(SELECT s.name FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 1 LIMIT 1) as startSiteName,
|
(SELECT siteId FROM t_line_site WHERE lineId = l.id AND type = 2 LIMIT 1) as endSiteId,
|
(SELECT s.name FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as endSiteName,
|
(SELECT s.city FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 1 LIMIT 1) as startCityName,
|
(SELECT s.city FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as endCityName,
|
(SELECT s.lonLat FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 1 LIMIT 1) as startLonLat,
|
(SELECT s.lonLat FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as endLonLat,
|
|
-- 默认点信息
|
(SELECT s.defaultPointAddress FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 1 LIMIT 1) as startDefaultPointAddress,
|
(SELECT s.defaultPointLon FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 1 LIMIT 1) as startDefaultPointLon,
|
(SELECT s.defaultPointLat FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 1 LIMIT 1) as startDefaultPointLat,
|
(SELECT s.defaultPointAddress FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as endDefaultPointAddress,
|
(SELECT s.defaultPointLon FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as endDefaultPointLon,
|
(SELECT s.defaultPointLat FROM t_site s JOIN t_line_site tls ON s.id = tls.siteId WHERE tls.lineId = l.id AND tls.type = 2 LIMIT 1) as endDefaultPointLat,
|
|
-- 其他信息
|
cs.serverCarModelId as serverCarModelId,
|
lsd.driverId as driverId,
|
lsd.id as lineShiftDriverId
|
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 t_driver d ON lsd.driverId = d.id
|
LEFT 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
|
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>
|
|
<!-- 【202601】查询司机可预约的班次列表(包括已预约和未预约的) -->
|
<select id="queryDriverAvailableShifts" resultType="java.util.Map">
|
SELECT
|
ls.id as lineShiftId,
|
ls.lineId as lineId,
|
l.name as lineName,
|
ls.startTime as startTime,
|
ls.endTime as endTime,
|
ls.carNum as carNum,
|
lsd.id as lineShiftDriverId,
|
lsd.laveSeat as laveSeat,
|
lsd.totalSeat as totalSeat,
|
CASE WHEN lsd.id IS NOT NULL THEN 1 ELSE 0 END as isReserved,
|
-- 统计司机在该线路完成的订单次数(按lineShiftDriverId去重)
|
IFNULL((
|
SELECT COUNT(DISTINCT occ.lineShiftDriverId)
|
FROM t_order_cross_city occ
|
WHERE occ.driverId = #{driverId}
|
AND occ.lineId = l.id
|
AND occ.state IN(8,9)
|
AND occ.isDelete = 1
|
), 0) as lineCompletedCount
|
FROM t_driver_line dl
|
INNER JOIN t_line l ON dl.lineId = l.id AND l.state = 1
|
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}
|
WHERE dl.driverId = #{driverId}
|
ORDER BY lineCompletedCount DESC, l.id, ls.startTime
|
</select>
|
|
<!-- 【202604】查询司机本人已领取/被分配的排班列表(今天及之后) -->
|
<select id="queryMyDriverShiftList" resultType="java.util.Map">
|
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 state != 10
|
GROUP BY lineShiftDriverId
|
) occ ON occ.lineShiftDriverId = lsd.id
|
WHERE lsd.driverId = #{driverId}
|
AND lsd.lineShiftId != -1
|
<if test="startDate != null and startDate != ''">
|
AND lsd.day = #{startDate}
|
</if>
|
<if test="startDate == null or startDate == ''">
|
AND lsd.day >= 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,
|
'自主行程' 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
|
<if test="startDate != null and startDate != ''">
|
AND lsd.day = #{startDate}
|
</if>
|
<if test="startDate == null or startDate == ''">
|
AND lsd.day >= CURDATE()
|
</if>
|
) t
|
ORDER BY t.day ASC, t.startTime ASC, t.lineShiftDriverId ASC
|
LIMIT #{offset}, #{size}
|
</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,
|
CONCAT(IFNULL(cb.name, ''), IFNULL(cm.name, '')) as carModel,
|
IFNULL(c.carColor, '') as carColor,
|
other.laveSeat as laveSeat,
|
other.totalSeat as totalSeat,
|
IFNULL((
|
SELECT ROUND(AVG(oe.fraction), 2)
|
FROM t_order_evaluate oe
|
WHERE oe.driverId = other.driverId
|
), 0) as score,
|
ls.startTime as startTime
|
FROM t_line_shift_driver cur
|
INNER JOIN t_line_shift_driver other
|
ON other.lineShiftId = cur.lineShiftId
|
AND other.day = cur.day
|
AND other.id != cur.id
|
LEFT JOIN t_line_shift ls ON other.lineShiftId = ls.id
|
LEFT JOIN t_driver d ON other.driverId = d.id
|
LEFT 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 ls.state = 1
|
ORDER BY ls.startTime ASC, other.id ASC
|
</select>
|
</mapper>
|