CrmStatisticsFunnelMapper.xml 5.53 KB
<?xml version="1.0" encoding="UTF-8"?>
<!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.CrmStatisticsFunnelMapper">

    <select id="selectCustomerCountByDate" resultType="java.lang.Long">
        SELECT
            COUNT(*)
        FROM crm_customer
        WHERE deleted = 0
        AND owner_user_id IN
        <!-- TODO @puhui999:这个 foreach 搞个缩进哈 - -->
        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
            #{userId}
        </foreach>
        AND create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
        <!-- TODO @puhui999:下面这个,就不缩进啦 - -->
        #{times[1],javaType=java.time.LocalDateTime}
    </select>

    <select id="selectBusinessCountByDateAndEndStatus" resultType="java.lang.Long">
        SELECT
            COUNT(*)
        FROM crm_business
        WHERE deleted = 0
        <if test="status != null">
            AND end_status = #{status}
        </if>
        <if test="reqVO.statusTypeId != null">
            AND status_type_id = #{reqVO.statusTypeId}
        </if>
        AND owner_user_id IN
        <foreach collection="reqVO.userIds" item="userId" open="(" close=")" separator=",">
            #{userId}
        </foreach>
        AND create_time BETWEEN #{reqVO.times[0],javaType=java.time.LocalDateTime} AND
        #{reqVO.times[1],javaType=java.time.LocalDateTime}
    </select>

    <select id="selectBusinessSummaryListGroupByEndStatus"
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.funnel.CrmStatisticsBusinessSummaryByEndStatusRespVO">
        SELECT
            end_status AS endStatus,
            COUNT(*) AS businessCount,
            COALESCE(SUM(total_price), 0) AS totalPrice
        FROM crm_business
        WHERE deleted = 0 AND end_status IS NOT NULL
        <if test="statusTypeId != null">
            AND status_type_id = #{statusTypeId}
        </if>
        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 end_status
    </select>

    <select id="selectBusinessSummaryListGroupByStatus"
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.funnel.CrmStatisticsBusinessSummaryByStatusRespVO">
        SELECT
            status.id AS statusId,
            status.name AS statusName,
            status.percent AS statusPercent,
            status.sort AS sort,
            COUNT(business.id) AS businessCount,
            COALESCE(SUM(business.total_price), 0) AS totalPrice
        FROM crm_business_status status
        LEFT JOIN crm_business business ON business.status_id = status.id
            AND business.deleted = 0
            AND business.end_status IS NULL
            AND business.owner_user_id IN
            <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
                #{userId}
            </foreach>
            AND business.create_time BETWEEN #{times[0],javaType=java.time.LocalDateTime} AND
            #{times[1],javaType=java.time.LocalDateTime}
        WHERE status.deleted = 0
        <if test="statusTypeId != null">
            AND status.type_id = #{statusTypeId}
        </if>
        GROUP BY status.id, status.name, status.percent, status.sort
        ORDER BY status.sort ASC
    </select>

    <select id="selectBusinessSummaryGroupByDate"
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.funnel.CrmStatisticsBusinessSummaryByDateRespVO">
        SELECT
            ${@cn.iocoder.yudao.framework.mybatis.core.util.SqlDialectUtils@formatDate('create_time')} AS time,
            COUNT(*) AS businessCreateCount,
            COALESCE(SUM(total_price), 0) AS totalPrice
        FROM crm_business
        WHERE deleted = 0
        <if test="statusTypeId != null">
            AND status_type_id = #{statusTypeId}
        </if>
        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 ${@cn.iocoder.yudao.framework.mybatis.core.util.SqlDialectUtils@formatDate('create_time')}
    </select>

    <select id="selectBusinessInversionRateSummaryByDate"
            resultType="cn.iocoder.yudao.module.crm.controller.admin.statistics.vo.funnel.CrmStatisticsBusinessInversionRateSummaryByDateRespVO">
        SELECT
            ${@cn.iocoder.yudao.framework.mybatis.core.util.SqlDialectUtils@formatDate('create_time')} AS time,
            COUNT(*) AS businessCount,
            SUM(CASE WHEN end_status = 1 THEN 1 ELSE 0 END) AS businessWinCount
        FROM crm_business
        WHERE deleted = 0
        <if test="statusTypeId != null">
            AND status_type_id = #{statusTypeId}
        </if>
        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 ${@cn.iocoder.yudao.framework.mybatis.core.util.SqlDialectUtils@formatDate('create_time')}
    </select>

</mapper>