| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453 |
- <?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.yc.ship.module.trade.dal.mysql.report.VoyageStockBoardMapper">
- <select id="selectVoyageStockSummary"
- resultType="com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardRespVO">
- SELECT
- pv.name as voyageName,
- COALESCE(pvs.total_num, 0) as totalStock,
- COALESCE(pvs.book_num, 0) as soldStock,
- COALESCE(pvs.can_sell_num, 0) as remainingStock
- FROM product_voyage pv
- LEFT JOIN product_voyage_stock pvs ON pv.id = pvs.voyage_id AND pvs.deleted = 0
- WHERE pv.id = #{voyageId} AND pv.deleted = 0
- </select>
- <select id="selectVoyageStockBoardDetail"
- resultType="com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardItemVO">
- SELECT
- t1.room_model_id as roomModelId,
- t1.room_model_name as roomModelName,
- t1.floor,
- COALESCE(t1.total_num, 0) as totalNum,
- COALESCE(t1.book_num, 0) as bookedNum,
- COALESCE(t1.shelfed_num, 0) as shelfedNum,
- COALESCE(lock_stats.deposit_lock, 0) as depositLock,
- COALESCE(lock_stats.name_list_lock, 0) as nameListLock,
- COALESCE(leave_stats.leave_num, 0) as leaveRoom,
- COALESCE(cut_stats.cut_total, 0) as cutTotal,
- COALESCE(cut_stats.cut_lock, 0) as cutLock
- FROM product_voyage_stock_detail t1
- LEFT JOIN (
- SELECT
- torm.room_model_id,
- torm.floor,
- SUM(CASE WHEN torder.deposi_status = 1 THEN COALESCE(torm.use_room_num, 0) ELSE 0 END) as deposit_lock,
- SUM(CASE WHEN torder.deposi_status != 1 or torder.deposi_status is null THEN COALESCE(torm.use_room_num, 0) ELSE 0 END) as name_list_lock
- FROM trade_order_room_model torm
- INNER JOIN trade_order torder ON torm.order_id = torder.id AND torder.deleted = 0
- WHERE torder.order_status IN (1, 6)
- AND torm.deleted = 0
- AND torder.voyage_id = #{voyageId}
- GROUP BY torm.room_model_id, torm.floor
- ) lock_stats ON t1.room_model_id = lock_stats.room_model_id AND (t1.floor = lock_stats.floor OR (t1.floor IS NULL AND lock_stats.floor IS NULL))
- LEFT JOIN (
- SELECT
- torm.room_model_id,
- torm.floor,
- SUM(COALESCE(torm.use_room_num, 0)) as leave_num
- FROM trade_order_room_model torm
- INNER JOIN trade_order torder ON torm.order_id = torder.id AND torder.deleted = 0
- WHERE torder.order_status = 14
- AND torm.deleted = 0
- AND torder.voyage_id = #{voyageId}
- GROUP BY torm.room_model_id, torm.floor
- ) leave_stats ON t1.room_model_id = leave_stats.room_model_id AND (t1.floor = leave_stats.floor OR (t1.floor IS NULL AND leave_stats.floor IS NULL))
- LEFT JOIN (
- SELECT
- room_model_id,
- floor,
- SUM(COALESCE(num, 0)) as cut_total,
- SUM(COALESCE(book_num, 0)) as cut_lock
- FROM product_voyage_stock_distribute_new
- WHERE deleted = 0 AND voyage_id = #{voyageId}
- GROUP BY room_model_id, floor
- ) cut_stats ON t1.room_model_id = cut_stats.room_model_id AND (t1.floor = cut_stats.floor OR (t1.floor IS NULL AND cut_stats.floor IS NULL))
- WHERE t1.voyage_id = #{voyageId} AND t1.deleted = 0
- ORDER BY t1.room_model_id, t1.floor
- </select>
- <select id="selectYoyVoyageId" resultType="java.lang.Long">
- SELECT pv2.id
- FROM product_voyage pv1
- JOIN resource_route r1 ON pv1.route_id = r1.id AND r1.deleted = 0
- JOIN product_voyage pv2 ON pv1.ship_id = pv2.ship_id
- JOIN resource_route r2 ON pv2.route_id = r2.id AND r2.deleted = 0 AND r1.direction = r2.direction
- WHERE pv1.id = #{voyageId}
- AND pv2.start_time = DATE_SUB(pv1.start_time, INTERVAL 1 YEAR)
- AND pv2.deleted = 0
- LIMIT 1
- </select>
- <select id="selectMomVoyageId" resultType="java.lang.Long">
- SELECT pv2.id
- FROM product_voyage pv1
- JOIN resource_route r1 ON pv1.route_id = r1.id AND r1.deleted = 0
- JOIN product_voyage pv2 ON pv1.ship_id = pv2.ship_id
- JOIN resource_route r2 ON pv2.route_id = r2.id AND r2.deleted = 0 AND r1.direction = r2.direction
- WHERE pv1.id = #{voyageId}
- AND pv2.start_time < pv1.start_time
- AND pv2.deleted = 0
- ORDER BY pv2.start_time DESC
- LIMIT 1
- </select>
- <select id="selectBookNumByVoyageId"
- resultType="com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardItemVO">
- SELECT
- room_model_id as roomModelId,
- floor,
- COALESCE(book_num, 0) as bookedNum
- FROM product_voyage_stock_detail
- WHERE voyage_id = #{voyageId} AND deleted = 0
- </select>
- <select id="selectVisitorListForSourceDashboard" resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">
- SELECT tv.id, tv.credential_type, tv.credential_no, tv.nationality, a.name as nationalityName
- FROM trade_visitor tv
- INNER JOIN trade_order tor ON tv.order_id = tor.id AND tor.deleted = 0
- LEFT JOIN area a ON tv.nationality = a.id
- LEFT JOIN product_voyage pv ON tor.voyage_id = pv.id
- WHERE tv.deleted = 0
- AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
- <if test="shipId != null">
- AND pv.ship_id = #{shipId}
- </if>
- <if test="voyageIds != null and voyageIds.size() > 0">
- AND tor.voyage_id IN
- <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
- #{item}
- </foreach>
- </if>
- </select>
- <select id="selectVisitorAgeListForAgeDashboard" resultType="java.lang.Integer">
- SELECT tv.age
- FROM trade_visitor tv
- INNER JOIN trade_order tor ON tv.order_id = tor.id AND tor.deleted = 0
- LEFT JOIN product_voyage pv ON tor.voyage_id = pv.id
- WHERE tv.deleted = 0
- AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
- <if test="shipId != null">
- AND pv.ship_id = #{shipId}
- </if>
- <if test="voyageIds != null and voyageIds.size() > 0">
- AND tor.voyage_id IN
- <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
- #{item}
- </foreach>
- </if>
- </select>
- <select id="selectAllVoyageStockPage"
- resultType="com.yc.ship.module.trade.controller.admin.report.vo.AllVoyageStockBoardRespVO">
- select
- pv.id as voyageId,
- pv.boarding_time,
- DATEDIFF(pv.boarding_time, NOW()) AS countDown,
- pvs.voyage_name as voyage
- from
- product_voyage pv
- LEFT JOIN product_voyage_stock pvs ON pvs.voyage_id = pv.id AND pvs.deleted=0
- left join trade_order td on td.voyage_id=pv.id and td.deleted=0
- where pv.deleted=0
- <if test="vo.shipId != null">
- and pv.ship_id=#{vo.shipId}
- </if>
- <if test="vo.routeId != null">
- and pv.route_id=#{vo.routeId}
- </if>
- <if test="vo.voyageId != null">
- and pv.id=#{vo.voyageId}
- </if>
- <if test="vo.voyageTime != null">
- and pv.boarding_time between #{vo.voyageTime[0]} and #{vo.voyageTime[1]}
- </if>
- GROUP BY
- pv.id,pv.boarding_time ORDER BY pv.boarding_time ASC
- </select>
- <select id="selectVoyageStockNum"
- resultType="java.util.Map">
- SELECT
- td.voyage_id,
- SUM(torm.use_room_num) AS totalPlanSum,
- SUM(CASE WHEN td.order_status IN (1, 6, 13, 15) THEN torm.use_room_num ELSE 0 END) AS realGroupTotal,
- SUM(CASE WHEN td.order_status IN (14) THEN torm.use_room_num ELSE 0 END) AS occupyTotal,
- (
- SELECT SUM(pvs.num)
- FROM product_voyage_stock_distribute_new pvs
- WHERE pvs.voyage_id = td.voyage_id
- AND pvs.deleted = 0
- ) AS switchTotal
- FROM
- trade_order td
- LEFT JOIN trade_order_room_model torm ON torm.deleted = 0 AND td.id = torm.order_id
- WHERE
- td.deleted = 0
- AND td.voyage_id = #{voyageId}
- AND td.order_status > 0
- AND td.order_status IN (1, 6, 13, 14, 15)
- </select>
- <select id="selectVoyageStockNumGruopByRoomModelIdAndFloor"
- resultType="java.util.Map">
- SELECT
- td.voyage_id,
- torm.room_model_name,
- CONCAT(torm.floor, 'f') AS floor,
- torm.room_model_id,
- sum(torm.use_room_num) AS roomNum,
- sum(CASE WHEN td.order_status IN (1, 6, 13, 15) THEN torm.use_room_num ELSE 0 END) AS confirmed,
- sum(CASE WHEN td.order_status IN (14) THEN torm.use_room_num ELSE 0 END) AS virtualNum
- FROM
- trade_order td
- INNER JOIN trade_order_user tou ON td.id = tou.order_id
- AND tou.deleted = 0
- LEFT JOIN trade_order_room_model torm ON torm.deleted = 0 AND td.id = torm.order_id
- LEFT JOIN resource_room_model rrm ON torm.room_model_id = rrm.id
- WHERE td.deleted = 0 and td.voyage_id= #{voyageId} and td.order_status>0
- GROUP BY
- 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>
- <!-- 财务营收收款看板:公共查询条件 -->
- <sql id="financialRevenueQueryConditions">
- <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.voyageIds != null and vo.voyageIds.size() > 0">
- AND o.voyage_id IN
- <foreach collection="vo.voyageIds" item="voyageId" open="(" separator="," close=")">
- #{voyageId}
- </foreach>
- </if>
- </sql>
- <!-- 查询已完成付款的代理商列表 -->
- <select id="selectPaidAgentList"
- resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
- SELECT
- o.source_name AS agentName,
- SUM(IFNULL(pay_sum.totalPaid, 0)) AS amount,
- NULL AS diffAmount
- FROM trade_order o
- INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
- LEFT JOIN (
- SELECT order_id, SUM(pay_amount) AS totalPaid
- FROM trade_order_pay
- WHERE deleted = 0 AND pay_status = 1
- GROUP BY order_id
- ) pay_sum ON o.id = pay_sum.order_id
- WHERE o.deleted = 0
- AND o.is_full_pay = 1 AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
- <include refid="financialRevenueQueryConditions"/>
- GROUP BY o.source_name
- HAVING amount > 0
- ORDER BY amount DESC
- </select>
- <!-- 查询未付款的代理商列表 -->
- <select id="selectUnpaidAgentList"
- resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
- SELECT
- o.source_name AS agentName,
- SUM(IFNULL(o.pay_amount, 0)) AS amount,
- NULL AS diffAmount
- FROM trade_order o
- INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
- WHERE o.deleted = 0
- AND o.pay_status IN (0, 2) AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
- <include refid="financialRevenueQueryConditions"/>
- GROUP BY o.source_name
- HAVING amount > 0
- ORDER BY amount DESC
- </select>
- <!-- 查询部分付款的代理商列表 -->
- <select id="selectPartialPaidAgentList"
- resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
- SELECT
- o.source_name AS agentName,
- SUM(IFNULL(pay_sum.totalPaid, 0)) AS amount,
- SUM(IFNULL(o.pay_amount, o.amount) - IFNULL(pay_sum.totalPaid, 0)) - SUM(IFNULL(o.deposi, 0)) AS diffAmount
- FROM trade_order o
- INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
- LEFT JOIN (
- SELECT order_id, SUM(pay_amount) AS totalPaid
- FROM trade_order_pay
- WHERE deleted = 0 AND pay_status = 1
- GROUP BY order_id
- ) pay_sum ON o.id = pay_sum.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)
- AND IFNULL(pay_sum.totalPaid, 0) > 0
- <include refid="financialRevenueQueryConditions"/>
- GROUP BY o.source_name
- HAVING diffAmount > 0
- ORDER BY amount DESC
- </select>
- <!-- ==================== 航次数据情况汇总 ==================== -->
- <!-- 查询航次数据汇总所需的游客详细信息 -->
- <select id="selectVoyageDataSummaryVisitorList" resultType="java.util.HashMap">
- SELECT
- tv.id as visitorId,
- tv.gender,
- tv.age,
- tv.credential_type as credentialType,
- tv.credential_no as credentialNo,
- tv.nationality,
- a.name as nationalityName,
- tor.id as orderId,
- tor.voyage_id as voyageId
- FROM trade_visitor tv
- INNER JOIN trade_order tor ON tv.order_id = tor.id AND tor.deleted = 0
- LEFT JOIN area a ON tv.nationality = a.id
- LEFT JOIN product_voyage pv ON tor.voyage_id = pv.id
- WHERE tv.deleted = 0
- AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
- <if test="shipId != null">
- AND pv.ship_id = #{shipId}
- </if>
- <if test="voyageIds != null and voyageIds.size() > 0">
- AND tor.voyage_id IN
- <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
- #{item}
- </foreach>
- </if>
- </select>
- <!-- 查询航次数据汇总所需的房型信息 -->
- <select id="selectVoyageDataSummaryRoomList" resultType="java.util.HashMap">
- SELECT
- tor.voyage_id as voyageId,
- torm.room_model_name as roomModelName,
- SUM(COALESCE(torm.use_room_num, 0)) as roomNum
- FROM trade_order_room_model torm
- INNER JOIN trade_order tor ON torm.order_id = tor.id AND tor.deleted = 0
- WHERE torm.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 IS NOT NULL
- AND torm.room_model_name != ''
- <if test="shipId != null">
- AND tor.ship_id = #{shipId}
- </if>
- <if test="voyageIds != null and voyageIds.size() > 0">
- AND tor.voyage_id IN
- <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
- #{item}
- </foreach>
- </if>
- GROUP BY tor.voyage_id, torm.room_model_name
- ORDER BY SUM(COALESCE(torm.use_room_num, 0)) DESC
- </select>
- <!-- 查询航次基本信息 -->
- <select id="selectVoyageBaseInfoList" resultType="java.util.HashMap">
- SELECT
- pv.id as voyageId,
- pv.name as voyageName,
- pv.boarding_time as startTime,
- rs.name as shipName,
- rr.direction as direction,
- CASE rr.direction
- WHEN 1 THEN '上水'
- WHEN 2 THEN '下水'
- ELSE '未知'
- END as directionLabel
- FROM product_voyage pv
- INNER JOIN resource_ship rs ON pv.ship_id = rs.id AND rs.deleted = 0
- INNER JOIN resource_route rr ON pv.route_id = rr.id AND rr.deleted = 0
- WHERE pv.deleted = 0
- <if test="shipId != null">
- AND pv.ship_id = #{shipId}
- </if>
- <if test="voyageIds != null and voyageIds.size() > 0">
- AND pv.id IN
- <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
- #{item}
- </foreach>
- </if>
- ORDER BY pv.start_time ASC
- </select>
- </mapper>
|