ClockRecordMapper.xml 16 KB

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