CrmStatisticsCustomerMapper.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  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="cn.iocoder.yudao.module.crm.dal.mysql.statistics.CrmStatisticsCustomerMapper">
  4. <select id="selectCustomerCreateCountGroupByDate"
  5. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByDateRespVO">
  6. SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS time,
  7. COUNT(*) AS customerCreateCount
  8. FROM crm_customer
  9. WHERE deleted = 0
  10. AND owner_user_id IN
  11. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  12. #{userId}
  13. </foreach>
  14. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  15. GROUP BY time
  16. </select>
  17. <!-- TODO 芋艿:应该不用过滤时间 -->
  18. <select id="selectCustomerDealCountGroupByDate"
  19. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByDateRespVO">
  20. SELECT DATE_FORMAT(customer.create_time, '%Y-%m-%d') AS time,
  21. COUNT(DISTINCT customer.id) AS customer_deal_count
  22. FROM crm_customer AS customer
  23. LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
  24. WHERE customer.deleted = 0
  25. AND contract.deleted = 0
  26. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  27. AND customer.owner_user_id IN
  28. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  29. #{userId}
  30. </foreach>
  31. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  32. GROUP BY time
  33. </select>
  34. <select id="selectCustomerCreateCountGroupByUser"
  35. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
  36. SELECT owner_user_id,
  37. COUNT(*) AS customer_create_count
  38. FROM crm_customer
  39. WHERE deleted = 0
  40. AND owner_user_id in
  41. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  42. #{userId}
  43. </foreach>
  44. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  45. GROUP BY owner_user_id
  46. </select>
  47. <select id="selectCustomerDealCountGroupByUser"
  48. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
  49. SELECT customer.owner_user_id,
  50. COUNT(DISTINCT customer.id) AS customer_deal_count
  51. FROM crm_customer AS customer
  52. LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
  53. WHERE customer.deleted = 0
  54. AND contract.deleted = 0
  55. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  56. AND customer.owner_user_id IN
  57. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  58. #{userId}
  59. </foreach>
  60. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  61. GROUP BY customer.owner_user_id
  62. </select>
  63. <select id="selectContractPriceGroupByUser"
  64. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
  65. SELECT owner_user_id,
  66. IFNULL(SUM(total_price), 0) AS contract_price
  67. FROM crm_contract
  68. WHERE deleted = 0
  69. AND audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  70. AND owner_user_id in
  71. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  72. #{userId}
  73. </foreach>
  74. AND order_date BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  75. GROUP BY owner_user_id
  76. </select>
  77. <select id="selectReceivablePriceGroupByUser"
  78. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
  79. SELECT owner_user_id,
  80. IFNULL(SUM(price), 0) AS receivable_price
  81. FROM crm_receivable
  82. WHERE deleted = 0
  83. AND audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  84. AND owner_user_id IN
  85. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  86. #{userId}
  87. </foreach>
  88. AND return_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  89. GROUP BY owner_user_id
  90. </select>
  91. <select id="selectFollowUpRecordCountGroupByDate"
  92. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByDateRespVO">
  93. SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS time,
  94. COUNT(*) AS follow_up_record_count
  95. FROM crm_follow_up_record
  96. WHERE creator IN
  97. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  98. #{userId}
  99. </foreach>
  100. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  101. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  102. GROUP BY time
  103. </select>
  104. <select id="selectFollowUpCustomerCountGroupByDate"
  105. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByDateRespVO">
  106. SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS time,
  107. COUNT(DISTINCT biz_id) AS follow_up_customer_count
  108. FROM crm_follow_up_record
  109. WHERE creator IN
  110. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  111. #{userId}
  112. </foreach>
  113. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  114. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  115. GROUP BY time
  116. </select>
  117. <select id="selectFollowUpRecordCountGroupByUser"
  118. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByUserRespVO">
  119. SELECT creator as owner_user_id,
  120. COUNT(*) AS follow_up_record_count
  121. FROM crm_follow_up_record
  122. WHERE creator IN
  123. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  124. #{userId}
  125. </foreach>
  126. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  127. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  128. GROUP BY creator
  129. </select>
  130. <select id="selectFollowUpCustomerCountGroupByUser"
  131. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByUserRespVO">
  132. SELECT
  133. creator as owner_user_id,
  134. COUNT(DISTINCT biz_id) AS follow_up_customer_count
  135. FROM crm_follow_up_record
  136. WHERE creator IN
  137. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  138. #{userId}
  139. </foreach>
  140. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  141. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  142. GROUP BY creator
  143. </select>
  144. <select id="selectFollowUpRecordCountGroupByType"
  145. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByTypeRespVO">
  146. SELECT type AS follow_up_type,
  147. COUNT(*) AS follow_up_record_count
  148. FROM crm_follow_up_record
  149. WHERE creator IN
  150. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  151. #{userId}
  152. </foreach>
  153. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  154. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  155. GROUP BY follow_up_type
  156. </select>
  157. <select id="selectContractSummary"
  158. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerContractSummaryRespVO">
  159. SELECT customer.name AS customer_name,
  160. customer.industry_id,
  161. customer.source,
  162. customer.owner_user_id,
  163. customer.creator,
  164. customer.create_time,
  165. contract.name AS contract_name,
  166. contract.total_price,
  167. contract.order_date,
  168. IFNULL(receivable.price, 0) AS receivable_price
  169. FROM crm_customer AS customer
  170. INNER JOIN crm_contract AS contract ON customer.id = contract.customer_id
  171. LEFT JOIN crm_receivable AS receivable ON contract.id = receivable.contract_id
  172. WHERE customer.deleted = 0 AND contract.deleted = 0 AND receivable.deleted = 0
  173. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  174. AND customer.owner_user_id IN
  175. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  176. #{userId}
  177. </foreach>
  178. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  179. </select>
  180. <!-- TIMESTAMPDIFF 用于求差值;AVG 求平均;TRUNCATE 去掉小数点、只保留整数 -->
  181. <select id="selectCustomerDealCycleGroupByDate"
  182. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByDateRespVO">
  183. SELECT DATE_FORMAT(contract.order_date, '%Y-%m-%d') AS time,
  184. IFNULL(TRUNCATE(AVG(TIMESTAMPDIFF(DAY, customer.create_time, contract.order_date)), 1), 0) AS customer_deal_cycle
  185. FROM crm_customer AS customer
  186. LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
  187. WHERE customer.deleted = 0 AND contract.deleted = 0
  188. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  189. AND customer.owner_user_id IN
  190. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  191. #{userId}
  192. </foreach>
  193. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  194. GROUP BY time
  195. </select>
  196. <select id="selectCustomerDealCycleGroupByUser"
  197. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByUserRespVO">
  198. SELECT customer.owner_user_id,
  199. IFNULL(TRUNCATE(AVG(TIMESTAMPDIFF(DAY, customer.create_time, contract.order_date)), 1), 0) AS customer_deal_cycle
  200. FROM crm_customer AS customer
  201. LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
  202. WHERE customer.deleted = 0 AND contract.deleted = 0
  203. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  204. AND customer.owner_user_id IN
  205. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  206. #{userId}
  207. </foreach>
  208. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  209. GROUP BY customer.owner_user_id
  210. </select>
  211. <select id="selectCustomerDealCycleGroupByAreaId"
  212. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByAreaRespVO">
  213. SELECT customer.area_id AS area_id,
  214. IFNULL(TRUNCATE(AVG(TIMESTAMPDIFF(DAY, customer.create_time, contract.order_date)), 1), 0) AS customer_deal_cycle,
  215. COUNT(DISTINCT customer.id) AS customer_deal_count
  216. FROM crm_customer AS customer
  217. LEFT JOIN crm_contract AS contract ON customer.id = contract.customer_id
  218. WHERE customer.deleted = 0
  219. AND contract.deleted = 0
  220. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  221. AND customer.owner_user_id IN
  222. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  223. #{userId}
  224. </foreach>
  225. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  226. GROUP BY
  227. customer.area_id
  228. </select>
  229. <select id="selectCustomerDealCycleGroupByProductId"
  230. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByProductRespVO">
  231. SELECT (SELECT name FROM crm_product WHERE id = product.id) AS product_name,
  232. IFNULL(TRUNCATE(AVG(TIMESTAMPDIFF(DAY, customer.create_time, contract.order_date)), 1), 0) AS customer_deal_cycle,
  233. COUNT(DISTINCT customer.id) AS customer_deal_count
  234. FROM crm_customer AS customer
  235. LEFT JOIN crm_contract AS contract ON customer.id = contract.customer_id
  236. LEFT JOIN crm_contract_product AS product ON product.contract_id = contract.id
  237. WHERE customer.deleted = 0
  238. AND contract.deleted = 0
  239. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  240. AND customer.owner_user_id IN
  241. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  242. #{userId}
  243. </foreach>
  244. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  245. GROUP BY product.id
  246. </select>
  247. </mapper>