ProductCalendarMapper.xml 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.poyee.mapper.ProductCalendarMapper">
  6. <resultMap id="ProductSimpleResultMap" type="com.poyee.dto.ProductSimpleDto">
  7. <id property="id" column="id"/>
  8. <result property="productName" column="product_name"/>
  9. <result property="imageUrl" column="image_url"/>
  10. </resultMap>
  11. <resultMap id="ProductCalendarResultMap" type="com.poyee.dto.ProductCalendarDto">
  12. <id property="id" column="id"/>
  13. <result property="productName" column="product_name"/>
  14. <result property="releaseTime" column="release_time"/>
  15. <result property="imageUrl" column="image_url"/>
  16. <result property="basePrice" column="base_price"/>
  17. <result property="suggestedPrice" column="suggested_price"/>
  18. <result property="priceDate" column="price_date"/>
  19. <result property="currencyUnit" column="currency_unit"/>
  20. </resultMap>
  21. <resultMap id="ProductCalendarResultEntityMap" type="com.poyee.entity.ProductCalendar">
  22. <id property="id" column="id"/>
  23. <result property="year" column="year"/>
  24. <result property="sport" column="sport"/>
  25. <result property="manufacturer" column="manufacturer"/>
  26. <result property="sets" column="sets"/>
  27. <result property="setsVersion" column="sets_version"/>
  28. <result property="productName" column="product_name"/>
  29. <result property="releaseDate" column="release_date"/>
  30. <result property="baseConfig" column="base_config"/>
  31. <result property="imagesUrl" column="images_url"/>
  32. <result property="imageUrl" column="image_url"/>
  33. <result property="productHighlights" column="product_highlights"/>
  34. <result property="boxBreak" column="box_break"/>
  35. <result property="prop1" column="prop1"/>
  36. <result property="prop2" column="prop2"/>
  37. <result property="prop3" column="prop3"/>
  38. <result property="prop4" column="prop4"/>
  39. <result property="createTime" column="create_time"/>
  40. <result property="createBy" column="create_by"/>
  41. <result property="updateTime" column="update_time"/>
  42. <result property="updateBy" column="update_by"/>
  43. <result property="releaseTime" column="release_time"/>
  44. </resultMap>
  45. <resultMap id="ProductCalendarPriceResultMap" type="com.poyee.entity.ProductCalendarPrice">
  46. <id property="id" column="id"/>
  47. <result property="productCalendarId" column="product_calendar_id"/>
  48. <result property="basePrice" column="base_price"/>
  49. <result property="suggestedPrice" column="suggested_price"/>
  50. <result property="priceDate" column="price_date"/>
  51. <result property="priceResource" column="price_resource"/>
  52. <result property="createTime" column="create_time"/>
  53. <result property="createBy" column="create_by"/>
  54. <result property="updateTime" column="update_time"/>
  55. <result property="updateBy" column="update_by"/>
  56. <result property="currencyUnit" column="currency_unit"/>
  57. </resultMap>
  58. <select id="getProductCalendarById" resultMap="ProductCalendarResultEntityMap">
  59. SELECT
  60. pc.id,
  61. pc.year,
  62. pc.sport,
  63. pc.manufacturer,
  64. pc.sets,
  65. pc.sets_version,
  66. pc.product_name,
  67. pc.release_date,
  68. pc.base_config,
  69. pc.images_url,
  70. pc.image_url,
  71. pc.product_highlights,
  72. pc.box_break,
  73. pc.prop1,
  74. pc.prop2,
  75. pc.prop3,
  76. pc.prop4,
  77. pc.create_time,
  78. pc.create_by,
  79. pc.update_time,
  80. pc.update_by,
  81. pc.release_time
  82. FROM
  83. product_calendar pc
  84. WHERE
  85. pc.id = #{id}
  86. </select>
  87. <select id="getProductCalendarPricesByProductCalendarId" resultMap="ProductCalendarPriceResultMap">
  88. SELECT
  89. pcp.id,
  90. pcp.product_calendar_id,
  91. pcp.base_price,
  92. pcp.suggested_price,
  93. pcp.price_date,
  94. pcp.price_resource,
  95. pcp.create_time,
  96. pcp.create_by,
  97. pcp.update_time,
  98. pcp.update_by,
  99. pcp.currency_unit
  100. FROM
  101. product_calendar_price pcp
  102. WHERE
  103. pcp.product_calendar_id = #{id}
  104. <if test="days != null">
  105. AND pcp.price_date >= CURRENT_DATE - INTERVAL '1 days' * #{days}
  106. </if>
  107. order by pcp.price_date desc, pcp.id desc
  108. </select>
  109. <select id="getProductCalendarsList" resultMap="ProductCalendarResultMap">
  110. SELECT
  111. pc.id,
  112. pc.product_name,
  113. pc.release_time,
  114. pc.image_url,
  115. pcp.base_price,
  116. pcp.suggested_price,
  117. pcp.price_date
  118. FROM
  119. product_calendar pc
  120. LEFT JOIN (
  121. SELECT
  122. product_calendar_id,
  123. base_price,
  124. suggested_price,
  125. price_date,
  126. ROW_NUMBER() OVER (
  127. PARTITION BY product_calendar_id
  128. ORDER BY price_date DESC
  129. ) as rn
  130. FROM
  131. product_calendar_price
  132. ) pcp ON pc.id = pcp.product_calendar_id AND pcp.rn = 1
  133. <where>
  134. <!-- 新增的条件 -->
  135. <if test="releaseYear != null">
  136. AND EXTRACT(YEAR FROM pc.release_time) = #{releaseYear}
  137. </if>
  138. <if test="releaseYear != null and releaseMonth != null">
  139. AND EXTRACT(MONTH FROM pc.release_time) = #{releaseMonth}
  140. </if>
  141. <if test="sport != null and sport != ''">
  142. AND LOWER(pc.sport) = LOWER(#{sport})
  143. </if>
  144. <if test="manufacturer != null and manufacturer != ''">
  145. AND LOWER(pc.manufacturer) = LOWER(#{manufacturer})
  146. </if>
  147. </where>
  148. ORDER BY
  149. pc.release_time;
  150. </select>
  151. <select id="getProductCalendarCountByIds" resultType="java.lang.Integer">
  152. SELECT COUNT(*)
  153. FROM
  154. product_calendar pc
  155. <where>
  156. <if test="releaseYear != null">
  157. AND EXTRACT(YEAR FROM pc.release_time) = #{releaseYear}
  158. </if>
  159. <if test="releaseYear != null and releaseMonth != null">
  160. AND EXTRACT(MONTH FROM pc.release_time) = #{releaseMonth}
  161. </if>
  162. <if test="sport != null and sport != ''">
  163. AND LOWER(pc.sport) = LOWER(#{sport})
  164. </if>
  165. <if test="manufacturer != null and manufacturer != ''">
  166. AND LOWER(pc.manufacturer) = LOWER(#{manufacturer})
  167. </if>
  168. </where>
  169. </select>
  170. <select id="getProductCalendarsByPageAndCondition" resultMap="ProductCalendarResultMap">
  171. SELECT
  172. subquery.id,
  173. subquery.product_name,
  174. subquery.release_time,
  175. subquery.image_url,
  176. subquery.base_price,
  177. subquery.suggested_price,
  178. subquery.price_date,
  179. <!-- 新增字段 -->
  180. subquery.currency_unit,
  181. subquery.rn
  182. FROM (
  183. SELECT
  184. pc.id,
  185. pc.product_name,
  186. pc.release_time,
  187. pc.image_url,
  188. pcp.base_price,
  189. pcp.suggested_price,
  190. pcp.price_date,
  191. <!-- 新增字段 -->
  192. pcp.currency_unit,
  193. ROW_NUMBER() OVER (ORDER BY pc.release_time, pc.id) as rn
  194. FROM
  195. product_calendar pc
  196. LEFT JOIN (
  197. SELECT
  198. product_calendar_id,
  199. base_price,
  200. suggested_price,
  201. price_date,
  202. <!-- 新增字段 -->
  203. currency_unit,
  204. ROW_NUMBER() OVER (
  205. PARTITION BY product_calendar_id
  206. ORDER BY price_date DESC
  207. ) as rn
  208. FROM
  209. product_calendar_price
  210. ) pcp ON pc.id = pcp.product_calendar_id AND pcp.rn = 1
  211. <where>
  212. <if test="releaseYear != null">
  213. AND EXTRACT(YEAR FROM pc.release_time) = #{releaseYear}
  214. </if>
  215. <if test="releaseYear != null and releaseMonth != null">
  216. AND EXTRACT(MONTH FROM pc.release_time) = #{releaseMonth}
  217. </if>
  218. <if test="sport != null and sport != ''">
  219. AND LOWER(pc.sport) = LOWER(#{sport})
  220. </if>
  221. <if test="manufacturer != null and manufacturer != ''">
  222. AND LOWER(pc.manufacturer) = LOWER(#{manufacturer})
  223. </if>
  224. <!-- 新增的模糊查询条件 -->
  225. <if test="productName != null and productName != ''">
  226. AND LOWER(pc.product_name) LIKE '%' || LOWER(#{productName}) || '%'
  227. </if>
  228. </where>
  229. ) subquery
  230. WHERE rn BETWEEN #{startRow} AND #{endRow};
  231. </select>
  232. <!-- 新增的查询方法 -->
  233. <select id="getProductCalendarsByProductName" resultMap="ProductSimpleResultMap">
  234. SELECT
  235. pc.id,
  236. pc.product_name,
  237. pc.image_url
  238. FROM
  239. product_calendar pc
  240. WHERE
  241. LOWER(pc.product_name) LIKE '%' || LOWER(#{productName}) || '%'
  242. LIMIT 10;
  243. </select>
  244. </mapper>