|
|
@@ -216,4 +216,73 @@
|
|
|
td.voyage_id, torm.floor, torm.room_model_id order by torm.room_model_id ,torm.floor asc;
|
|
|
</select>
|
|
|
|
|
|
+
|
|
|
+ <select id="selectConsumptionProfileList"
|
|
|
+ resultType="com.yc.ship.module.trade.controller.admin.report.vo.ConsumptionProfileRawVO">
|
|
|
+ SELECT
|
|
|
+ pv.id as voyageId,
|
|
|
+ pv.name as voyageName,
|
|
|
+ COALESCE(o.totalOrders, 0) as totalOrders,
|
|
|
+ COALESCE(o.avgAdvanceDays, 0) as avgAdvanceDays,
|
|
|
+ COALESCE(o.orders0to3, 0) as orders0to3,
|
|
|
+ COALESCE(o.orders4to7, 0) as orders4to7,
|
|
|
+ COALESCE(o.orders8to15, 0) as orders8to15,
|
|
|
+ COALESCE(o.orders16to30, 0) as orders16to30,
|
|
|
+ COALESCE(o.ordersOver30, 0) as ordersOver30,
|
|
|
+ COALESCE(s.suiteOrders, 0) as suiteOrders,
|
|
|
+ COALESCE(v.vaOrders, 0) as vaOrders,
|
|
|
+ COALESCE(v.vaTotalAmount, 0) as vaTotalAmount,
|
|
|
+ COALESCE(p.totalPeople, 0) as totalPeople
|
|
|
+ FROM product_voyage pv
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ tor.voyage_id,
|
|
|
+ COUNT(*) as totalOrders,
|
|
|
+ AVG(GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0)) as avgAdvanceDays,
|
|
|
+ SUM(CASE WHEN GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0) BETWEEN 0 AND 3 THEN 1 ELSE 0 END) as orders0to3,
|
|
|
+ SUM(CASE WHEN GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0) BETWEEN 4 AND 7 THEN 1 ELSE 0 END) as orders4to7,
|
|
|
+ SUM(CASE WHEN GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0) BETWEEN 8 AND 15 THEN 1 ELSE 0 END) as orders8to15,
|
|
|
+ SUM(CASE WHEN GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0) BETWEEN 16 AND 30 THEN 1 ELSE 0 END) as orders16to30,
|
|
|
+ SUM(CASE WHEN GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0) > 30 THEN 1 ELSE 0 END) as ordersOver30
|
|
|
+ FROM trade_order tor
|
|
|
+ INNER JOIN product_voyage pv2 ON tor.voyage_id = pv2.id AND pv2.deleted = 0
|
|
|
+ WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
+ GROUP BY tor.voyage_id
|
|
|
+ ) o ON pv.id = o.voyage_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ tor.voyage_id,
|
|
|
+ COUNT(DISTINCT tor.id) as suiteOrders
|
|
|
+ FROM trade_order tor
|
|
|
+ INNER JOIN trade_order_room_model torm ON tor.id = torm.order_id AND torm.deleted = 0
|
|
|
+ WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
+ AND torm.room_model_name LIKE CONCAT('%', '套房', '%')
|
|
|
+ GROUP BY tor.voyage_id
|
|
|
+ ) s ON pv.id = s.voyage_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ tor.voyage_id,
|
|
|
+ COUNT(DISTINCT CASE WHEN td.product_id != 0 THEN tor.id END) as vaOrders,
|
|
|
+ SUM(CASE WHEN td.product_id != 0 THEN COALESCE(td.actual_price, 0) ELSE 0 END) as vaTotalAmount
|
|
|
+ FROM trade_order tor
|
|
|
+ LEFT JOIN trade_detail td ON tor.id = td.order_id AND td.deleted = 0
|
|
|
+ WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
+ GROUP BY tor.voyage_id
|
|
|
+ ) v ON pv.id = v.voyage_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ tor.voyage_id,
|
|
|
+ COUNT(tv.id) as totalPeople
|
|
|
+ FROM trade_order tor
|
|
|
+ INNER JOIN trade_visitor tv ON tor.id = tv.order_id AND tv.deleted = 0
|
|
|
+ WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
|
|
|
+ GROUP BY tor.voyage_id
|
|
|
+ ) p ON pv.id = p.voyage_id
|
|
|
+ WHERE pv.ship_id = #{shipId}
|
|
|
+ AND pv.deleted = 0
|
|
|
+ AND pv.start_time >= #{startDate}
|
|
|
+ AND pv.start_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
|
|
+ ORDER BY pv.start_time
|
|
|
+ </select>
|
|
|
+
|
|
|
</mapper>
|