|
|
@@ -13,35 +13,35 @@
|
|
|
-->
|
|
|
<sql id="selectYangtzePassengerSummary">
|
|
|
SELECT
|
|
|
- v.id AS voyageId,
|
|
|
- s.name AS shipName,
|
|
|
- CONCAT(DATE_FORMAT(v.boarding_time, '%Y-%m-%d'), ' ', CASE WHEN r.direction = 1 THEN '上水' ELSE '下水' END) AS voyageInfo,
|
|
|
- GREATEST(DATEDIFF(DATE(v.boarding_time), CURDATE()), 0) AS countdown,
|
|
|
- v.remark AS remark,
|
|
|
- 528 AS capacity,
|
|
|
- COALESCE(room_stats.totalRooms, 0) AS totalRooms,
|
|
|
- COALESCE(room_stats.paidRooms, 0) AS paidRooms,
|
|
|
- COALESCE(room_stats.reservedRooms, 0) AS reservedRooms,
|
|
|
- COALESCE(visitor_stats.totalPassengers, 0) AS totalPassengers,
|
|
|
- COALESCE(free_stats.ticketedPassengers, 0) AS ticketedPassengers,
|
|
|
- COALESCE(free_stats.freePassengers, 0) AS freePassengers,
|
|
|
- COALESCE(room_stats.reservedRooms, 0) * 2 + COALESCE(visitor_stats.totalPassengers, 0) AS estimatedPassengers,
|
|
|
- COALESCE(finance_stats.receivableAmount, 0) AS receivableAmount,
|
|
|
- COALESCE(finance_stats.receivedAmount, 0) AS receivedAmount,
|
|
|
- COALESCE(finance_stats.receivableAmount, 0) - COALESCE(finance_stats.receivedAmount, 0) AS unreceivedAmount,
|
|
|
- CASE WHEN COALESCE(free_stats.ticketedPassengers, 0) > 0
|
|
|
- THEN ROUND(COALESCE(finance_stats.receivableAmount, 0) / free_stats.ticketedPassengers, 2)
|
|
|
- ELSE 0 END AS avgPrice,
|
|
|
- COALESCE(visitor_stats.adultCount, 0) AS adultCount,
|
|
|
- COALESCE(visitor_stats.childCount, 0) AS childCount,
|
|
|
- COALESCE(visitor_stats.infantCount, 0) AS infantCount,
|
|
|
- COALESCE(visitor_stats.companionLeaderCount, 0) AS companionLeaderCount,
|
|
|
- COALESCE(team_stats.groupCount, 0) AS groupCount,
|
|
|
- COALESCE(team_stats.individualCount, 0) AS individualCount,
|
|
|
- COALESCE(nationality_stats.domesticCount, 0) AS domesticCount,
|
|
|
- COALESCE(nationality_stats.overseasCount, 0) AS overseasCount,
|
|
|
- COALESCE(product_stats.upgradeFloorCount, 0) AS upgradeFloorCount,
|
|
|
- COALESCE(product_stats.suiteDiscountCount, 0) AS suiteDiscountCount
|
|
|
+ v.id AS voyageId,
|
|
|
+ s.name AS shipName,
|
|
|
+ CONCAT(DATE_FORMAT(v.boarding_time, '%Y-%m-%d'), ' ', CASE WHEN r.direction = 1 THEN '上水' ELSE '下水' END) AS voyageInfo,
|
|
|
+ GREATEST(DATEDIFF(DATE(v.boarding_time), CURDATE()), 0) AS countdown,
|
|
|
+ v.remark AS remark,
|
|
|
+ 528 AS capacity,
|
|
|
+ COALESCE(room_stats.totalRooms, 0) AS totalRooms,
|
|
|
+ COALESCE(room_stats.paidRooms, 0) AS paidRooms,
|
|
|
+ COALESCE(room_stats.reservedRooms, 0) AS reservedRooms,
|
|
|
+ COALESCE(visitor_stats.totalPassengers, 0) AS totalPassengers,
|
|
|
+ COALESCE(free_stats.ticketedPassengers, 0) AS ticketedPassengers,
|
|
|
+ COALESCE(free_stats.freePassengers, 0) AS freePassengers,
|
|
|
+ COALESCE(estimated_stats.estimatedPassengers1, 0) AS estimatedPassengers,
|
|
|
+ COALESCE(finance_stats.receivableAmount, 0) AS receivableAmount,
|
|
|
+ COALESCE(finance_stats.receivedAmount, 0) AS receivedAmount,
|
|
|
+ COALESCE(finance_stats.receivableAmount, 0) - COALESCE(finance_stats.receivedAmount, 0) AS unreceivedAmount,
|
|
|
+ CASE WHEN COALESCE(free_stats.ticketedPassengers, 0) > 0
|
|
|
+ THEN ROUND(COALESCE(finance_stats.receivableAmount, 0) / free_stats.ticketedPassengers, 2)
|
|
|
+ ELSE 0 END AS avgPrice,
|
|
|
+ COALESCE(visitor_stats.adultCount, 0) AS adultCount,
|
|
|
+ COALESCE(visitor_stats.childCount, 0) AS childCount,
|
|
|
+ COALESCE(visitor_stats.infantCount, 0) AS infantCount,
|
|
|
+ COALESCE(visitor_stats.companionLeaderCount, 0) AS companionLeaderCount,
|
|
|
+ COALESCE(team_stats.groupCount, 0) AS groupCount,
|
|
|
+ COALESCE(team_stats.individualCount, 0) AS individualCount,
|
|
|
+ COALESCE(nationality_stats.domesticCount, 0) AS domesticCount,
|
|
|
+ COALESCE(nationality_stats.overseasCount, 0) AS overseasCount,
|
|
|
+ COALESCE(product_stats.upgradeFloorCount, 0) AS upgradeFloorCount,
|
|
|
+ COALESCE(product_stats.suiteDiscountCount, 0) AS suiteDiscountCount
|
|
|
FROM product_voyage v
|
|
|
INNER JOIN resource_ship s ON v.ship_id = s.id AND s.deleted = 0
|
|
|
INNER JOIN resource_route r ON v.route_id = r.id AND r.deleted = 0
|
|
|
@@ -61,100 +61,100 @@
|
|
|
) room_stats ON v.id = room_stats.voyage_id
|
|
|
|
|
|
LEFT JOIN (
|
|
|
- SELECT
|
|
|
- o.voyage_id,
|
|
|
- COUNT(tv.id) AS totalPassengers,
|
|
|
- SUM(CASE WHEN o.order_status IN (6) THEN 1 ELSE 0 END) AS ticketedPassengers1,
|
|
|
- SUM(CASE WHEN tv.type IN ('adultTake', 'adultPlus') THEN 1 ELSE 0 END) AS adultCount,
|
|
|
- SUM(CASE WHEN tv.type IN ('childTake', 'childPlus', 'childNonTake') THEN 1 ELSE 0 END) AS childCount,
|
|
|
- SUM(CASE WHEN tv.type IN ('babyTake', 'babyPlus', 'babyNonTake') THEN 1 ELSE 0 END) AS infantCount,
|
|
|
- SUM(CASE WHEN tv.type IN ('with', 'leader') THEN 1 ELSE 0 END) AS companionLeaderCount
|
|
|
- FROM trade_order o
|
|
|
- INNER JOIN trade_visitor tv ON o.id = tv.order_id AND tv.deleted = 0
|
|
|
+ SELECT
|
|
|
+ o.voyage_id,
|
|
|
+ COUNT(tv.id) AS totalPassengers,
|
|
|
+ SUM(CASE WHEN o.order_status IN (6) THEN 1 ELSE 0 END) AS ticketedPassengers1,
|
|
|
+ SUM(CASE WHEN tv.type IN ('adultTake', 'adultPlus') THEN 1 ELSE 0 END) AS adultCount,
|
|
|
+ SUM(CASE WHEN tv.type IN ('childTake', 'childPlus', 'childNonTake') THEN 1 ELSE 0 END) AS childCount,
|
|
|
+ SUM(CASE WHEN tv.type IN ('babyTake', 'babyPlus', 'babyNonTake') THEN 1 ELSE 0 END) AS infantCount,
|
|
|
+ SUM(CASE WHEN tv.type IN ('with', 'leader') THEN 1 ELSE 0 END) AS companionLeaderCount
|
|
|
+ FROM trade_order o
|
|
|
+ INNER JOIN trade_visitor tv ON o.id = tv.order_id AND tv.deleted = 0
|
|
|
WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
- GROUP BY o.voyage_id
|
|
|
+ GROUP BY o.voyage_id
|
|
|
) visitor_stats ON v.id = visitor_stats.voyage_id
|
|
|
|
|
|
LEFT JOIN (
|
|
|
- SELECT
|
|
|
- o.voyage_id,
|
|
|
- CASE WHEN o.order_status = 1 or o.order_status = 14 THEN SUM(COALESCE(tot.adult_total_num, 0) + COALESCE(tot.child_total_num, 0)
|
|
|
- + COALESCE(tot.baby_total_num, 0) + COALESCE(tot.with_total_num, 0)
|
|
|
- + COALESCE(tot.leader_total_num, 0)) ELSE 0 END AS estimatedPassengers1
|
|
|
- FROM trade_order o
|
|
|
- LEFT JOIN trade_order_total tot ON o.id = tot.old_order_id AND tot.deleted = 0
|
|
|
+ SELECT
|
|
|
+ o.voyage_id,
|
|
|
+ SUM(COALESCE(tot.adult_total_num, 0) + COALESCE(tot.child_total_num, 0)
|
|
|
+ + COALESCE(tot.baby_total_num, 0) + COALESCE(tot.with_total_num, 0)
|
|
|
+ + COALESCE(tot.leader_total_num, 0)) AS estimatedPassengers1
|
|
|
+ FROM trade_order o
|
|
|
+ LEFT JOIN trade_order_total tot ON o.id = tot.old_order_id AND tot.deleted = 0
|
|
|
WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
- GROUP BY o.voyage_id
|
|
|
+ GROUP BY o.voyage_id
|
|
|
) estimated_stats ON v.id = estimated_stats.voyage_id
|
|
|
|
|
|
LEFT JOIN (
|
|
|
- SELECT
|
|
|
- o.voyage_id,
|
|
|
- SUM(CASE WHEN od.name LIKE '免票%' THEN 1 ELSE 0 END) AS freePassengers,
|
|
|
- SUM(CASE WHEN od.name LIKE '免票%' THEN 0 ELSE 1 END) AS ticketedPassengers,
|
|
|
- SUM(CASE WHEN (o.order_status = 1 or o.order_status = 14) and tv.type IN ('babyTake','babyPlus','babyNonTake','leader','with','childTake','childPlus','childNonTake','adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS estimatedPassengers
|
|
|
+ SELECT
|
|
|
+ o.voyage_id,
|
|
|
+ SUM(CASE WHEN od.name LIKE '免票%' THEN 1 ELSE 0 END) AS freePassengers,
|
|
|
+ SUM(CASE WHEN od.name LIKE '免票%' THEN 0 ELSE 1 END) AS ticketedPassengers,
|
|
|
+ SUM(CASE WHEN (o.order_status = 1 or o.order_status = 14) and tv.type IN ('babyTake','babyPlus','babyNonTake','leader','with','childTake','childPlus','childNonTake','adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS estimatedPassengers
|
|
|
FROM trade_order o
|
|
|
- INNER JOIN trade_visitor tv ON o.id = tv.order_id AND tv.deleted = 0
|
|
|
- LEFT JOIN ota_distributor od ON o.source_id = od.id AND od.deleted = 0
|
|
|
+ INNER JOIN trade_visitor tv ON o.id = tv.order_id AND tv.deleted = 0
|
|
|
+ LEFT JOIN ota_distributor od ON o.source_id = od.id AND od.deleted = 0
|
|
|
WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
- GROUP BY o.voyage_id
|
|
|
+ GROUP BY o.voyage_id
|
|
|
) free_stats ON v.id = free_stats.voyage_id
|
|
|
|
|
|
LEFT JOIN (
|
|
|
- SELECT
|
|
|
- o.voyage_id,
|
|
|
- SUM(o.pay_amount) AS receivableAmount,
|
|
|
- SUM(CASE WHEN o.pay_status = 1 THEN COALESCE(p.pay_amount, o.real_pay_amount)
|
|
|
- ELSE COALESCE(o.real_pay_amount, 0) END) AS receivedAmount
|
|
|
- FROM trade_order o
|
|
|
- LEFT JOIN (
|
|
|
- SELECT order_id, SUM(pay_amount) AS pay_amount
|
|
|
- FROM trade_order_pay
|
|
|
- WHERE deleted = 0 AND pay_status = 1
|
|
|
- GROUP BY order_id
|
|
|
- ) p ON o.pay_status = 1 AND p.order_id = o.id
|
|
|
- WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
- GROUP BY o.voyage_id
|
|
|
+ SELECT
|
|
|
+ o.voyage_id,
|
|
|
+ SUM(o.pay_amount) AS receivableAmount,
|
|
|
+ SUM(CASE WHEN o.pay_status = 1 THEN COALESCE(p.pay_amount, o.real_pay_amount)
|
|
|
+ ELSE COALESCE(o.real_pay_amount, 0) END) AS receivedAmount
|
|
|
+ FROM trade_order o
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT order_id, SUM(pay_amount) AS pay_amount
|
|
|
+ FROM trade_order_pay
|
|
|
+ WHERE deleted = 0 AND pay_status = 1
|
|
|
+ GROUP BY order_id
|
|
|
+ ) p ON o.pay_status = 1 AND p.order_id = o.id
|
|
|
+ WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
+ GROUP BY o.voyage_id
|
|
|
) finance_stats ON v.id = finance_stats.voyage_id
|
|
|
|
|
|
LEFT JOIN (
|
|
|
- SELECT
|
|
|
- o.voyage_id,
|
|
|
- SUM(CASE WHEN visitor_cnt.cnt >= 10 THEN visitor_cnt.cnt ELSE 0 END) AS groupCount,
|
|
|
- SUM(CASE WHEN visitor_cnt.cnt < 10 THEN visitor_cnt.cnt ELSE 0 END) AS individualCount
|
|
|
- FROM trade_order o
|
|
|
- INNER JOIN (
|
|
|
- SELECT order_id, COUNT(id) AS cnt
|
|
|
- FROM trade_visitor
|
|
|
- WHERE deleted = 0
|
|
|
- GROUP BY order_id
|
|
|
- ) visitor_cnt ON o.id = visitor_cnt.order_id
|
|
|
- WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
- GROUP BY o.voyage_id
|
|
|
+ SELECT
|
|
|
+ o.voyage_id,
|
|
|
+ SUM(CASE WHEN visitor_cnt.cnt >= 10 THEN visitor_cnt.cnt ELSE 0 END) AS groupCount,
|
|
|
+ SUM(CASE WHEN visitor_cnt.cnt < 10 THEN visitor_cnt.cnt ELSE 0 END) AS individualCount
|
|
|
+ FROM trade_order o
|
|
|
+ INNER JOIN (
|
|
|
+ SELECT order_id, COUNT(id) AS cnt
|
|
|
+ FROM trade_visitor
|
|
|
+ WHERE deleted = 0
|
|
|
+ GROUP BY order_id
|
|
|
+ ) visitor_cnt ON o.id = visitor_cnt.order_id
|
|
|
+ WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
+ GROUP BY o.voyage_id
|
|
|
) team_stats ON v.id = team_stats.voyage_id
|
|
|
|
|
|
LEFT JOIN (
|
|
|
- SELECT
|
|
|
- o.voyage_id,
|
|
|
- SUM(CASE WHEN tv.nationality = '1' OR tv.nationality IS NULL OR tv.nationality = '' THEN 1 ELSE 0 END) AS domesticCount,
|
|
|
- SUM(CASE WHEN tv.nationality != '1' AND tv.nationality IS NOT NULL AND tv.nationality != '' THEN 1 ELSE 0 END) AS overseasCount
|
|
|
- FROM trade_order o
|
|
|
- INNER JOIN trade_visitor tv ON o.id = tv.order_id AND tv.deleted = 0
|
|
|
- WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
- GROUP BY o.voyage_id
|
|
|
+ SELECT
|
|
|
+ o.voyage_id,
|
|
|
+ SUM(CASE WHEN tv.nationality = '1' OR tv.nationality IS NULL OR tv.nationality = '' THEN 1 ELSE 0 END) AS domesticCount,
|
|
|
+ SUM(CASE WHEN tv.nationality != '1' AND tv.nationality IS NOT NULL AND tv.nationality != '' THEN 1 ELSE 0 END) AS overseasCount
|
|
|
+ FROM trade_order o
|
|
|
+ INNER JOIN trade_visitor tv ON o.id = tv.order_id AND tv.deleted = 0
|
|
|
+ WHERE o.deleted = 0 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
+ GROUP BY o.voyage_id
|
|
|
) nationality_stats ON v.id = nationality_stats.voyage_id
|
|
|
|
|
|
LEFT JOIN (
|
|
|
- SELECT
|
|
|
- o.voyage_id,
|
|
|
- COUNT(DISTINCT CASE WHEN td.product_id IN (2007974975358070785, 2012077983546568706, 2012078139826335745) THEN td.id END) AS upgradeFloorCount,
|
|
|
- COUNT(DISTINCT CASE WHEN td.product_id = 2013782764375310338 THEN td.id END) AS suiteDiscountCount
|
|
|
- FROM trade_detail td
|
|
|
- INNER JOIN trade_order o ON o.id = td.order_id AND o.deleted = 0
|
|
|
- WHERE td.deleted = 0
|
|
|
- AND o.order_status IN (14, 13, 6, 1)
|
|
|
- AND td.product_id IN (2007974975358070785, 2012077983546568706, 2012078139826335745, 2013782764375310338)
|
|
|
- GROUP BY o.voyage_id
|
|
|
+ SELECT
|
|
|
+ o.voyage_id,
|
|
|
+ COUNT(DISTINCT CASE WHEN td.product_id IN (2007974975358070785, 2012077983546568706, 2012078139826335745) THEN td.id END) AS upgradeFloorCount,
|
|
|
+ COUNT(DISTINCT CASE WHEN td.product_id = 2013782764375310338 THEN td.id END) AS suiteDiscountCount
|
|
|
+ FROM trade_detail td
|
|
|
+ INNER JOIN trade_order o ON o.id = td.order_id AND o.deleted = 0
|
|
|
+ WHERE td.deleted = 0
|
|
|
+ AND o.order_status IN (14, 13, 6, 1)
|
|
|
+ AND td.product_id IN (2007974975358070785, 2012077983546568706, 2012078139826335745, 2013782764375310338)
|
|
|
+ GROUP BY o.voyage_id
|
|
|
) product_stats ON v.id = product_stats.voyage_id
|
|
|
|
|
|
WHERE v.deleted = 0
|
|
|
@@ -164,8 +164,11 @@
|
|
|
#{id}
|
|
|
</foreach>
|
|
|
</if>
|
|
|
- <if test="vo.shipId != null">
|
|
|
- AND v.ship_id = #{vo.shipId}
|
|
|
+ <if test="vo.shipIds != null and vo.shipIds.size() > 0">
|
|
|
+ AND v.ship_id IN
|
|
|
+ <foreach collection="vo.shipIds" item="shipId" open="(" separator="," close=")">
|
|
|
+ #{shipId}
|
|
|
+ </foreach>
|
|
|
</if>
|
|
|
<if test="vo.startDate != null and vo.startDate != ''">
|
|
|
AND v.start_time >= #{vo.startDate}
|