mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	!931 fix: 按Code-Review修改CrmStatisticsCustomerMapper.xml
Merge pull request !931 from dhb52/develop
This commit is contained in:
		@@ -62,7 +62,7 @@ public interface CrmStatisticsCustomerService {
 | 
			
		||||
    /**
 | 
			
		||||
     * 客户成交周期(按日期)
 | 
			
		||||
     *
 | 
			
		||||
     * 成交的定义:客户 customer 在创建出来,到合同 contract 第一次成交的时间差
 | 
			
		||||
     * 成交周期的定义:客户 customer 在创建出来,到合同 contract 第一次成交的时间差
 | 
			
		||||
     *
 | 
			
		||||
     * @param reqVO 请求参数
 | 
			
		||||
     * @return 统计数据
 | 
			
		||||
 
 | 
			
		||||
@@ -4,142 +4,133 @@
 | 
			
		||||
 | 
			
		||||
    <select id="selectCustomerCreateCountGroupByDate"
 | 
			
		||||
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerSummaryByDateRespVO">
 | 
			
		||||
        SELECT
 | 
			
		||||
            DATE_FORMAT(create_time, '%Y-%m-%d') 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 DATE_FORMAT(create_time, '%Y-%m-%d') 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( order_date, '%Y-%m-%d' ) AS time,
 | 
			
		||||
            COUNT( DISTINCT customer_id ) AS customerDealCount
 | 
			
		||||
        FROM crm_contract
 | 
			
		||||
        WHERE deleted = 0
 | 
			
		||||
        AND audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
        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}
 | 
			
		||||
        SELECT DATE_FORMAT(order_date, '%Y-%m-%d') AS time,
 | 
			
		||||
               COUNT(DISTINCT customer_id) AS customerDealCount
 | 
			
		||||
          FROM crm_contract
 | 
			
		||||
         WHERE deleted = 0
 | 
			
		||||
           AND audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
           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="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 owner_user_id,
 | 
			
		||||
               COUNT(*) 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
 | 
			
		||||
            customer.owner_user_id,
 | 
			
		||||
            COUNT( DISTINCT customer.id ) AS customer_deal_count
 | 
			
		||||
        FROM crm_customer AS customer
 | 
			
		||||
        LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
 | 
			
		||||
        WHERE customer.deleted = 0 AND contract.deleted = 0
 | 
			
		||||
        AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
        AND customer.owner_user_id IN
 | 
			
		||||
            <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
 | 
			
		||||
                #{userId}
 | 
			
		||||
            </foreach>
 | 
			
		||||
        AND contract.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
 | 
			
		||||
        GROUP BY customer.owner_user_id
 | 
			
		||||
        SELECT customer.owner_user_id,
 | 
			
		||||
               COUNT(DISTINCT customer.id) AS customer_deal_count
 | 
			
		||||
          FROM crm_customer AS customer
 | 
			
		||||
                LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
 | 
			
		||||
         WHERE customer.deleted = 0 AND contract.deleted = 0
 | 
			
		||||
           AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
           AND customer.owner_user_id IN
 | 
			
		||||
                <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
 | 
			
		||||
                    #{userId}
 | 
			
		||||
                </foreach>
 | 
			
		||||
           AND contract.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
 | 
			
		||||
         GROUP BY customer.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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
        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 owner_user_id,
 | 
			
		||||
               IFNULL(SUM(total_price), 0) AS contract_price
 | 
			
		||||
          FROM crm_contract
 | 
			
		||||
         WHERE deleted = 0
 | 
			
		||||
           AND audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
           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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
        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 owner_user_id,
 | 
			
		||||
               IFNULL(SUM(price), 0) AS receivable_price
 | 
			
		||||
          FROM crm_receivable
 | 
			
		||||
         WHERE deleted = 0
 | 
			
		||||
           AND audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
           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, '%Y-%m-%d' ) AS time,
 | 
			
		||||
            COUNT(*) AS follow_up_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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
 | 
			
		||||
        GROUP BY time
 | 
			
		||||
        SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS time,
 | 
			
		||||
               COUNT(*) AS follow_up_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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
 | 
			
		||||
         GROUP BY time
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="selectFollowUpCustomerCountGroupByDate"
 | 
			
		||||
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByDateRespVO">
 | 
			
		||||
        SELECT
 | 
			
		||||
            DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time,
 | 
			
		||||
            COUNT(DISTINCT biz_id) AS follow_up_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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
 | 
			
		||||
        GROUP BY time
 | 
			
		||||
        SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS time,
 | 
			
		||||
               COUNT(DISTINCT biz_id) AS follow_up_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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
 | 
			
		||||
         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 follow_up_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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
 | 
			
		||||
        GROUP BY creator
 | 
			
		||||
        SELECT creator as owner_user_id,
 | 
			
		||||
               COUNT(*) AS follow_up_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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
 | 
			
		||||
         GROUP BY creator
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="selectFollowUpCustomerCountGroupByUser"
 | 
			
		||||
@@ -159,74 +150,73 @@
 | 
			
		||||
 | 
			
		||||
    <select id="selectFollowUpRecordCountGroupByType"
 | 
			
		||||
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsFollowUpSummaryByTypeRespVO">
 | 
			
		||||
        SELECT
 | 
			
		||||
            type AS follow_up_type,
 | 
			
		||||
            COUNT(*) AS follow_up_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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
 | 
			
		||||
        GROUP BY follow_up_type
 | 
			
		||||
        SELECT type AS follow_up_type,
 | 
			
		||||
               COUNT(*) AS follow_up_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 = ${@cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum@CRM_CUSTOMER.type}
 | 
			
		||||
         GROUP BY follow_up_type
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="selectContractSummary"
 | 
			
		||||
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerContractSummaryRespVO">
 | 
			
		||||
        SELECT
 | 
			
		||||
            customer.name AS customer_name, customer.industry_id, customer.source, customer.owner_user_id, customer.creator,
 | 
			
		||||
            customer.create_time,
 | 
			
		||||
            contract.name AS contract_name, contract.total_price, contract.order_date,
 | 
			
		||||
            IFNULL( receivable.price, 0 ) AS receivable_price
 | 
			
		||||
        FROM crm_customer AS customer
 | 
			
		||||
        INNER JOIN crm_contract AS contract ON customer.id = contract.customer_id
 | 
			
		||||
        LEFT JOIN crm_receivable AS receivable ON contract.id = receivable.contract_id
 | 
			
		||||
        WHERE customer.deleted = 0 AND contract.deleted = 0 AND receivable.deleted = 0
 | 
			
		||||
        AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
        AND customer.owner_user_id IN
 | 
			
		||||
            <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
 | 
			
		||||
                #{userId}
 | 
			
		||||
            </foreach>
 | 
			
		||||
        <!-- TODO @dhb52:应该是客户的创建时间;因为它的定位,是知道这个时间范围内创建的客户,是否下合同了(转化); -->
 | 
			
		||||
        AND contract.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
 | 
			
		||||
        SELECT customer.name AS customer_name,
 | 
			
		||||
               customer.industry_id,
 | 
			
		||||
               customer.source,
 | 
			
		||||
               customer.owner_user_id,
 | 
			
		||||
               customer.creator,
 | 
			
		||||
               customer.create_time,
 | 
			
		||||
               contract.name AS contract_name,
 | 
			
		||||
               contract.total_price,
 | 
			
		||||
               contract.order_date,
 | 
			
		||||
               IFNULL(receivable.price, 0) AS receivable_price
 | 
			
		||||
          FROM crm_customer AS customer
 | 
			
		||||
                INNER JOIN crm_contract AS contract ON customer.id = contract.customer_id
 | 
			
		||||
                LEFT JOIN crm_receivable AS receivable ON contract.id = receivable.contract_id
 | 
			
		||||
         WHERE customer.deleted = 0 AND contract.deleted = 0 AND receivable.deleted = 0
 | 
			
		||||
           AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
           AND customer.owner_user_id IN
 | 
			
		||||
                <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
 | 
			
		||||
                    #{userId}
 | 
			
		||||
                </foreach>
 | 
			
		||||
           AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <!-- TIMESTAMPDIFF 用于求差值;AVG 求平均;TRUNCATE 去掉小数点、只保留整数 -->
 | 
			
		||||
    <select id="selectCustomerDealCycleGroupByDate"
 | 
			
		||||
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByDateRespVO">
 | 
			
		||||
        SELECT
 | 
			
		||||
            DATE_FORMAT( contract.order_date, '%Y-%m-%d' ) AS time,
 | 
			
		||||
            IFNULL( TRUNCATE ( AVG( TIMESTAMPDIFF( DAY, customer.create_time, contract.order_date )), 1 ), 0 ) AS customer_deal_cycle
 | 
			
		||||
        FROM crm_customer AS customer
 | 
			
		||||
        LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
 | 
			
		||||
        WHERE customer.deleted = 0 AND contract.deleted = 0
 | 
			
		||||
        AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
        AND customer.owner_user_id IN
 | 
			
		||||
            <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
 | 
			
		||||
                #{userId}
 | 
			
		||||
            </foreach>
 | 
			
		||||
        <!-- TODO @dhb52:应该是客户的创建时间; -->
 | 
			
		||||
        AND contract.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
 | 
			
		||||
        GROUP BY time
 | 
			
		||||
        SELECT DATE_FORMAT(contract.order_date, '%Y-%m-%d') AS time,
 | 
			
		||||
               IFNULL(TRUNCATE(AVG(TIMESTAMPDIFF(DAY, customer.create_time, contract.order_date)), 1), 0) AS customer_deal_cycle
 | 
			
		||||
          FROM crm_customer AS customer
 | 
			
		||||
                LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
 | 
			
		||||
         WHERE customer.deleted = 0 AND contract.deleted = 0
 | 
			
		||||
           AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
           AND customer.owner_user_id IN
 | 
			
		||||
                <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
 | 
			
		||||
                    #{userId}
 | 
			
		||||
                </foreach>
 | 
			
		||||
           AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
 | 
			
		||||
         GROUP BY time
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
    <select id="selectCustomerDealCycleGroupByUser"
 | 
			
		||||
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.customer.CrmStatisticsCustomerDealCycleByUserRespVO">
 | 
			
		||||
        SELECT
 | 
			
		||||
            customer.owner_user_id,
 | 
			
		||||
            IFNULL( TRUNCATE ( AVG( TIMESTAMPDIFF( DAY, customer.create_time, contract.order_date )), 1 ), 0 ) AS customer_deal_cycle
 | 
			
		||||
        FROM crm_customer AS customer
 | 
			
		||||
        LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
 | 
			
		||||
        WHERE customer.deleted = 0 AND contract.deleted = 0
 | 
			
		||||
        AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
        AND customer.owner_user_id IN
 | 
			
		||||
            <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
 | 
			
		||||
                #{userId}
 | 
			
		||||
            </foreach>
 | 
			
		||||
        <!-- TODO @dhb52:应该是客户的创建时间; -->
 | 
			
		||||
        AND contract.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
 | 
			
		||||
        GROUP BY customer.owner_user_id
 | 
			
		||||
        SELECT customer.owner_user_id,
 | 
			
		||||
               IFNULL(TRUNCATE(AVG(TIMESTAMPDIFF(DAY, customer.create_time, contract.order_date)), 1), 0) AS customer_deal_cycle
 | 
			
		||||
          FROM crm_customer AS customer
 | 
			
		||||
                LEFT JOIN crm_contract AS contract ON contract.customer_id = customer.id
 | 
			
		||||
         WHERE customer.deleted = 0 AND contract.deleted = 0
 | 
			
		||||
           AND contract.audit_status = ${@cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum@APPROVE.status}
 | 
			
		||||
           AND customer.owner_user_id IN
 | 
			
		||||
                <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
 | 
			
		||||
                    #{userId}
 | 
			
		||||
                </foreach>
 | 
			
		||||
           AND customer.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND #{times[1],javaType=java.time.LocalDateTime}
 | 
			
		||||
         GROUP BY customer.owner_user_id
 | 
			
		||||
    </select>
 | 
			
		||||
 | 
			
		||||
</mapper>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user