VoyageStockBoardMapper.xml 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  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. </select>
  118. <select id="selectVisitorAgeListForAgeDashboard" resultType="java.lang.Integer">
  119. SELECT tv.age
  120. FROM trade_visitor tv
  121. INNER JOIN trade_order tor ON tv.order_id = tor.id AND tor.deleted = 0
  122. LEFT JOIN product_voyage pv ON tor.voyage_id = pv.id
  123. WHERE tv.deleted = 0
  124. AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  125. <if test="shipId != null">
  126. AND pv.ship_id = #{shipId}
  127. </if>
  128. <if test="voyageIds != null and voyageIds.size() > 0">
  129. AND tor.voyage_id IN
  130. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  131. #{item}
  132. </foreach>
  133. </if>
  134. </select>
  135. <select id="selectAllVoyageStockPage"
  136. resultType="com.yc.ship.module.trade.controller.admin.report.vo.AllVoyageStockBoardRespVO">
  137. select
  138. pv.id as voyageId,
  139. pv.boarding_time,
  140. DATEDIFF(pv.boarding_time, NOW()) AS countDown,
  141. pvs.voyage_name as voyage
  142. from
  143. product_voyage pv
  144. LEFT JOIN product_voyage_stock pvs ON pvs.voyage_id = pv.id AND pvs.deleted=0
  145. left join trade_order td on td.voyage_id=pv.id and td.deleted=0
  146. where pv.deleted=0
  147. <if test="vo.shipId != null">
  148. and pv.ship_id=#{vo.shipId}
  149. </if>
  150. <if test="vo.routeId != null">
  151. and pv.route_id=#{vo.routeId}
  152. </if>
  153. <if test="vo.voyageId != null">
  154. and pv.id=#{vo.voyageId}
  155. </if>
  156. <if test="vo.voyageTime != null">
  157. and pv.boarding_time between #{vo.voyageTime[0]} and #{vo.voyageTime[1]}
  158. </if>
  159. GROUP BY
  160. pv.id,pv.boarding_time ORDER BY pv.boarding_time ASC
  161. </select>
  162. <select id="selectVoyageStockNum"
  163. resultType="java.util.Map">
  164. SELECT
  165. td.voyage_id,
  166. SUM(torm.use_room_num) AS totalPlanSum,
  167. SUM(CASE WHEN td.order_status IN (1, 6, 13, 15) THEN torm.use_room_num ELSE 0 END) AS realGroupTotal,
  168. SUM(CASE WHEN td.order_status IN (14) THEN torm.use_room_num ELSE 0 END) AS occupyTotal,
  169. (
  170. SELECT SUM(pvs.num)
  171. FROM product_voyage_stock_distribute_new pvs
  172. WHERE pvs.voyage_id = td.voyage_id
  173. AND pvs.deleted = 0
  174. ) AS switchTotal
  175. FROM
  176. trade_order td
  177. LEFT JOIN trade_order_room_model torm ON torm.deleted = 0 AND td.id = torm.order_id
  178. WHERE
  179. td.deleted = 0
  180. AND td.voyage_id = #{voyageId}
  181. AND td.order_status > 0
  182. AND td.order_status IN (1, 6, 13, 14, 15)
  183. </select>
  184. <select id="selectVoyageStockNumGruopByRoomModelIdAndFloor"
  185. resultType="java.util.Map">
  186. SELECT
  187. td.voyage_id,
  188. torm.room_model_name,
  189. CONCAT(torm.floor, 'f') AS floor,
  190. torm.room_model_id,
  191. sum(torm.use_room_num) AS roomNum,
  192. sum(CASE WHEN td.order_status IN (1, 6, 13, 15) THEN torm.use_room_num ELSE 0 END) AS confirmed,
  193. sum(CASE WHEN td.order_status IN (14) THEN torm.use_room_num ELSE 0 END) AS virtualNum
  194. FROM
  195. trade_order td
  196. INNER JOIN trade_order_user tou ON td.id = tou.order_id
  197. AND tou.deleted = 0
  198. LEFT JOIN trade_order_room_model torm ON torm.deleted = 0 AND td.id = torm.order_id
  199. LEFT JOIN resource_room_model rrm ON torm.room_model_id = rrm.id
  200. WHERE td.deleted = 0 and td.voyage_id= #{voyageId} and td.order_status>0
  201. GROUP BY
  202. td.voyage_id, torm.floor, torm.room_model_id order by torm.room_model_id ,torm.floor asc;
  203. </select>
  204. <select id="selectConsumptionProfileList"
  205. resultType="com.yc.ship.module.trade.controller.admin.report.vo.ConsumptionProfileRawVO">
  206. SELECT
  207. pv.id as voyageId,
  208. pv.name as voyageName,
  209. COALESCE(o.totalOrders, 0) as totalOrders,
  210. COALESCE(o.avgAdvanceDays, 0) as avgAdvanceDays,
  211. COALESCE(o.orders0to3, 0) as orders0to3,
  212. COALESCE(o.orders4to7, 0) as orders4to7,
  213. COALESCE(o.orders8to15, 0) as orders8to15,
  214. COALESCE(o.orders16to30, 0) as orders16to30,
  215. COALESCE(o.ordersOver30, 0) as ordersOver30,
  216. COALESCE(s.suiteOrders, 0) as suiteOrders,
  217. COALESCE(v.vaOrders, 0) as vaOrders,
  218. COALESCE(v.vaTotalAmount, 0) as vaTotalAmount,
  219. COALESCE(p.totalPeople, 0) as totalPeople
  220. FROM product_voyage pv
  221. LEFT JOIN (
  222. SELECT
  223. tor.voyage_id,
  224. COUNT(*) as totalOrders,
  225. AVG(GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0)) as avgAdvanceDays,
  226. 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,
  227. 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,
  228. 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,
  229. 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,
  230. SUM(CASE WHEN GREATEST(DATEDIFF(DATE(pv2.start_time), DATE(tor.create_time)), 0) > 30 THEN 1 ELSE 0 END) as ordersOver30
  231. FROM trade_order tor
  232. INNER JOIN product_voyage pv2 ON tor.voyage_id = pv2.id AND pv2.deleted = 0
  233. WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  234. GROUP BY tor.voyage_id
  235. ) o ON pv.id = o.voyage_id
  236. LEFT JOIN (
  237. SELECT
  238. tor.voyage_id,
  239. COUNT(DISTINCT tor.id) as suiteOrders
  240. FROM trade_order tor
  241. INNER JOIN trade_order_room_model torm ON tor.id = torm.order_id AND torm.deleted = 0
  242. WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  243. AND torm.room_model_name LIKE CONCAT('%', '套房', '%')
  244. GROUP BY tor.voyage_id
  245. ) s ON pv.id = s.voyage_id
  246. LEFT JOIN (
  247. SELECT
  248. tor.voyage_id,
  249. COUNT(DISTINCT CASE WHEN td.product_id != 0 THEN tor.id END) as vaOrders,
  250. SUM(CASE WHEN td.product_id != 0 THEN COALESCE(td.actual_price, 0) ELSE 0 END) as vaTotalAmount
  251. FROM trade_order tor
  252. LEFT JOIN trade_detail td ON tor.id = td.order_id AND td.deleted = 0
  253. WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  254. GROUP BY tor.voyage_id
  255. ) v ON pv.id = v.voyage_id
  256. LEFT JOIN (
  257. SELECT
  258. tor.voyage_id,
  259. COUNT(tv.id) as totalPeople
  260. FROM trade_order tor
  261. INNER JOIN trade_visitor tv ON tor.id = tv.order_id AND tv.deleted = 0
  262. WHERE tor.deleted = 0 AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  263. GROUP BY tor.voyage_id
  264. ) p ON pv.id = p.voyage_id
  265. WHERE pv.ship_id = #{shipId}
  266. AND pv.deleted = 0
  267. AND pv.start_time &gt;= #{startDate}
  268. AND pv.start_time &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
  269. ORDER BY pv.start_time
  270. </select>
  271. <!-- 财务营收收款看板:公共查询条件 -->
  272. <sql id="financialRevenueQueryConditions">
  273. <if test="vo.shipIds != null and vo.shipIds.size() > 0">
  274. AND v.ship_id IN
  275. <foreach collection="vo.shipIds" item="shipId" open="(" separator="," close=")">
  276. #{shipId}
  277. </foreach>
  278. </if>
  279. <if test="vo.voyageIds != null and vo.voyageIds.size() > 0">
  280. AND o.voyage_id IN
  281. <foreach collection="vo.voyageIds" item="voyageId" open="(" separator="," close=")">
  282. #{voyageId}
  283. </foreach>
  284. </if>
  285. </sql>
  286. <!-- 查询已完成付款的代理商列表 -->
  287. <select id="selectPaidAgentList"
  288. resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
  289. SELECT
  290. o.source_name AS agentName,
  291. SUM(IFNULL(pay_sum.totalPaid, 0)) AS amount,
  292. NULL AS diffAmount
  293. FROM trade_order o
  294. INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
  295. LEFT JOIN (
  296. SELECT order_id, SUM(pay_amount) AS totalPaid
  297. FROM trade_order_pay
  298. WHERE deleted = 0 AND pay_status = 1
  299. GROUP BY order_id
  300. ) pay_sum ON o.id = pay_sum.order_id
  301. WHERE o.deleted = 0
  302. 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)
  303. <include refid="financialRevenueQueryConditions"/>
  304. GROUP BY o.source_name
  305. HAVING amount > 0
  306. ORDER BY amount DESC
  307. </select>
  308. <!-- 查询未付款的代理商列表 -->
  309. <select id="selectUnpaidAgentList"
  310. resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
  311. SELECT
  312. o.source_name AS agentName,
  313. SUM(IFNULL(o.pay_amount, 0)) AS amount,
  314. NULL AS diffAmount
  315. FROM trade_order o
  316. INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
  317. WHERE o.deleted = 0
  318. 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)
  319. <include refid="financialRevenueQueryConditions"/>
  320. GROUP BY o.source_name
  321. HAVING amount > 0
  322. ORDER BY amount DESC
  323. </select>
  324. <!-- 查询部分付款的代理商列表 -->
  325. <select id="selectPartialPaidAgentList"
  326. resultType="com.yc.ship.module.trade.controller.admin.report.vo.FinancialRevenueDashboardRespVO$AgentPaymentItemVO">
  327. SELECT
  328. o.source_name AS agentName,
  329. SUM(IFNULL(pay_sum.totalPaid, 0)) AS amount,
  330. SUM(IFNULL(o.pay_amount, o.amount) - IFNULL(pay_sum.totalPaid, 0)) - SUM(IFNULL(o.deposi, 0)) AS diffAmount
  331. FROM trade_order o
  332. INNER JOIN product_voyage v ON o.voyage_id = v.id AND v.deleted = 0
  333. LEFT JOIN (
  334. SELECT order_id, SUM(pay_amount) AS totalPaid
  335. FROM trade_order_pay
  336. WHERE deleted = 0 AND pay_status = 1
  337. GROUP BY order_id
  338. ) pay_sum ON o.id = pay_sum.order_id
  339. WHERE o.deleted = 0
  340. AND o.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  341. AND IFNULL(pay_sum.totalPaid, 0) > 0
  342. <include refid="financialRevenueQueryConditions"/>
  343. GROUP BY o.source_name
  344. HAVING diffAmount > 0
  345. ORDER BY amount DESC
  346. </select>
  347. <!-- ==================== 航次数据情况汇总 ==================== -->
  348. <!-- 查询航次数据汇总所需的游客详细信息 -->
  349. <select id="selectVoyageDataSummaryVisitorList" resultType="java.util.HashMap">
  350. SELECT
  351. tv.id as visitorId,
  352. tv.gender,
  353. tv.age,
  354. tv.credential_type as credentialType,
  355. tv.credential_no as credentialNo,
  356. tv.nationality,
  357. a.name as nationalityName,
  358. tor.id as orderId,
  359. tor.voyage_id as voyageId
  360. FROM trade_visitor tv
  361. INNER JOIN trade_order tor ON tv.order_id = tor.id AND tor.deleted = 0
  362. LEFT JOIN area a ON tv.nationality = a.id
  363. LEFT JOIN product_voyage pv ON tor.voyage_id = pv.id
  364. WHERE tv.deleted = 0
  365. AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  366. <if test="shipId != null">
  367. AND pv.ship_id = #{shipId}
  368. </if>
  369. <if test="voyageIds != null and voyageIds.size() > 0">
  370. AND tor.voyage_id IN
  371. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  372. #{item}
  373. </foreach>
  374. </if>
  375. </select>
  376. <!-- 查询航次数据汇总所需的房型信息 -->
  377. <select id="selectVoyageDataSummaryRoomList" resultType="java.util.HashMap">
  378. SELECT
  379. tor.voyage_id as voyageId,
  380. torm.room_model_name as roomModelName,
  381. SUM(COALESCE(torm.use_room_num, 0)) as roomNum
  382. FROM trade_order_room_model torm
  383. INNER JOIN trade_order tor ON torm.order_id = tor.id AND tor.deleted = 0
  384. WHERE torm.deleted = 0
  385. AND tor.order_status IN (15, 14, 13, 10, 12, 9, 8, 7, 6, 5, 4, 3, 1, 0)
  386. AND torm.room_model_name IS NOT NULL
  387. AND torm.room_model_name != ''
  388. <if test="shipId != null">
  389. AND tor.ship_id = #{shipId}
  390. </if>
  391. <if test="voyageIds != null and voyageIds.size() > 0">
  392. AND tor.voyage_id IN
  393. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  394. #{item}
  395. </foreach>
  396. </if>
  397. GROUP BY tor.voyage_id, torm.room_model_name
  398. ORDER BY SUM(COALESCE(torm.use_room_num, 0)) DESC
  399. </select>
  400. <!-- 查询航次基本信息 -->
  401. <select id="selectVoyageBaseInfoList" resultType="java.util.HashMap">
  402. SELECT
  403. pv.id as voyageId,
  404. pv.name as voyageName,
  405. pv.boarding_time as startTime,
  406. rs.name as shipName,
  407. rr.direction as direction,
  408. CASE rr.direction
  409. WHEN 1 THEN '上水'
  410. WHEN 2 THEN '下水'
  411. ELSE '未知'
  412. END as directionLabel
  413. FROM product_voyage pv
  414. INNER JOIN resource_ship rs ON pv.ship_id = rs.id AND rs.deleted = 0
  415. INNER JOIN resource_route rr ON pv.route_id = rr.id AND rr.deleted = 0
  416. WHERE pv.deleted = 0
  417. <if test="shipId != null">
  418. AND pv.ship_id = #{shipId}
  419. </if>
  420. <if test="voyageIds != null and voyageIds.size() > 0">
  421. AND pv.id IN
  422. <foreach collection="voyageIds" item="item" separator="," open="(" close=")">
  423. #{item}
  424. </foreach>
  425. </if>
  426. ORDER BY pv.start_time ASC
  427. </select>
  428. </mapper>