RebateMapper.xml
6.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?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, t_index, 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 >= #{params.rebateStartDate}
</if>
<if test="params.rebateEndDate != null and params.rebateEndDate != ''">
AND rebate_date <= #{params.rebateEndDate}
</if>
ORDER BY rebate_date 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="getMaxIndexByDate" resultType="java.lang.Integer">
SELECT COALESCE(MAX(t_index), 0)
FROM t_rebate_detail
WHERE del_flag = '0'
AND rebate_date = #{rebateDate}
</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 <= #{endDate}
</if>
GROUP BY DATE(rebate_date)
ORDER BY date
</select>
</mapper>