ClockRecordMapper.xml 16 KB

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