CrmStatisticsCustomerMapper.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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 AND contract.deleted = 0
  25. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  26. AND customer.owner_user_id IN
  27. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  28. #{userId}
  29. </foreach>
  30. AND contract.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  31. GROUP BY time
  32. </select>
  33. <select id="selectCustomerCreateCountGroupByUser"
  34. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
  35. SELECT owner_user_id,
  36. COUNT(*) AS customer_create_count
  37. FROM crm_customer
  38. WHERE deleted = 0
  39. AND owner_user_id in
  40. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  41. #{userId}
  42. </foreach>
  43. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  44. GROUP BY owner_user_id
  45. </select>
  46. <select id="selectCustomerDealCountGroupByUser"
  47. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
  48. SELECT customer.owner_user_id,
  49. COUNT(DISTINCT customer.id) AS customer_deal_count
  50. FROM crm_customer AS customer
  51. LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
  52. WHERE customer.deleted = 0 AND contract.deleted = 0
  53. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  54. AND customer.owner_user_id IN
  55. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  56. #{userId}
  57. </foreach>
  58. AND contract.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  59. GROUP BY customer.owner_user_id
  60. </select>
  61. <select id="selectContractPriceGroupByUser"
  62. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
  63. SELECT owner_user_id,
  64. IFNULL(SUM(total_price), 0) AS contract_price
  65. FROM crm_contract
  66. WHERE deleted = 0
  67. AND audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  68. AND owner_user_id in
  69. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  70. #{userId}
  71. </foreach>
  72. AND order_date BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  73. GROUP BY owner_user_id
  74. </select>
  75. <select id="selectReceivablePriceGroupByUser"
  76. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
  77. SELECT owner_user_id,
  78. IFNULL(SUM(price), 0) AS receivable_price
  79. FROM crm_receivable
  80. WHERE deleted = 0
  81. AND audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  82. AND owner_user_id IN
  83. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  84. #{userId}
  85. </foreach>
  86. AND return_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  87. GROUP BY owner_user_id
  88. </select>
  89. <select id="selectFollowUpRecordCountGroupByDate"
  90. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByDateRespVO">
  91. SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS time,
  92. COUNT(*) AS follow_up_record_count
  93. FROM crm_follow_up_record
  94. WHERE creator IN
  95. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  96. #{userId}
  97. </foreach>
  98. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  99. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  100. GROUP BY time
  101. </select>
  102. <select id="selectFollowUpCustomerCountGroupByDate"
  103. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByDateRespVO">
  104. SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS time,
  105. COUNT(DISTINCT biz_id) AS follow_up_customer_count
  106. FROM crm_follow_up_record
  107. WHERE creator IN
  108. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  109. #{userId}
  110. </foreach>
  111. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  112. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  113. GROUP BY time
  114. </select>
  115. <select id="selectFollowUpRecordCountGroupByUser"
  116. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByUserRespVO">
  117. SELECT creator as owner_user_id,
  118. COUNT(*) AS follow_up_record_count
  119. FROM crm_follow_up_record
  120. WHERE creator IN
  121. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  122. #{userId}
  123. </foreach>
  124. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  125. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  126. GROUP BY creator
  127. </select>
  128. <select id="selectFollowUpCustomerCountGroupByUser"
  129. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByUserRespVO">
  130. SELECT
  131. creator as owner_user_id,
  132. COUNT(DISTINCT biz_id) AS follow_up_customer_count
  133. FROM crm_follow_up_record
  134. WHERE creator IN
  135. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  136. #{userId}
  137. </foreach>
  138. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  139. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  140. GROUP BY creator
  141. </select>
  142. <select id="selectFollowUpRecordCountGroupByType"
  143. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByTypeRespVO">
  144. SELECT type AS follow_up_type,
  145. COUNT(*) AS follow_up_record_count
  146. FROM crm_follow_up_record
  147. WHERE creator IN
  148. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  149. #{userId}
  150. </foreach>
  151. AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  152. AND biz_type = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
  153. GROUP BY follow_up_type
  154. </select>
  155. <select id="selectContractSummary"
  156. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerContractSummaryRespVO">
  157. SELECT customer.name AS customer_name,
  158. customer.industry_id,
  159. customer.source,
  160. customer.owner_user_id,
  161. customer.creator,
  162. customer.create_time,
  163. contract.name AS contract_name,
  164. contract.total_price,
  165. contract.order_date,
  166. IFNULL(receivable.price, 0) AS receivable_price
  167. FROM crm_customer AS customer
  168. INNER JOIN crm_contract AS contract ON customer.id = contract.customer_id
  169. LEFT JOIN crm_receivable AS receivable ON contract.id = receivable.contract_id
  170. WHERE customer.deleted = 0 AND contract.deleted = 0 AND receivable.deleted = 0
  171. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  172. AND customer.owner_user_id IN
  173. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  174. #{userId}
  175. </foreach>
  176. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  177. </select>
  178. <!-- TIMESTAMPDIFF 用于求差值;AVG 求平均;TRUNCATE 去掉小数点、只保留整数 -->
  179. <select id="selectCustomerDealCycleGroupByDate"
  180. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByDateRespVO">
  181. SELECT DATE_FORMAT(contract.order_date, '%Y-%m-%d') AS time,
  182. IFNULL(TRUNCATE(AVG(TIMESTAMPDIFF(DAY, customer.create_time, contract.order_date)), 1), 0) AS customer_deal_cycle
  183. FROM crm_customer AS customer
  184. LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
  185. WHERE customer.deleted = 0 AND contract.deleted = 0
  186. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  187. AND customer.owner_user_id IN
  188. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  189. #{userId}
  190. </foreach>
  191. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  192. GROUP BY time
  193. </select>
  194. <select id="selectCustomerDealCycleGroupByUser"
  195. resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByUserRespVO">
  196. SELECT customer.owner_user_id,
  197. IFNULL(TRUNCATE(AVG(TIMESTAMPDIFF(DAY, customer.create_time, contract.order_date)), 1), 0) AS customer_deal_cycle
  198. FROM crm_customer AS customer
  199. LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
  200. WHERE customer.deleted = 0 AND contract.deleted = 0
  201. AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
  202. AND customer.owner_user_id IN
  203. <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
  204. #{userId}
  205. </foreach>
  206. AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
  207. GROUP BY customer.owner_user_id
  208. </select>
  209. </mapper>