RebateMapper.xml 6.2 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="com.apple.erp.mapper.RebateMapper">

    <!-- 返利明细基础字段 -->
    <sql id="baseColumns">
        rebate_id, rebate_no, order_no, dealer_code, dealer_name, product_code,
        rebate_amount, rebate_date, operate_type, calc_flag, upload_time,
        create_by, create_time, update_by, update_time
    </sql>

    <!-- 分页查询返利明细列表 -->
    <select id="selectRebatePage" resultType="com.apple.erp.entity.Rebate">
        SELECT
        <include refid="baseColumns"/>
        FROM t_rebate_detail
        WHERE del_flag = '0'
        <if test="params.rebateNo != null and params.rebateNo != ''">
            AND rebate_no LIKE CONCAT('%', #{params.rebateNo}, '%')
        </if>
        <if test="params.orderNo != null and params.orderNo != ''">
            AND order_no LIKE CONCAT('%', #{params.orderNo}, '%')
        </if>
        <if test="params.dealerCode != null and params.dealerCode != ''">
            AND dealer_code = #{params.dealerCode}
        </if>
        <if test="params.dealerName != null and params.dealerName != ''">
            AND dealer_name LIKE CONCAT('%', #{params.dealerName}, '%')
        </if>
        <if test="params.productCode != null and params.productCode != ''">
            AND product_code = #{params.productCode}
        </if>
        <if test="params.operateType != null">
            AND operate_type = #{params.operateType}
        </if>
        <if test="params.calcFlag != null">
            AND calc_flag = #{params.calcFlag}
        </if>
        <if test="params.rebateStartDate != null and params.rebateStartDate != ''">
            AND rebate_date &gt;= #{params.rebateStartDate}
        </if>
        <if test="params.rebateEndDate != null and params.rebateEndDate != ''">
            AND rebate_date &lt;= #{params.rebateEndDate}
        </if>
        ORDER BY create_time DESC
    </select>

    <!-- 根据经销商编码统计返利总金额 -->
    <select id="sumRebateAmountByDealer" resultType="java.math.BigDecimal">
        SELECT COALESCE(SUM(rebate_amount), 0)
        FROM t_rebate_detail
        WHERE del_flag = '0'
        AND dealer_code = #{dealerCode}
        <if test="operateType != null">
            AND operate_type = #{operateType}
        </if>
    </select>

    <!-- 根据产品编码统计返利总金额 -->
    <select id="sumRebateAmountByProduct" resultType="java.math.BigDecimal">
        SELECT COALESCE(SUM(rebate_amount), 0)
        FROM t_rebate_detail
        WHERE del_flag = '0'
        AND product_code = #{productCode}
        <if test="operateType != null">
            AND operate_type = #{operateType}
        </if>
    </select>

    <!-- 统计各操作类型的返利数量 -->
    <select id="countRebateByOperateType" resultType="java.util.Map">
        SELECT 
            operate_type,
            COUNT(*) as count,
            COALESCE(SUM(rebate_amount), 0) as totalAmount
        FROM t_rebate_detail
        WHERE del_flag = '0'
        GROUP BY operate_type
    </select>

    <!-- 查询未计算的返利明细列表 -->
    <select id="selectUnCalcRebates" resultType="com.apple.erp.entity.Rebate">
        SELECT
        <include refid="baseColumns"/>
        FROM t_rebate_detail
        WHERE del_flag = '0'
        AND calc_flag = 0
        ORDER BY create_time ASC
    </select>

    <!-- 根据返利编号查询返利明细 -->
    <select id="selectByRebateNo" resultType="com.apple.erp.entity.Rebate">
        SELECT
        <include refid="baseColumns"/>
        FROM t_rebate_detail
        WHERE del_flag = '0'
        AND rebate_no = #{rebateNo}
    </select>

    <!-- 获取返利月度统计数据 -->
    <select id="getRebateMonthlyStats" resultType="java.util.Map">
        SELECT 
            MONTH(rebate_date) as month,
            COALESCE(SUM(CASE WHEN operate_type = 1 THEN rebate_amount ELSE -rebate_amount END), 0) as totalAmount,
            COALESCE(SUM(CASE WHEN calc_flag = 1 AND operate_type = 1 THEN rebate_amount 
                             WHEN calc_flag = 1 AND operate_type = 2 THEN -rebate_amount 
                             ELSE 0 END), 0) as calculatedAmount,
            COUNT(*) as totalCount,
            COUNT(CASE WHEN calc_flag = 1 THEN 1 END) as calculatedCount
        FROM t_rebate_detail
        WHERE del_flag = '0'
        AND YEAR(rebate_date) = #{year}
        GROUP BY MONTH(rebate_date)
        ORDER BY month
    </select>

    <!-- 获取返利状态统计数据 -->
    <select id="getRebateStatusStats" resultType="java.util.Map">
        SELECT 
            COUNT(CASE WHEN calc_flag = 1 THEN 1 END) as calculatedCount,
            COUNT(CASE WHEN calc_flag = 0 THEN 1 END) as unCalculatedCount,
            COUNT(*) as totalCount,
            COALESCE(SUM(CASE WHEN calc_flag = 1 AND operate_type = 1 THEN rebate_amount 
                             WHEN calc_flag = 1 AND operate_type = 2 THEN -rebate_amount 
                             ELSE 0 END), 0) as calculatedAmount,
            COALESCE(SUM(CASE WHEN operate_type = 1 THEN rebate_amount ELSE -rebate_amount END), 0) as totalAmount
        FROM t_rebate_detail
        WHERE del_flag = '0'
    </select>

    <!-- 获取返利趋势统计数据 -->
    <select id="getRebateTrendStats" resultType="java.util.Map">
        SELECT 
            DATE(rebate_date) as date,
            COALESCE(SUM(CASE WHEN operate_type = 1 THEN rebate_amount ELSE -rebate_amount END), 0) as totalAmount,
            COALESCE(SUM(CASE WHEN calc_flag = 1 AND operate_type = 1 THEN rebate_amount 
                             WHEN calc_flag = 1 AND operate_type = 2 THEN -rebate_amount 
                             ELSE 0 END), 0) as calculatedAmount,
            COUNT(*) as totalCount,
            COUNT(CASE WHEN calc_flag = 1 THEN 1 END) as calculatedCount
        FROM t_rebate_detail
        WHERE del_flag = '0'
        <if test="startDate != null and startDate != ''">
            AND rebate_date >= #{startDate}
        </if>
        <if test="endDate != null and endDate != ''">
            AND rebate_date &lt;= #{endDate}
        </if>
        GROUP BY DATE(rebate_date)
        ORDER BY date
    </select>

</mapper>