VoyageStockBoardMapper.xml 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.yc.ship.module.trade.dal.mysql.report.VoyageStockBoardMapper">
  4. <select id="selectVoyageStockSummary"
  5. resultType="com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardRespVO">
  6. SELECT
  7. pv.name as voyageName,
  8. COALESCE(pvs.total_num, 0) as totalStock,
  9. COALESCE(pvs.book_num, 0) as soldStock,
  10. COALESCE(pvs.can_sell_num, 0) as remainingStock
  11. FROM product_voyage pv
  12. LEFT JOIN product_voyage_stock pvs ON pv.id = pvs.voyage_id AND pvs.deleted = 0
  13. WHERE pv.id = #{voyageId} AND pv.deleted = 0
  14. </select>
  15. <select id="selectVoyageStockBoardDetail"
  16. resultType="com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardItemVO">
  17. SELECT
  18. t1.room_model_id as roomModelId,
  19. t1.room_model_name as roomModelName,
  20. t1.floor,
  21. COALESCE(t1.total_num, 0) as totalNum,
  22. COALESCE(t1.book_num, 0) as bookedNum,
  23. COALESCE(t1.shelfed_num, 0) as shelfedNum,
  24. COALESCE(lock_stats.deposit_lock, 0) as depositLock,
  25. COALESCE(lock_stats.name_list_lock, 0) as nameListLock,
  26. COALESCE(leave_stats.leave_num, 0) as leaveRoom,
  27. COALESCE(cut_stats.cut_total, 0) as cutTotal,
  28. COALESCE(cut_stats.cut_lock, 0) as cutLock
  29. FROM product_voyage_stock_detail t1
  30. LEFT JOIN (
  31. SELECT
  32. torm.room_model_id,
  33. torm.floor,
  34. SUM(CASE WHEN torder.deposi_status = 1 THEN COALESCE(torm.use_room_num, 0) ELSE 0 END) as deposit_lock,
  35. 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
  36. FROM trade_order_room_model torm
  37. INNER JOIN trade_order torder ON torm.order_id = torder.id AND torder.deleted = 0
  38. WHERE torder.order_status IN (1, 6)
  39. AND torm.deleted = 0
  40. AND torder.voyage_id = #{voyageId}
  41. GROUP BY torm.room_model_id, torm.floor
  42. ) 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))
  43. LEFT JOIN (
  44. SELECT
  45. torm.room_model_id,
  46. torm.floor,
  47. SUM(COALESCE(torm.use_room_num, 0)) as leave_num
  48. FROM trade_order_room_model torm
  49. INNER JOIN trade_order torder ON torm.order_id = torder.id AND torder.deleted = 0
  50. WHERE torder.order_status = 14
  51. AND torm.deleted = 0
  52. AND torder.voyage_id = #{voyageId}
  53. GROUP BY torm.room_model_id, torm.floor
  54. ) 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))
  55. LEFT JOIN (
  56. SELECT
  57. room_model_id,
  58. floor,
  59. SUM(COALESCE(num, 0)) as cut_total,
  60. SUM(COALESCE(book_num, 0)) as cut_lock
  61. FROM product_voyage_stock_distribute_new
  62. WHERE deleted = 0 AND voyage_id = #{voyageId}
  63. GROUP BY room_model_id, floor
  64. ) 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))
  65. WHERE t1.voyage_id = #{voyageId} AND t1.deleted = 0
  66. ORDER BY t1.room_model_id, t1.floor
  67. </select>
  68. <select id="selectYoyVoyageId" resultType="java.lang.Long">
  69. SELECT pv2.id
  70. FROM product_voyage pv1
  71. JOIN resource_route r1 ON pv1.route_id = r1.id AND r1.deleted = 0
  72. JOIN product_voyage pv2 ON pv1.ship_id = pv2.ship_id
  73. JOIN resource_route r2 ON pv2.route_id = r2.id AND r2.deleted = 0 AND r1.direction = r2.direction
  74. WHERE pv1.id = #{voyageId}
  75. AND pv2.start_time = DATE_SUB(pv1.start_time, INTERVAL 1 YEAR)
  76. AND pv2.deleted = 0
  77. LIMIT 1
  78. </select>
  79. <select id="selectMomVoyageId" resultType="java.lang.Long">
  80. SELECT pv2.id
  81. FROM product_voyage pv1
  82. JOIN resource_route r1 ON pv1.route_id = r1.id AND r1.deleted = 0
  83. JOIN product_voyage pv2 ON pv1.ship_id = pv2.ship_id
  84. JOIN resource_route r2 ON pv2.route_id = r2.id AND r2.deleted = 0 AND r1.direction = r2.direction
  85. WHERE pv1.id = #{voyageId}
  86. AND pv2.start_time &lt; pv1.start_time
  87. AND pv2.deleted = 0
  88. ORDER BY pv2.start_time DESC
  89. LIMIT 1
  90. </select>
  91. <select id="selectBookNumByVoyageId"
  92. resultType="com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardItemVO">
  93. SELECT
  94. room_model_id as roomModelId,
  95. floor,
  96. COALESCE(book_num, 0) as bookedNum
  97. FROM product_voyage_stock_detail
  98. WHERE voyage_id = #{voyageId} AND deleted = 0
  99. </select>
  100. <select id="selectVisitorListForSourceDashboard" resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">
  101. SELECT tv.id, tv.credential_type, tv.credential_no, tv.nationality, a.name as nationalityName
  102. FROM trade_visitor tv
  103. INNER JOIN trade_order tor ON tv.order_id = tor.id AND tor.deleted = 0
  104. LEFT JOIN area a ON tv.nationality = a.id
  105. LEFT JOIN product_voyage pv ON tor.voyage_id = pv.id
  106. WHERE tv.deleted = 0
  107. AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  108. <if test="shipId != null">
  109. AND pv.ship_id = #{shipId}
  110. </if>
  111. <if test="voyageIds != null and voyageIds.size() > 0">
  112. AND tor.voyage_id IN
  113. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  114. #{item}
  115. </foreach>
  116. </if>
  117. <if test="voyageTime != null and voyageTime.size() > 0">
  118. AND pv.boarding_time between #{voyageTime[0]} and #{voyageTime[1]}
  119. </if>
  120. <if test="distributorId != null">
  121. AND tor.source_id = #{distributorId}
  122. </if>
  123. </select>
  124. <select id="selectVisitorAgeListForAgeDashboard" resultType="java.lang.Integer">
  125. SELECT tv.age
  126. FROM trade_visitor tv
  127. INNER JOIN trade_order tor ON tv.order_id = tor.id AND tor.deleted = 0
  128. LEFT JOIN product_voyage pv ON tor.voyage_id = pv.id
  129. WHERE tv.deleted = 0
  130. AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  131. <if test="shipId != null">
  132. AND pv.ship_id = #{shipId}
  133. </if>
  134. <if test="voyageIds != null and voyageIds.size() > 0">
  135. AND tor.voyage_id IN
  136. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  137. #{item}
  138. </foreach>
  139. </if>
  140. <if test="voyageTime != null and voyageTime.size() > 0">
  141. AND pv.boarding_time between #{voyageTime[0]} and #{voyageTime[1]}
  142. </if>
  143. <if test="distributorId != null">
  144. AND tor.source_id = #{distributorId}
  145. </if>
  146. </select>
  147. <select id="selectAllVoyageStockPage"
  148. resultType="com.yc.ship.module.trade.controller.admin.report.vo.AllVoyageStockBoardRespVO">
  149. select
  150. pv.id as voyageId,
  151. pv.boarding_time,
  152. DATEDIFF(pv.boarding_time, NOW()) AS countDown,
  153. pvs.voyage_name as voyage
  154. from
  155. product_voyage pv
  156. LEFT JOIN product_voyage_stock pvs ON pvs.voyage_id = pv.id AND pvs.deleted=0
  157. left join trade_order td on td.voyage_id=pv.id and td.deleted=0
  158. where pv.deleted=0
  159. <if test="vo.shipId != null">
  160. and pv.ship_id=#{vo.shipId}
  161. </if>
  162. <if test="vo.routeId != null">
  163. and pv.route_id=#{vo.routeId}
  164. </if>
  165. <if test="vo.voyageId != null">
  166. and pv.id=#{vo.voyageId}
  167. </if>
  168. <if test="vo.voyageTime != null">
  169. and pv.boarding_time between #{vo.voyageTime[0]} and #{vo.voyageTime[1]}
  170. </if>
  171. GROUP BY
  172. pv.id,pv.boarding_time ORDER BY pv.boarding_time ASC
  173. </select>
  174. <select id="selectVoyageStockNum"
  175. resultType="java.util.Map">
  176. SELECT
  177. td.voyage_id,
  178. SUM(torm.use_room_num) AS totalPlanSum,
  179. SUM(CASE WHEN td.order_status IN (1, 6, 13, 15) THEN torm.use_room_num ELSE 0 END) AS realGroupTotal,
  180. SUM(CASE WHEN td.order_status IN (14) THEN torm.use_room_num ELSE 0 END) AS occupyTotal,
  181. (
  182. SELECT SUM(pvs.num)
  183. FROM product_voyage_stock_distribute_new pvs
  184. WHERE pvs.voyage_id = td.voyage_id
  185. AND pvs.deleted = 0
  186. ) AS switchTotal
  187. FROM
  188. trade_order td
  189. LEFT JOIN trade_order_room_model torm ON torm.deleted = 0 AND td.id = torm.order_id
  190. WHERE
  191. td.deleted = 0
  192. AND td.voyage_id = #{voyageId}
  193. AND td.order_status > 0
  194. AND td.order_status IN (1, 6, 13, 14, 15)
  195. </select>
  196. <select id="selectVoyageStockNumGruopByRoomModelIdAndFloor"
  197. resultType="java.util.Map">
  198. SELECT
  199. td.voyage_id,
  200. torm.room_model_name,
  201. CONCAT(torm.floor, 'f') AS floor,
  202. torm.room_model_id,
  203. sum(torm.use_room_num) AS roomNum,
  204. sum(CASE WHEN td.order_status IN (1, 6, 13, 15) THEN torm.use_room_num ELSE 0 END) AS confirmed,
  205. sum(CASE WHEN td.order_status IN (14) THEN torm.use_room_num ELSE 0 END) AS virtualNum
  206. FROM
  207. trade_order td
  208. INNER JOIN trade_order_user tou ON td.id = tou.order_id
  209. AND tou.deleted = 0
  210. LEFT JOIN trade_order_room_model torm ON torm.deleted = 0 AND td.id = torm.order_id
  211. LEFT JOIN resource_room_model rrm ON torm.room_model_id = rrm.id
  212. WHERE td.deleted = 0 and td.voyage_id= #{voyageId} and td.order_status>0
  213. GROUP BY
  214. td.voyage_id, torm.floor, torm.room_model_id order by torm.room_model_id ,torm.floor asc;
  215. </select>
  216. <select id="selectConsumptionProfileList"
  217. resultType="com.yc.ship.module.trade.controller.admin.report.vo.ConsumptionProfileRawVO">
  218. SELECT
  219. pv.id as voyageId,
  220. pv.name as voyageName,
  221. COALESCE(o.totalOrders, 0) as totalOrders,
  222. COALESCE(o.avgAdvanceDays, 0) as avgAdvanceDays,
  223. COALESCE(o.orders0to3, 0) as orders0to3,
  224. COALESCE(o.orders4to7, 0) as orders4to7,
  225. COALESCE(o.orders8to15, 0) as orders8to15,
  226. COALESCE(o.orders16to30, 0) as orders16to30,
  227. COALESCE(o.ordersOver30, 0) as ordersOver30,
  228. COALESCE(s.suiteOrders, 0) as suiteOrders,
  229. COALESCE(v.vaOrders, 0) as vaOrders,
  230. COALESCE(v.vaTotalAmount, 0) as vaTotalAmount,
  231. COALESCE(p.totalPeople, 0) as totalPeople
  232. FROM product_voyage pv
  233. LEFT JOIN (
  234. SELECT
  235. tor.voyage_id,
  236. COUNT(*) as totalOrders,
  237. AVG(GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0)) as avgAdvanceDays,
  238. 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,
  239. 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,
  240. 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,
  241. 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,
  242. SUM(CASE WHEN GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0) > 30 THEN 1 ELSE 0 END) as ordersOver30
  243. FROM trade_order tor
  244. INNER JOIN product_voyage pv2 ON tor.voyage_id = pv2.id AND pv2.deleted = 0
  245. WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  246. GROUP BY tor.voyage_id
  247. ) o ON pv.id = o.voyage_id
  248. LEFT JOIN (
  249. SELECT
  250. tor.voyage_id,
  251. COUNT(DISTINCT tor.id) as suiteOrders
  252. FROM trade_order tor
  253. INNER JOIN trade_order_room_model torm ON tor.id = torm.order_id AND torm.deleted = 0
  254. WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  255. AND torm.room_model_name LIKE CONCAT('%', '套房', '%')
  256. GROUP BY tor.voyage_id
  257. ) s ON pv.id = s.voyage_id
  258. LEFT JOIN (
  259. SELECT
  260. tor.voyage_id,
  261. COUNT(DISTINCT CASE WHEN td.product_id != 0 THEN tor.id END) as vaOrders,
  262. SUM(CASE WHEN td.product_id != 0 THEN COALESCE(td.actual_price, 0) ELSE 0 END) as vaTotalAmount
  263. FROM trade_order tor
  264. LEFT JOIN trade_detail td ON tor.id = td.order_id AND td.deleted = 0
  265. WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  266. GROUP BY tor.voyage_id
  267. ) v ON pv.id = v.voyage_id
  268. LEFT JOIN (
  269. SELECT
  270. tor.voyage_id,
  271. COUNT(tv.id) as totalPeople
  272. FROM trade_order tor
  273. INNER JOIN trade_visitor tv ON tor.id = tv.order_id AND tv.deleted = 0
  274. WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  275. GROUP BY tor.voyage_id
  276. ) p ON pv.id = p.voyage_id
  277. WHERE pv.ship_id = #{shipId}
  278. AND pv.deleted = 0
  279. AND pv.start_time &gt;= #{startDate}
  280. AND pv.start_time &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
  281. ORDER BY pv.start_time
  282. </select>
  283. <!-- 财务营收收款看板:公共查询条件 -->
  284. <sql id="financialRevenueQueryConditions">
  285. <if test="vo.shipIds != null and vo.shipIds.size() > 0">
  286. AND v.ship_id IN
  287. <foreach collection="vo.shipIds" item="shipId" open="(" separator="," close=")">
  288. #{shipId}
  289. </foreach>
  290. </if>
  291. <if test="vo.voyageIds != null and vo.voyageIds.size() > 0">
  292. AND o.voyage_id IN
  293. <foreach collection="vo.voyageIds" item="voyageId" open="(" separator="," close=")">
  294. #{voyageId}
  295. </foreach>
  296. </if>
  297. </sql>
  298. <!-- 查询已完成付款的代理商列表 -->
  299. <select id="selectPaidAgentList"
  300. resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
  301. SELECT
  302. o.source_name AS agentName,
  303. SUM(IFNULL(pay_sum.totalPaid, 0)) AS amount,
  304. NULL AS diffAmount
  305. FROM trade_order o
  306. INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
  307. LEFT JOIN (
  308. SELECT order_id, SUM(pay_amount) AS totalPaid
  309. FROM trade_order_pay
  310. WHERE deleted = 0 AND pay_status = 1
  311. GROUP BY order_id
  312. ) pay_sum ON o.id = pay_sum.order_id
  313. WHERE o.deleted = 0
  314. 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)
  315. <include refid="financialRevenueQueryConditions"/>
  316. GROUP BY o.source_name
  317. HAVING amount > 0
  318. ORDER BY amount DESC
  319. </select>
  320. <!-- 查询未付款的代理商列表 -->
  321. <select id="selectUnpaidAgentList"
  322. resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
  323. SELECT
  324. o.source_name AS agentName,
  325. SUM(IFNULL(o.pay_amount, 0)) AS amount,
  326. NULL AS diffAmount
  327. FROM trade_order o
  328. INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
  329. WHERE o.deleted = 0
  330. 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)
  331. <include refid="financialRevenueQueryConditions"/>
  332. GROUP BY o.source_name
  333. HAVING amount > 0
  334. ORDER BY amount DESC
  335. </select>
  336. <!-- 查询部分付款的代理商列表 -->
  337. <select id="selectPartialPaidAgentList"
  338. resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
  339. SELECT
  340. o.source_name AS agentName,
  341. SUM(IFNULL(pay_sum.totalPaid, 0)) AS amount,
  342. SUM(IFNULL(o.pay_amount, o.amount) - IFNULL(pay_sum.totalPaid, 0)) - SUM(IFNULL(o.deposi, 0)) AS diffAmount
  343. FROM trade_order o
  344. INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
  345. LEFT JOIN (
  346. SELECT order_id, SUM(pay_amount) AS totalPaid
  347. FROM trade_order_pay
  348. WHERE deleted = 0 AND pay_status = 1
  349. GROUP BY order_id
  350. ) pay_sum ON o.id = pay_sum.order_id
  351. WHERE o.deleted = 0
  352. AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  353. AND IFNULL(pay_sum.totalPaid, 0) > 0
  354. <include refid="financialRevenueQueryConditions"/>
  355. GROUP BY o.source_name
  356. HAVING diffAmount > 0
  357. ORDER BY amount DESC
  358. </select>
  359. <!-- ==================== 航次数据情况汇总 ==================== -->
  360. <!-- 查询航次数据汇总所需的游客详细信息 -->
  361. <select id="selectVoyageDataSummaryVisitorList" resultType="java.util.HashMap">
  362. SELECT
  363. tv.id as visitorId,
  364. tv.gender,
  365. tv.age,
  366. tv.credential_type as credentialType,
  367. tv.credential_no as credentialNo,
  368. tv.nationality,
  369. a.name as nationalityName,
  370. tor.id as orderId,
  371. tor.voyage_id as voyageId
  372. FROM trade_visitor tv
  373. INNER JOIN trade_order tor ON tv.order_id = tor.id AND tor.deleted = 0
  374. LEFT JOIN area a ON tv.nationality = a.id
  375. LEFT JOIN product_voyage pv ON tor.voyage_id = pv.id
  376. WHERE tv.deleted = 0
  377. AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  378. <if test="shipId != null">
  379. AND pv.ship_id = #{shipId}
  380. </if>
  381. <if test="voyageIds != null and voyageIds.size() > 0">
  382. AND tor.voyage_id IN
  383. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  384. #{item}
  385. </foreach>
  386. </if>
  387. </select>
  388. <!-- 查询航次数据汇总所需的房型信息 -->
  389. <select id="selectVoyageDataSummaryRoomList" resultType="java.util.HashMap">
  390. SELECT
  391. tor.voyage_id as voyageId,
  392. rrm.short_name as roomModelName,
  393. SUM(COALESCE(torm.use_room_num, 0)) as roomNum
  394. FROM trade_order_room_model torm
  395. INNER JOIN trade_order tor ON torm.order_id = tor.id AND tor.deleted = 0
  396. INNER JOIN resource_room_model rrm ON torm.room_model_id = rrm.id
  397. WHERE torm.deleted = 0
  398. AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  399. AND torm.room_model_name IS NOT NULL
  400. AND torm.room_model_name != ''
  401. <if test="shipId != null">
  402. AND tor.ship_id = #{shipId}
  403. </if>
  404. <if test="voyageIds != null and voyageIds.size() > 0">
  405. AND tor.voyage_id IN
  406. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  407. #{item}
  408. </foreach>
  409. </if>
  410. GROUP BY tor.voyage_id, rrm.short_name
  411. ORDER BY SUM(COALESCE(torm.use_room_num, 0)) DESC
  412. </select>
  413. <!-- 查询航次基本信息 -->
  414. <select id="selectVoyageBaseInfoList" resultType="java.util.HashMap">
  415. SELECT
  416. pv.id as voyageId,
  417. pv.name as voyageName,
  418. pv.boarding_time as startTime,
  419. rs.name as shipName,
  420. rr.direction as direction,
  421. CASE rr.direction
  422. WHEN 1 THEN '上水'
  423. WHEN 2 THEN '下水'
  424. ELSE '未知'
  425. END as directionLabel
  426. FROM product_voyage pv
  427. INNER JOIN resource_ship rs ON pv.ship_id = rs.id AND rs.deleted = 0
  428. INNER JOIN resource_route rr ON pv.route_id = rr.id AND rr.deleted = 0
  429. WHERE pv.deleted = 0
  430. <if test="shipId != null">
  431. AND pv.ship_id = #{shipId}
  432. </if>
  433. <if test="voyageIds != null and voyageIds.size() > 0">
  434. AND pv.id IN
  435. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  436. #{item}
  437. </foreach>
  438. </if>
  439. ORDER BY pv.start_time ASC
  440. </select>
  441. </mapper>