ClockRecordMapper.xml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  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.ruoyi.clock.mapper.ClockRecordMapper">
  6. <resultMap type="com.ruoyi.clock.domain.ClockRecord" id="ClockRecordResult">
  7. <result property="recordId" column="record_id"/>
  8. <result property="activityId" column="activity_id"/>
  9. <result property="employeeId" column="employee_id"/>
  10. <result property="clockDate" column="clock_date"/>
  11. <result property="screenshot" column="screenshot"/>
  12. <result property="status" column="status"/>
  13. <result property="createBy" column="create_by"/>
  14. <result property="createTime" column="create_time"/>
  15. <result property="updateBy" column="update_by"/>
  16. <result property="updateTime" column="update_time"/>
  17. </resultMap>
  18. <select id="queryClockStatisticRecord" resultType="com.ruoyi.clock.domain.vo.ClockStatisticRecordVo">
  19. select
  20. (
  21. SELECT
  22. COUNT(record_id)
  23. FROM
  24. tb_clock_record
  25. WHERE
  26. employee_id = #{employeeId}
  27. AND DATE_FORMAT(clock_date, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
  28. and status = 0) AS clockCountCurrentMonth,
  29. (
  30. SELECT
  31. IFNULL(SUM(p.amount), 0)
  32. FROM
  33. tb_clock_record r
  34. left join tb_clock_product_record p on r.record_id = p.record_id
  35. WHERE
  36. r.employee_id = #{employeeId}
  37. AND DATE_FORMAT(r.clock_date, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
  38. and r.status = 0
  39. )AS saleCountCurrentMonth,
  40. (
  41. select s.shop_name from tb_employee e
  42. left join tb_shop s on e.shop_id = s.shop_id
  43. where e.employee_id = #{employeeId}
  44. ) AS shopName
  45. </select>
  46. <select id="querySaleStatisticRecordList" resultType="com.ruoyi.clock.domain.vo.SaleStatisticRecordVo">
  47. <!-- SELECT
  48. r.employee_id AS employeeId,
  49. e.employee_name AS employeeName,
  50. a.agent_name AS agentName,
  51. e.avatar AS avatar,
  52. s.shop_name AS shopName,
  53. IFNULL(SUM(p.amount), 0) AS saleCount
  54. FROM
  55. tb_clock_record r
  56. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  57. LEFT JOIN tb_activity act ON r.activity_id = act.activity_id
  58. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  59. LEFT JOIN tb_agent a ON e.agent_id = a.agent_id
  60. LEFT JOIN tb_shop s ON e.shop_id = s.shop_id
  61. WHERE
  62. r.status = 0 and act.type = 1
  63. <if test="bo.activityId != null">
  64. AND r.activity_id = #{bo.activityId}
  65. </if>
  66. <if test="bo.agentId != null">
  67. AND e.agent_id = #{bo.agentId}
  68. </if>
  69. <if test="bo.employeeName != null and bo.employeeName != ''">
  70. AND e.employee_name LIKE CONCAT('%', #{bo.employeeName}, '%')
  71. </if>
  72. GROUP BY
  73. r.employee_id
  74. ORDER BY
  75. saleCount DESC-->
  76. SELECT
  77. t.*,
  78. (@rank := @rank + 1) AS `rank`
  79. FROM (
  80. SELECT
  81. r.employee_id AS employeeId,
  82. e.employee_name AS employeeName,
  83. a.agent_name AS agentName,
  84. e.avatar AS avatar,
  85. s.shop_name AS shopName,
  86. IFNULL(SUM(p.amount), 0) AS saleCount
  87. FROM
  88. tb_clock_record r
  89. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  90. LEFT JOIN tb_activity act ON r.activity_id = act.activity_id
  91. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  92. LEFT JOIN tb_agent a ON e.agent_id = a.agent_id
  93. LEFT JOIN tb_shop s ON e.shop_id = s.shop_id
  94. WHERE
  95. r.status = 0
  96. AND act.type = 1
  97. <if test="bo.activityId != null">
  98. AND r.activity_id = #{bo.activityId}
  99. </if>
  100. <if test="bo.agentId != null">
  101. AND e.agent_id = #{bo.agentId}
  102. </if>
  103. <if test="bo.shopId != null">
  104. AND e.shop_id = #{bo.shopId}
  105. </if>
  106. GROUP BY
  107. r.employee_id, e.employee_name, a.agent_name, e.avatar, s.shop_name
  108. ORDER BY
  109. saleCount DESC
  110. ) t,
  111. (SELECT @rank := 0) b
  112. </select>
  113. <select id="mySaleRank" resultType="com.ruoyi.clock.domain.vo.MySaleStatisticRecordVo">
  114. SELECT
  115. (SELECT COUNT(DISTINCT t.employee_id)
  116. FROM (
  117. SELECT
  118. r2.employee_id,
  119. IFNULL(SUM(p2.amount), 0) AS total_sale
  120. from tb_clock_record r2
  121. LEFT JOIN tb_activity act2 ON r2.activity_id = act2.activity_id
  122. LEFT JOIN tb_clock_product_record p2 ON r2.record_id = p2.record_id
  123. LEFT JOIN tb_employee e ON r2.employee_id = e.employee_id
  124. WHERE r2.status = 0
  125. <if test="bo.activityId != null">
  126. AND r2.activity_id = #{bo.activityId}
  127. </if>
  128. <if test="bo.agentId != null">
  129. AND e.agent_id = #{bo.agentId}
  130. </if>
  131. AND act2.status = 0
  132. AND act2.del_flag = '0'
  133. GROUP BY r2.employee_id
  134. ) t
  135. WHERE t.total_sale > (
  136. SELECT IFNULL(SUM(p.amount), 0)
  137. FROM tb_clock_record r
  138. LEFT JOIN tb_activity act ON r.activity_id = act.activity_id
  139. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  140. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  141. WHERE
  142. r.status = 0
  143. <if test="bo.activityId != null">
  144. AND r.activity_id = #{bo.activityId}
  145. </if>
  146. <if test="bo.agentId != null">
  147. AND e.agent_id = #{bo.agentId}
  148. </if>
  149. AND r.employee_id = #{bo.employeeId}
  150. AND act.status = 0
  151. AND act.del_flag = '0'
  152. GROUP BY r.employee_id
  153. )) + 1 AS `rank`,
  154. IFNULL(SUM(p.amount), 0) AS saleCount
  155. FROM
  156. tb_clock_record r
  157. LEFT JOIN tb_activity act ON r.activity_id = act.activity_id
  158. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  159. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  160. WHERE
  161. r.status = 0
  162. AND r.employee_id = #{bo.employeeId}
  163. <if test="bo.activityId != null">
  164. AND r.activity_id = #{bo.activityId}
  165. </if>
  166. <if test="bo.agentId != null">
  167. AND e.agent_id = #{bo.agentId}
  168. </if>
  169. AND act.status = 0
  170. AND act.del_flag = '0'
  171. GROUP BY
  172. r.employee_id
  173. </select>
  174. <select id="myActivityStatistic" resultType="com.ruoyi.clock.domain.vo.MyActivityStatisticVo">
  175. SELECT
  176. (
  177. SELECT
  178. COUNT(record_id)
  179. FROM
  180. tb_clock_record
  181. WHERE
  182. employee_id =#{bo.employeeId}
  183. AND status = 0
  184. AND activity_id =#{bo.activityId}
  185. ) as clockCount,
  186. (
  187. SELECT
  188. IFNULL(SUM(p.amount), 0)
  189. FROM
  190. tb_clock_record r
  191. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  192. WHERE
  193. r.employee_id =#{bo.employeeId}
  194. AND r.status = 0
  195. AND r.activity_id =#{bo.activityId}
  196. ) AS saleCount
  197. </select>
  198. <!-- 活动打卡记录公共查询条件 -->
  199. <sql id="activityClockRecordWhere">
  200. r.activity_id = #{bo.activityId}
  201. <if test="bo.employeeName != null and bo.employeeName != ''">
  202. AND e.employee_name LIKE CONCAT('%', #{bo.employeeName}, '%')
  203. </if>
  204. <if test="bo.agentId != null">
  205. AND e.agent_id = #{bo.agentId}
  206. </if>
  207. <if test="bo.shopId != null">
  208. AND e.shop_id = #{bo.shopId}
  209. </if>
  210. <if test="bo.status != null">
  211. AND r.status = #{bo.status}
  212. </if>
  213. </sql>
  214. <!-- 分页查询活动打卡记录列表 -->
  215. <select id="queryActivityClockRecordPage" resultType="com.ruoyi.clock.domain.vo.ActivityClockRecordVo">
  216. SELECT
  217. r.record_id AS recordId,
  218. r.employee_id AS employeeId,
  219. e.employee_name AS employeeName,
  220. ag.agent_name AS agentName,
  221. s.shop_name AS shopName,
  222. r.clock_date AS clockDate,
  223. IFNULL(SUM(p.amount), 0) AS saleCount,
  224. r.screenshot AS screenshot,
  225. r.status AS status
  226. FROM tb_clock_record r
  227. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  228. LEFT JOIN tb_agent ag ON e.agent_id = ag.agent_id
  229. LEFT JOIN tb_shop s ON e.shop_id = s.shop_id
  230. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  231. WHERE
  232. <include refid="activityClockRecordWhere"/>
  233. GROUP BY r.record_id
  234. ORDER BY r.clock_date DESC
  235. </select>
  236. <!-- 查询活动打卡统计(打卡人数 + 销售数量合计) -->
  237. <select id="queryActivityClockStatistic" resultType="com.ruoyi.clock.domain.vo.ActivityClockStatisticVo">
  238. SELECT
  239. COUNT(DISTINCT r.employee_id) AS clockEmployeeCount,
  240. IFNULL(SUM(p.amount), 0) AS totalSaleCount
  241. FROM tb_clock_record r
  242. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  243. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  244. WHERE
  245. <include refid="activityClockRecordWhere"/>
  246. </select>
  247. <!-- 分页查询活动店铺销量列表(销量活动 type=1) -->
  248. <select id="queryActivityShopSalePage" resultType="com.ruoyi.clock.domain.vo.ActivityShopSaleVo">
  249. SELECT
  250. act.activity_name AS activityName,
  251. ag.agent_name AS agentName,
  252. ap.product_name AS productName,
  253. s.shop_name AS shopName,
  254. IFNULL(SUM(p.amount), 0) AS saleCount
  255. FROM tb_clock_record r
  256. INNER JOIN tb_activity act ON r.activity_id = act.activity_id AND act.type = 1
  257. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  258. LEFT JOIN tb_agent ag ON e.agent_id = ag.agent_id
  259. LEFT JOIN tb_shop s ON e.shop_id = s.shop_id
  260. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  261. LEFT JOIN tb_activity_product ap ON r.activity_id = ap.activity_id
  262. LEFT JOIN tb_activity_agent aa ON r.activity_id = aa.activity_id
  263. WHERE r.activity_id = #{bo.activityId}
  264. AND r.status = 0
  265. <if test="bo.agentId != null">
  266. AND e.agent_id = #{bo.agentId}
  267. </if>
  268. <if test="bo.shopId != null">
  269. AND s.shop_id = #{bo.shopId}
  270. </if>
  271. <if test="bo.agentName != null and bo.agentName != ''">
  272. AND ag.agent_name LIKE CONCAT('%', #{bo.agentName}, '%')
  273. </if>
  274. <if test="bo.shopName != null and bo.shopName != ''">
  275. AND s.shop_name LIKE CONCAT('%', #{bo.shopName}, '%')
  276. </if>
  277. GROUP BY act.activity_id, ag.agent_id, ap.id, s.shop_id
  278. ORDER BY saleCount DESC
  279. </select>
  280. <!-- 查询仪表板统计数据 -->
  281. <select id="queryDashboardStatistic" resultType="com.ruoyi.clock.domain.vo.DashboardStatisticVo">
  282. SELECT
  283. (SELECT COUNT(*) FROM tb_activity WHERE del_flag = '0') AS totalActivityCount,
  284. (SELECT COUNT(*) FROM tb_activity WHERE del_flag = '0' AND status = 0 AND CURDATE() BETWEEN start_date AND end_date) AS ongoingActivityCount,
  285. (SELECT COUNT(DISTINCT employee_id) FROM tb_clock_record WHERE status = 0 AND DATE(clock_date) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS yesterdayClockCount,
  286. (SELECT COUNT(DISTINCT employee_id) FROM tb_clock_record WHERE status = 0 AND DATE(clock_date) = CURDATE()) AS todayClockCount
  287. </select>
  288. <!-- 查询昨日代理商活动参与人数排行 -->
  289. <select id="queryYesterdayAgentRank" resultType="com.ruoyi.clock.domain.vo.AgentRankVo">
  290. SELECT
  291. ag.agent_name AS agentName,
  292. COUNT(DISTINCT r.employee_id) AS participantCount
  293. FROM tb_clock_record r
  294. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  295. LEFT JOIN tb_agent ag ON e.agent_id = ag.agent_id
  296. WHERE r.status = 0
  297. AND DATE(r.clock_date) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
  298. GROUP BY ag.agent_id, ag.agent_name
  299. ORDER BY participantCount DESC
  300. LIMIT 10
  301. </select>
  302. <!-- 查询昨日门店活动参与人数排行 -->
  303. <select id="queryYesterdayShopRank" resultType="com.ruoyi.clock.domain.vo.ShopRankVo">
  304. SELECT
  305. s.shop_name AS shopName,
  306. COUNT(DISTINCT r.employee_id) AS participantCount
  307. FROM tb_clock_record r
  308. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  309. LEFT JOIN tb_shop s ON e.shop_id = s.shop_id
  310. WHERE r.status = 0
  311. AND DATE(r.clock_date) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
  312. GROUP BY s.shop_id, s.shop_name
  313. ORDER BY participantCount DESC
  314. LIMIT 10
  315. </select>
  316. <!-- 查询统计分析概览数据 -->
  317. <select id="queryAnalysisOverview" resultType="com.ruoyi.clock.domain.vo.AnalysisOverviewVo">
  318. SELECT
  319. (SELECT COUNT(DISTINCT employee_id) FROM tb_clock_record WHERE status = 0) AS totalParticipantCount,
  320. (SELECT COUNT(*) FROM tb_shop WHERE del_flag = '0') AS shopCount,
  321. (SELECT COUNT(*) FROM tb_agent WHERE del_flag = '0') AS agentCount,
  322. (SELECT COUNT(*) FROM tb_clock_record WHERE status = 0) AS clockCount,
  323. (SELECT IFNULL(SUM(amount), 0) FROM tb_clock_product_record p
  324. INNER JOIN tb_clock_record r ON p.record_id = r.record_id WHERE r.status = 0) AS productSales,
  325. (SELECT COUNT(*) FROM tb_activity WHERE del_flag = '0' AND status = 0) AS activityCount
  326. </select>
  327. <!-- 查询门店活跃度排行 -->
  328. <select id="queryShopActivityRank" resultType="com.ruoyi.clock.domain.vo.ShopActivityRankVo">
  329. SELECT
  330. s.shop_name AS shopName,
  331. COUNT(r.record_id) AS clockCount
  332. FROM tb_clock_record r
  333. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  334. LEFT JOIN tb_shop s ON e.shop_id = s.shop_id
  335. WHERE r.status = 0
  336. <if test="bo.activityId != null">
  337. AND r.activity_id = #{bo.activityId}
  338. </if>
  339. GROUP BY s.shop_id, s.shop_name
  340. ORDER BY clockCount DESC
  341. LIMIT 10
  342. </select>
  343. <!-- 查询参与人数与销量趋势(最近30天) -->
  344. <select id="queryTrend" resultType="com.ruoyi.clock.domain.vo.TrendVo">
  345. SELECT
  346. DATE_FORMAT(r.clock_date, '%m-%d') AS date,
  347. COUNT(DISTINCT r.employee_id) AS participantCount,
  348. IFNULL(SUM(p.amount), 0) AS salesCount
  349. FROM tb_clock_record r
  350. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  351. WHERE r.status = 0
  352. AND r.clock_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
  353. <if test="bo.activityId != null">
  354. AND r.activity_id = #{bo.activityId}
  355. </if>
  356. GROUP BY DATE(r.clock_date)
  357. ORDER BY DATE(r.clock_date)
  358. </select>
  359. <!-- 查询月度参与人数与销量对比(最近6个月) -->
  360. <select id="queryMonthlyComparison" resultType="com.ruoyi.clock.domain.vo.MonthlyComparisonVo">
  361. SELECT
  362. CONCAT(DATE_FORMAT(r.clock_date, '%c'), '月') AS month,
  363. COUNT(DISTINCT r.employee_id) AS participantCount,
  364. IFNULL(SUM(p.amount), 0) AS salesCount
  365. FROM tb_clock_record r
  366. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  367. WHERE r.status = 0
  368. AND r.clock_date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
  369. <if test="bo.activityId != null">
  370. AND r.activity_id = #{bo.activityId}
  371. </if>
  372. GROUP BY DATE_FORMAT(r.clock_date, '%Y-%m')
  373. ORDER BY DATE_FORMAT(r.clock_date, '%Y-%m')
  374. </select>
  375. <!-- 查询门店销量排行榜 TOP 6 -->
  376. <select id="queryShopSalesRank" resultType="com.ruoyi.clock.domain.vo.ShopSalesRankVo">
  377. SELECT
  378. s.shop_name AS shopName,
  379. COUNT(DISTINCT r.record_id) AS clockCount,
  380. IFNULL(SUM(p.amount), 0) AS salesCount
  381. FROM tb_clock_record r
  382. LEFT JOIN tb_employee e ON r.employee_id = e.employee_id
  383. LEFT JOIN tb_shop s ON e.shop_id = s.shop_id
  384. LEFT JOIN tb_clock_product_record p ON r.record_id = p.record_id
  385. WHERE r.status = 0
  386. GROUP BY s.shop_id, s.shop_name
  387. ORDER BY salesCount DESC
  388. LIMIT 6
  389. </select>
  390. </mapper>