mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-08-08 15:21:52 +08:00
fix: [CRM-客户统计]根据Code-Review 修改
This commit is contained in:
@@ -2,115 +2,238 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.statistics.CrmStatisticsCustomerMapper">
|
||||
|
||||
|
||||
<select id="selectCustomerCountGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerCountVO">
|
||||
<select id="selectCustomerCreateCountGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByDateRespVO">
|
||||
SELECT
|
||||
DATE_FORMAT( create_time, #{sqlDateFormat,javaType=java.lang.String} ) AS category,
|
||||
count(*) AS count
|
||||
DATE_FORMAT( create_time, #{sqlDateFormat} ) AS time,
|
||||
count(*) AS customerCreateCount
|
||||
FROM crm_customer
|
||||
WHERE deleted = 0
|
||||
AND owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY time
|
||||
</select>
|
||||
|
||||
<select id="selectCustomerDealCountGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByDateRespVO">
|
||||
SELECT
|
||||
DATE_FORMAT( b.order_date, #{sqlDateFormat} ) AS time,
|
||||
count( DISTINCT a.id ) AS customerDealCount
|
||||
FROM crm_customer AS a
|
||||
LEFT JOIN crm_contract AS b ON b.customer_id = a.id
|
||||
WHERE a.deleted = 0 AND b.deleted = 0
|
||||
AND b.audit_status = 20
|
||||
AND a.owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND b.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY time
|
||||
</select>
|
||||
|
||||
<select id="selectCustomerCreateCountGroupbyUser"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
|
||||
SELECT owner_user_id, COUNT(1) AS customer_create_count
|
||||
FROM crm_customer
|
||||
WHERE deleted = 0
|
||||
AND owner_user_id in
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY owner_user_id
|
||||
</select>
|
||||
|
||||
<select id="selectCustomerDealCountGroupbyUser"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
|
||||
SELECT a.owner_user_id, count( DISTINCT a.id ) AS customer_deal_count
|
||||
FROM crm_customer AS a
|
||||
LEFT JOIN crm_contract AS b ON b.customer_id = a.id
|
||||
WHERE a.deleted = 0 AND b.deleted = 0
|
||||
AND b.audit_status = 20
|
||||
AND a.owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND b.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY a.owner_user_id
|
||||
</select>
|
||||
|
||||
<select id="selectContractPriceGroupbyUser"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
|
||||
SELECT owner_user_id, IFNULL(SUM(total_price), 0) AS contract_price
|
||||
FROM crm_contract
|
||||
WHERE deleted = 0
|
||||
AND audit_status = 20
|
||||
AND owner_user_id in
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND order_date BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY owner_user_id
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectReceivablePriceGroupbyUser"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByUserRespVO">
|
||||
SELECT owner_user_id,
|
||||
IFNULL(SUM(price), 0) AS receivable_price
|
||||
FROM crm_receivable
|
||||
WHERE deleted = 0
|
||||
AND audit_status = 20
|
||||
AND owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND return_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY owner_user_id
|
||||
</select>
|
||||
|
||||
<select id="selectFollowupRecordCountGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowupSummaryByDateRespVO">
|
||||
SELECT DATE_FORMAT( create_time, #{sqlDateFormat} ) AS time,
|
||||
count(*) AS followup_record_count
|
||||
FROM crm_follow_up_record
|
||||
WHERE creator IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
AND biz_type = #{bizType}
|
||||
GROUP BY time
|
||||
</select>
|
||||
|
||||
<select id="selectFollowupCustomerCountGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowupSummaryByDateRespVO">
|
||||
SELECT
|
||||
DATE_FORMAT( create_time, #{sqlDateFormat} ) AS time,
|
||||
count(DISTINCT biz_id) AS followup_customer_count
|
||||
FROM crm_follow_up_record
|
||||
WHERE creator IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
AND biz_type = #{bizType}
|
||||
GROUP BY time
|
||||
</select>
|
||||
|
||||
<select id="selectFollowupRecordCountGroupbyUser"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowupSummaryByUserRespVO">
|
||||
SELECT creator as owner_user_id,
|
||||
count(*) AS followup_record_count
|
||||
FROM crm_follow_up_record
|
||||
WHERE creator IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
AND biz_type = #{bizType}
|
||||
GROUP BY creator
|
||||
</select>
|
||||
|
||||
<select id="selectFollowupCustomerCountGroupbyUser"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowupSummaryByUserRespVO">
|
||||
SELECT creator as owner_user_id,
|
||||
count(DISTINCT biz_id) AS followup_customer_count
|
||||
FROM crm_follow_up_record
|
||||
WHERE creator IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
AND biz_type = #{bizType}
|
||||
GROUP BY creator
|
||||
</select>
|
||||
|
||||
<select id="selectFollowupRecordCountGroupbyType"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowupSummaryByTypeRespVO">
|
||||
SELECT
|
||||
type AS followupType,
|
||||
count(*) AS followup_record_count
|
||||
FROM crm_follow_up_record
|
||||
WHERE creator IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
AND biz_type = #{bizType}
|
||||
GROUP BY followupType
|
||||
</select>
|
||||
|
||||
<select id="selectContractSummary"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerContractSummaryRespVO">
|
||||
SELECT
|
||||
a.`name` AS customer_name,
|
||||
b.`name` AS contract_name,
|
||||
b.total_price AS contract_price,
|
||||
IFNULL( c.price, 0 ) AS receivable_price,
|
||||
a.owner_user_id,
|
||||
a.creator AS creator_user_id,
|
||||
a.create_time,
|
||||
b.order_date
|
||||
FROM
|
||||
crm_customer
|
||||
WHERE
|
||||
deleted = 0
|
||||
AND owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY category
|
||||
crm_customer AS a
|
||||
INNER JOIN crm_contract AS b ON a.id = b.customer_id
|
||||
LEFT JOIN crm_receivable AS c ON b.id = c.contract_id
|
||||
WHERE a.deleted = 0 AND b.deleted = 0 AND c.deleted = 0
|
||||
AND b.audit_status = 20
|
||||
AND a.owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND b.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
</select>
|
||||
|
||||
<select id="selectDealCustomerCountGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerCountVO">
|
||||
<select id="selectCustomerDealCycleGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByDateRespVO">
|
||||
SELECT
|
||||
DATE_FORMAT( b.order_date, #{sqlDateFormat,javaType=java.lang.String} ) AS category,
|
||||
count( DISTINCT a.id ) AS count
|
||||
FROM
|
||||
crm_customer AS a
|
||||
LEFT JOIN crm_contract AS b ON b.customer_id = a.id
|
||||
WHERE
|
||||
a.deleted = 0 AND b.deleted = 0
|
||||
AND b.audit_status = 20
|
||||
AND a.owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND b.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY category
|
||||
DATE_FORMAT( b.order_date, #{sqlDateFormat} ) AS time,
|
||||
IFNULL( TRUNCATE ( AVG( TIMESTAMPDIFF( DAY, a.create_time, b.order_date )), 1 ), 0 ) AS customer_deal_cycle
|
||||
FROM crm_customer AS a
|
||||
LEFT JOIN crm_contract AS b ON b.customer_id = a.id
|
||||
WHERE a.deleted = 0 AND b.deleted = 0
|
||||
AND b.audit_status = 20
|
||||
AND a.owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND b.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY time
|
||||
</select>
|
||||
|
||||
<select id="selectRecordCountGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerCountVO">
|
||||
<select id="selectCustomerDealCycleGroupbyUser"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByUserRespVO">
|
||||
SELECT
|
||||
DATE_FORMAT( create_time, #{sqlDateFormat,javaType=java.lang.String} ) AS category,
|
||||
count(*) AS count
|
||||
FROM
|
||||
crm_follow_up_record
|
||||
WHERE
|
||||
creator IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
AND biz_type = #{bizType,javaType=java.lang.Integer}
|
||||
GROUP BY category
|
||||
</select>
|
||||
|
||||
<select id="selectDistinctRecordCountGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerCountVO">
|
||||
SELECT
|
||||
DATE_FORMAT( create_time, #{sqlDateFormat,javaType=java.lang.String} ) AS category,
|
||||
count(DISTINCT biz_id) AS count
|
||||
FROM
|
||||
crm_follow_up_record
|
||||
WHERE
|
||||
creator IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
AND biz_type = #{bizType,javaType=java.lang.Integer}
|
||||
GROUP BY category
|
||||
</select>
|
||||
|
||||
<select id="selectRecordCountGroupbyType"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerCountVO">
|
||||
SELECT
|
||||
type AS category,
|
||||
count(*) AS count
|
||||
FROM crm_follow_up_record
|
||||
WHERE
|
||||
creator IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
AND biz_type = #{bizType,javaType=java.lang.Integer}
|
||||
GROUP BY category
|
||||
</select>
|
||||
|
||||
<select id="selectCustomerCycleGroupbyDate"
|
||||
resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerCountVO">
|
||||
SELECT
|
||||
DATE_FORMAT( b.order_date, #{sqlDateFormat,javaType=java.lang.String} ) AS category,
|
||||
IFNULL( TRUNCATE ( AVG( TIMESTAMPDIFF( DAY, a.create_time, b.order_date )), 1 ), 0 ) AS cycle
|
||||
FROM crm_customer AS a
|
||||
LEFT JOIN crm_contract AS b ON b.customer_id = a.id
|
||||
WHERE
|
||||
a.deleted = 0 AND b.deleted = 0
|
||||
AND b.audit_status = 20
|
||||
AND a.owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND b.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY category
|
||||
a.owner_user_id,
|
||||
IFNULL( TRUNCATE ( AVG( TIMESTAMPDIFF( DAY, a.create_time, b.order_date )), 1 ), 0 ) AS customer_deal_cycle
|
||||
FROM crm_customer AS a
|
||||
LEFT JOIN crm_contract AS b ON b.customer_id = a.id
|
||||
WHERE a.deleted = 0 AND b.deleted = 0
|
||||
AND b.audit_status = 20
|
||||
AND a.owner_user_id IN
|
||||
<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
|
||||
#{userId}
|
||||
</foreach>
|
||||
AND b.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
|
||||
#{times[1],javaType=java.time.LocalDateTime}
|
||||
GROUP BY a.owner_user_id
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
Reference in New Issue
Block a user