ClockRecordMapper.xml 16 KB

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