You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

357 lines
15 KiB

  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.example.demo.mapper.bean.BeanConsumeMapper">
  4. <!--获取消费用户分部-->
  5. <select id="getDept" resultType="java.lang.String">
  6. select distinct fm.dept
  7. from fx_member fm
  8. inner join fx_yaoqing_records fyr on fyr.uid = fm.id
  9. where fm.dept is not null and fm.dept != ''
  10. </select>
  11. <!--筛选查询直播消费-->
  12. <select id="selectLiveBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeLive">
  13. SELECT *
  14. FROM (
  15. SELECT fm.nickname AS name,
  16. fm.jwcode,
  17. fm.dept,
  18. fyr.source_type AS type,
  19. CASE
  20. WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
  21. THEN SUBSTRING(content, LOCATE('送礼物', content) + CHAR_LENGTH('送礼物'))
  22. ELSE NULL
  23. END AS gift,
  24. fyr.money AS beanNum,
  25. CASE
  26. WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
  27. THEN SUBSTRING_INDEX(SUBSTRING(content, LOCATE('直播间', content) + CHAR_LENGTH('直播间')), '送礼物', 1)
  28. ELSE NULL
  29. END AS liveChannel,
  30. fyr.source_name AS liveName,
  31. FROM_UNIXTIME(fyr.time, '%Y-%m-%d %H:%i:%s') AS consumeTime,
  32. fyr.pay_type AS payType
  33. FROM fx_member fm
  34. INNER JOIN fx_yaoqing_records fyr ON fyr.uid = fm.id
  35. <where>
  36. fyr.pay_type IN (1,2,3,4,5)
  37. <if test="beanConsumeLive.jwcode != null and beanConsumeLive.jwcode != ''">
  38. AND fm.jwcode = #{beanConsumeLive.jwcode}
  39. </if>
  40. <if test="beanConsumeLive.dept != null and beanConsumeLive.dept != ''">
  41. AND fm.dept = #{beanConsumeLive.dept}
  42. </if>
  43. <if test="beanConsumeLive.type != null and beanConsumeLive.type != ''">
  44. AND fyr.source_type = #{beanConsumeLive.type}
  45. </if>
  46. <if test="beanConsumeLive.startTime != null and beanConsumeLive.endTime != null">
  47. AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeLive.startTime})
  48. AND UNIX_TIMESTAMP(#{beanConsumeLive.endTime})
  49. </if>
  50. </where>
  51. ) AS t
  52. <where>
  53. <if test="beanConsumeLive.gift != null and beanConsumeLive.gift != ''">
  54. AND t.gift = #{beanConsumeLive.gift}
  55. </if>
  56. <if test="beanConsumeLive.liveChannel != null and beanConsumeLive.liveChannel != ''">
  57. AND t.liveChannel= #{beanConsumeLive.liveChannel}
  58. </if>
  59. <if test="beanConsumeLive.liveName != null and beanConsumeLive.liveName != ''">
  60. AND t.liveName LIKE CONCAT('%', #{beanConsumeLive.liveName}, '%')
  61. </if>
  62. </where>
  63. <choose>
  64. <when test="beanConsumeLive.sortField != null and beanConsumeLive.sortField != '' and beanConsumeLive.sortOrder != null and beanConsumeLive.sortOrder != ''">
  65. ORDER BY t.${beanConsumeLive.sortField} ${beanConsumeLive.sortOrder}
  66. </when>
  67. <otherwise>
  68. ORDER BY t.consumeTime DESC
  69. </otherwise>
  70. </choose>
  71. </select>
  72. <!--查询消费直播合计数-->
  73. <select id="selectSumLiveBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeGold">
  74. SELECT
  75. IFNULL(SUM(t.money_buy), 0) AS permanentBean,
  76. IFNULL(SUM(t.money_free), 0) AS freeBean,
  77. COUNT(*) AS totalNum
  78. FROM (
  79. SELECT
  80. fyr.money_buy,
  81. fyr.money_free,
  82. fyr.time
  83. FROM fx_member fm
  84. INNER JOIN fx_yaoqing_records fyr ON fyr.uid = fm.id
  85. <where>
  86. fyr.pay_type IN (1,2,3,4,5)
  87. <if test="beanConsumeLive.jwcode != null and beanConsumeLive.jwcode != ''">
  88. AND fm.jwcode = #{beanConsumeLive.jwcode}
  89. </if>
  90. <if test="beanConsumeLive.dept != null and beanConsumeLive.dept != ''">
  91. AND fm.dept = #{beanConsumeLive.dept}
  92. </if>
  93. <if test="beanConsumeLive.type != null and beanConsumeLive.type != ''">
  94. AND fyr.source_type = #{beanConsumeLive.type}
  95. </if>
  96. <if test="beanConsumeLive.gift != null and beanConsumeLive.gift != ''">
  97. AND CASE
  98. WHEN LOCATE('直播间', fyr.content) > 0 AND LOCATE('送礼物', fyr.content) > 0
  99. THEN SUBSTRING(fyr.content, LOCATE('送礼物', fyr.content) + CHAR_LENGTH('送礼物'))
  100. ELSE NULL
  101. END = #{beanConsumeLive.gift}
  102. </if>
  103. <if test="beanConsumeLive.liveChannel != null and beanConsumeLive.liveChannel != ''">
  104. AND CASE
  105. WHEN LOCATE('直播间', fyr.content) > 0 AND LOCATE('送礼物', fyr.content) > 0
  106. THEN SUBSTRING_INDEX(SUBSTRING(fyr.content, LOCATE('直播间', fyr.content) + CHAR_LENGTH('直播间')), '送礼物', 1)
  107. ELSE NULL
  108. END = #{beanConsumeLive.liveChannel}
  109. </if>
  110. <if test="beanConsumeLive.startTime != null and beanConsumeLive.endTime != null">
  111. AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeLive.startTime})
  112. AND UNIX_TIMESTAMP(#{beanConsumeLive.endTime})
  113. </if>
  114. <if test="beanConsumeLive.liveName != null and beanConsumeLive.liveName != ''">
  115. AND fyr.source_name LIKE CONCAT('%', #{beanConsumeLive.liveName}, '%')
  116. </if>
  117. </where>
  118. ) AS t
  119. </select>
  120. <!--筛选铁粉消费记录-->
  121. <select id="selectFanBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeFan">
  122. SELECT fyr.id AS id,
  123. fm.nickname AS name,
  124. fm.jwcode,
  125. fm.dept,
  126. fyr.money AS beanNum,
  127. fyr.money_free AS freeBean,
  128. fyr.money_buy AS buyBean,
  129. fyr.source_name AS channel,
  130. fyr.source_type AS type,
  131. FROM_UNIXTIME(fyr.time, '%Y-%m-%d %H:%i:%s') AS consumeTime,
  132. fyr.pay_type AS payType
  133. FROM fx_member fm
  134. INNER JOIN fx_yaoqing_records fyr ON fyr.uid = fm.id
  135. <where>
  136. fyr.pay_type = 7
  137. <if test="beanConsumeFan.jwcode != null and beanConsumeFan.jwcode != ''">
  138. AND fm.jwcode = #{beanConsumeFan.jwcode}
  139. </if>
  140. <if test="beanConsumeFan.flag !=0">
  141. AND fm.employee = 0
  142. </if>
  143. <if test="beanConsumeFan.dept != null and beanConsumeFan.dept != ''">
  144. AND fm.dept = #{beanConsumeFan.dept}
  145. </if>
  146. <if test="beanConsumeFan.channel != null and beanConsumeFan.channel != ''">
  147. AND fyr.source_name =#{beanConsumeFan.channel}
  148. </if>
  149. <if test="beanConsumeFan.startTime != null and beanConsumeFan.endTime != null">
  150. AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeFan.startTime})
  151. AND UNIX_TIMESTAMP(#{beanConsumeFan.endTime})
  152. </if>
  153. </where>
  154. <choose>
  155. <when test="beanConsumeFan.sortField != null and beanConsumeFan.sortField != '' and beanConsumeFan.sortOrder != null and beanConsumeFan.sortOrder != ''">
  156. ORDER BY ${beanConsumeFan.sortField} ${beanConsumeFan.sortOrder}
  157. </when>
  158. <otherwise>
  159. ORDER BY consumeTime DESC
  160. </otherwise>
  161. </choose>
  162. </select>
  163. <!--铁粉消耗合计数-->
  164. <select id="selectSumFansBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeGold">
  165. SELECT
  166. IFNULL(SUM(t.money_buy), 0) AS permanentBean,
  167. IFNULL(SUM(t.money_free), 0) AS freeBean,
  168. COUNT(*) AS totalNum
  169. FROM (
  170. SELECT
  171. fyr.money_buy,
  172. fyr.money_free,
  173. fyr.time
  174. FROM fx_member fm
  175. INNER JOIN fx_yaoqing_records fyr ON fyr.uid = fm.id
  176. <where>
  177. fyr.pay_type = 7
  178. <if test="beanConsumeFan.jwcode != null and beanConsumeFan.jwcode != ''">
  179. AND fm.jwcode = #{beanConsumeFan.jwcode}
  180. </if>
  181. <if test="beanConsumeFan.flag !=0">
  182. AND fm.employee = 0
  183. </if>
  184. <if test="beanConsumeFan.dept != null and beanConsumeFan.dept != ''">
  185. AND fm.dept = #{beanConsumeFan.dept}
  186. </if>
  187. <if test="beanConsumeFan.channel != null and beanConsumeFan.channel != ''">
  188. AND fyr.source_name = #{beanConsumeFan.channel}
  189. </if>
  190. <if test="beanConsumeFan.startTime != null and beanConsumeFan.endTime != null">
  191. AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeFan.startTime})
  192. AND UNIX_TIMESTAMP(#{beanConsumeFan.endTime})
  193. </if>
  194. </where>
  195. ) AS t
  196. </select>
  197. <!--筛选文章消费记录-->
  198. <select id="selectArticleBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeArticle">
  199. SELECT fyr.id AS id,
  200. fm.nickname AS name,
  201. fm.jwcode,
  202. fm.dept,
  203. fyr.source_type AS type,
  204. fyr.money AS beanNum,
  205. fyr.money_free AS freeBean,
  206. fyr.money_buy AS buyBean,
  207. fyr.source_id AS articleId,
  208. fyr.source_name AS articleName,
  209. (SELECT fm2.nickname
  210. FROM fx_member fm2
  211. WHERE fm2.jwcode = fyr.source_jwcode
  212. LIMIT 1) AS author,
  213. FROM_UNIXTIME(fyr.time, '%Y-%m-%d %H:%i:%s') AS consumeTime,
  214. fyr.pay_type AS payType
  215. FROM fx_member fm
  216. INNER JOIN fx_yaoqing_records fyr ON fyr.uid = fm.id
  217. <where>
  218. fyr.pay_type = 8
  219. <if test="beanConsumeArticle.jwcode != null and beanConsumeArticle.jwcode != ''">
  220. AND fm.jwcode = #{beanConsumeArticle.jwcode}
  221. </if>
  222. <if test="beanConsumeArticle.flag !=0">
  223. AND fm.employee = 0
  224. </if>
  225. <if test="beanConsumeArticle.dept != null and beanConsumeArticle.dept != ''">
  226. AND fm.dept = #{beanConsumeArticle.dept}
  227. </if>
  228. <if test="beanConsumeArticle.author != null and beanConsumeArticle.author != ''">
  229. AND (SELECT fm2.nickname
  230. FROM fx_member fm2
  231. WHERE fm2.jwcode = fyr.source_jwcode
  232. LIMIT 1)LIKE CONCAT('%',#{beanConsumeArticle.author}, '%')
  233. </if>
  234. <if test="beanConsumeArticle.ArticleName != null and beanConsumeArticle.ArticleName != ''">
  235. AND fyr.source_name LIKE CONCAT('%',#{beanConsumeArticle.articleName}, '%')
  236. </if>
  237. <if test="beanConsumeArticle.articleId != null and beanConsumeArticle.articleId != ''">
  238. AND fyr.source_id =#{beanConsumeArticle.articleId}
  239. </if>
  240. <if test="beanConsumeArticle.startTime != null and beanConsumeArticle.endTime != null">
  241. AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeArticle.startTime})
  242. AND UNIX_TIMESTAMP(#{beanConsumeArticle.endTime})
  243. </if>
  244. </where>
  245. <choose>
  246. <when test="beanConsumeArticle.payMode == 0">
  247. AND fyr.source_type IN (9, 10)
  248. </when>
  249. <when test="beanConsumeArticle.payMode == 1">
  250. AND fyr.source_type = 11
  251. </when>
  252. <when test="beanConsumeArticle.payMode == 2">
  253. AND fyr.source_type not in (9, 10,11)
  254. </when>
  255. </choose>
  256. <!-- 排序逻辑(单独拿出来,永远会被执行)-->
  257. <choose>
  258. <when test="beanConsumeArticle.sortField != null and beanConsumeArticle.sortField != '' and beanConsumeArticle.sortOrder != null and beanConsumeArticle.sortOrder != ''">
  259. ORDER BY ${beanConsumeArticle.sortField} ${beanConsumeArticle.sortOrder}
  260. </when>
  261. <otherwise>
  262. ORDER BY consumeTime DESC
  263. </otherwise>
  264. </choose>
  265. </select>
  266. <!--查询金豆文章消费-->
  267. <select id="selectSumArticleBy" resultType="com.example.demo.domain.vo.bean.BeanConsumeGold">
  268. SELECT
  269. IFNULL(SUM(t.money_buy), 0) AS permanentBean,
  270. IFNULL(SUM(t.money_free), 0) AS freeBean,
  271. COUNT(*) AS totalNum
  272. FROM ( SELECT
  273. fyr.money_buy,
  274. fyr.money_free,
  275. fyr.time
  276. FROM fx_member fm
  277. INNER JOIN fx_yaoqing_records fyr ON fyr.uid = fm.id
  278. <where>
  279. fyr.pay_type = 8
  280. <if test="beanConsumeArticle.jwcode != null and beanConsumeArticle.jwcode != ''">
  281. AND fm.jwcode = #{beanConsumeArticle.jwcode}
  282. </if>
  283. <if test="beanConsumeArticle.flag !=0">
  284. AND fm.employee = 0
  285. </if>
  286. <if test="beanConsumeArticle.dept != null and beanConsumeArticle.dept != ''">
  287. AND fm.dept = #{beanConsumeArticle.dept}
  288. </if>
  289. <if test="beanConsumeArticle.ArticleName != null and beanConsumeArticle.ArticleName != ''">
  290. AND fyr.source_name LIKE CONCAT('%',#{beanConsumeArticle.articleName}, '%')
  291. </if>
  292. <if test="beanConsumeArticle.author != null and beanConsumeArticle.author != ''">
  293. AND (SELECT fm2.nickname
  294. FROM fx_member fm2
  295. WHERE fm2.jwcode = fyr.source_jwcode
  296. LIMIT 1)LIKE CONCAT('%',#{beanConsumeArticle.author}, '%')
  297. </if>
  298. <if test="beanConsumeArticle.articleId != null and beanConsumeArticle.articleId != ''">
  299. AND fyr.source_id =#{beanConsumeArticle.articleId}
  300. </if>
  301. <if test="beanConsumeArticle.startTime != null and beanConsumeArticle.endTime != null">
  302. AND fyr.time BETWEEN UNIX_TIMESTAMP(#{beanConsumeArticle.startTime})
  303. AND UNIX_TIMESTAMP(#{beanConsumeArticle.endTime})
  304. </if>
  305. </where>
  306. <choose>
  307. <when test="beanConsumeArticle.payMode == 0">
  308. AND fyr.source_type IN (9, 10)
  309. </when>
  310. <when test="beanConsumeArticle.payMode == 1">
  311. AND fyr.source_type = 11
  312. </when>
  313. <when test="beanConsumeArticle.payMode == 2">
  314. AND fyr.source_type not in (9, 10,11)
  315. </when>
  316. </choose>
  317. ) as t
  318. </select>
  319. <!--获取直播礼物-->
  320. <select id="getLiveGift" resultType="java.lang.String">
  321. SELECT DISTINCT
  322. CASE
  323. WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
  324. THEN SUBSTRING(content, LOCATE('送礼物', content) + CHAR_LENGTH('送礼物'))
  325. ELSE NULL
  326. END AS gift
  327. FROM fx_yaoqing_records
  328. WHERE LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
  329. AND content IS NOT NULL AND source_type=1
  330. </select>
  331. <select id="getLiveChannel" resultType="java.lang.String">
  332. SELECT DISTINCT
  333. CASE
  334. WHEN LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
  335. THEN SUBSTRING_INDEX(SUBSTRING(content, LOCATE('直播间', content) + CHAR_LENGTH('直播间')), '送礼物', 1)
  336. ELSE NULL
  337. END AS liveChannel
  338. FROM fx_yaoqing_records
  339. WHERE LOCATE('直播间', content) > 0 AND LOCATE('送礼物', content) > 0
  340. AND content IS NOT NULL AND pay_type in (1,2,3,4,5)
  341. </select>
  342. </mapper>