TradeOrderStatisticsMapper.xml 7.83 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.statistics.dal.mysql.trade.TradeOrderStatisticsMapper">

    <select id="selectSummaryListByAreaId"
            resultType="cn.iocoder.yudao.module.statistics.service.member.bo.MemberAreaStatisticsRespBO">
        SELECT receiver_area_id                                AS areaId,
               (SELECT COUNT(DISTINCT s.user_id)
                FROM trade_order s
                WHERE s.receiver_area_id = m.receiver_area_id
                <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
                    AND s.tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
                </if>
                ) AS orderCreateUserCount,
               (SELECT COUNT(DISTINCT s.user_id)
                FROM trade_order s
                WHERE s.receiver_area_id = m.receiver_area_id
                  AND s.pay_status = TRUE
                  AND s.deleted = 0
                <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
                    AND s.tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
                </if>
                ) AS orderPayUserCount,
               (SELECT SUM(s.pay_price)
                FROM trade_order s
                WHERE s.receiver_area_id = m.receiver_area_id
                  AND s.pay_status = TRUE
                  AND s.deleted = 0
                <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
                    AND s.tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
                </if>
                ) AS orderPayPrice
        FROM trade_order m
        WHERE deleted = 0
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND m.tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
        GROUP BY receiver_area_id
    </select>

    <select id="selectUserCountByCreateTimeBetween" resultType="java.lang.Integer">
        SELECT COUNT(DISTINCT (user_id))
        FROM trade_order
        WHERE deleted = 0
          AND create_time BETWEEN #{beginTime} AND #{endTime}
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
    </select>

    <select id="selectUserCountByPayTimeBetween" resultType="java.lang.Integer">
        SELECT COUNT(DISTINCT (user_id))
        FROM trade_order
        WHERE pay_time BETWEEN #{beginTime} AND #{endTime}
          AND pay_status = TRUE
          AND deleted = 0
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
    </select>

    <select id="selectCountByCreateTimeBetween" resultType="java.lang.Integer">
        SELECT COUNT(1)
        FROM trade_order
        WHERE create_time BETWEEN #{beginTime} AND #{endTime}
          AND deleted = 0
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
    </select>

    <select id="selectCountByPayTimeBetween" resultType="java.lang.Integer">
        SELECT COUNT(1)
        FROM trade_order
        WHERE pay_status = TRUE
          AND create_time BETWEEN #{beginTime} AND #{endTime}
          AND deleted = 0
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
    </select>

    <select id="selectSummaryPriceByPayTimeBetween" resultType="java.lang.Integer">
        SELECT SUM(pay_price)
        FROM trade_order s
        WHERE s.pay_status = TRUE
          AND deleted = 0
          AND create_time BETWEEN #{beginTime} AND #{endTime}
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND s.tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
    </select>

    <resultMap id="TradeOrderTrendRespVOMap"
               type="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderTrendRespVO">
        <result column="statDate" property="date"/>
        <result column="order_pay_count" property="orderPayCount"/>
        <result column="order_pay_price" property="orderPayPrice"/>
    </resultMap>

    <select id="selectListByPayTimeBetweenAndGroupByDay" resultMap="TradeOrderTrendRespVOMap">
        SELECT CAST(pay_time AS DATE) AS statDate,
               COUNT(1)                          AS order_pay_count,
               SUM(pay_price)                    AS order_pay_price
        FROM trade_order
        WHERE pay_status = TRUE
          AND create_time BETWEEN #{beginTime} AND #{endTime}
          AND deleted = 0
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
        GROUP BY CAST(pay_time AS DATE)
        ORDER BY statDate
    </select>

    <select id="selectListByPayTimeBetweenAndGroupByMonth" resultMap="TradeOrderTrendRespVOMap">
        SELECT CONCAT(EXTRACT(YEAR FROM pay_time), '-',
                      LPAD(CONCAT(EXTRACT(MONTH FROM pay_time)), 2, '0')) AS statDate,
               COUNT(1)                       AS order_pay_count,
               SUM(pay_price)                 AS order_pay_price
        FROM trade_order
        WHERE pay_status = TRUE
          AND create_time BETWEEN #{beginTime} AND #{endTime}
          AND deleted = 0
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
        GROUP BY CONCAT(EXTRACT(YEAR FROM pay_time), '-',
                        LPAD(CONCAT(EXTRACT(MONTH FROM pay_time)), 2, '0'))
        ORDER BY statDate
    </select>

    <select id="selectCountByStatusAndDeliveryType" resultType="java.lang.Long">
        SELECT COUNT(1)
        FROM trade_order
        WHERE status = #{status}
          ANd delivery_type = #{deliveryType}
          AND deleted = 0
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
    </select>

    <select id="selectPaySummaryByPayStatusAndPayTimeBetween"
            resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderSummaryRespVO">
        SELECT COALESCE(SUM(pay_price), 0) AS order_pay_price,
               COUNT(1)                  AS order_pay_count
        FROM trade_order
        WHERE pay_status = #{payStatus}
          AND pay_time BETWEEN #{beginTime} AND #{endTime}
          AND deleted = 0
        <if test="@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId() != null">
            AND tenant_id = ${@cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder@getTenantId()}
        </if>
    </select>

</mapper>