Showing
8 changed files
with
86 additions
and
47 deletions
| ... | @@ -244,13 +244,15 @@ public class RebateController { | ... | @@ -244,13 +244,15 @@ public class RebateController { |
| 244 | 244 | ||
| 245 | @Operation(summary = "获取返利月度统计数据") | 245 | @Operation(summary = "获取返利月度统计数据") |
| 246 | @GetMapping("/monthlyStats") | 246 | @GetMapping("/monthlyStats") |
| 247 | - public ApiRes<List<Map<String, Object>>> getRebateMonthlyStats(@RequestParam(required = false) Integer year) { | 247 | + public ApiRes<List<Map<String, Object>>> getRebateMonthlyStats( |
| 248 | - log.info("获取返利月度统计数据,年份:{}", year); | 248 | + @RequestParam(required = false) Integer year, |
| 249 | + @RequestParam(required = false) String dealerName) { | ||
| 250 | + log.info("获取返利月度统计数据,年份:{},经销商名称:{}", year, dealerName); | ||
| 249 | try { | 251 | try { |
| 250 | if (year == null) { | 252 | if (year == null) { |
| 251 | year = java.time.LocalDate.now().getYear(); | 253 | year = java.time.LocalDate.now().getYear(); |
| 252 | } | 254 | } |
| 253 | - List<Map<String, Object>> result = rebateService.getRebateMonthlyStats(year); | 255 | + List<Map<String, Object>> result = rebateService.getRebateMonthlyStats(year, dealerName); |
| 254 | return ApiRes.success(result); | 256 | return ApiRes.success(result); |
| 255 | } catch (Exception e) { | 257 | } catch (Exception e) { |
| 256 | log.error("获取返利月度统计数据失败", e); | 258 | log.error("获取返利月度统计数据失败", e); |
| ... | @@ -260,10 +262,11 @@ public class RebateController { | ... | @@ -260,10 +262,11 @@ public class RebateController { |
| 260 | 262 | ||
| 261 | @Operation(summary = "获取返利状态统计数据") | 263 | @Operation(summary = "获取返利状态统计数据") |
| 262 | @GetMapping("/statusStats") | 264 | @GetMapping("/statusStats") |
| 263 | - public ApiRes<Map<String, Object>> getRebateStatusStats() { | 265 | + public ApiRes<Map<String, Object>> getRebateStatusStats( |
| 264 | - log.info("获取返利状态统计数据"); | 266 | + @RequestParam(required = false) String dealerName) { |
| 267 | + log.info("获取返利状态统计数据,经销商名称:{}", dealerName); | ||
| 265 | try { | 268 | try { |
| 266 | - Map<String, Object> result = rebateService.getRebateStatusStats(); | 269 | + Map<String, Object> result = rebateService.getRebateStatusStats(dealerName); |
| 267 | return ApiRes.success(result); | 270 | return ApiRes.success(result); |
| 268 | } catch (Exception e) { | 271 | } catch (Exception e) { |
| 269 | log.error("获取返利状态统计数据失败", e); | 272 | log.error("获取返利状态统计数据失败", e); | ... | ... |
| ... | @@ -82,16 +82,18 @@ public interface RebateMapper extends BaseMapper<Rebate> { | ... | @@ -82,16 +82,18 @@ public interface RebateMapper extends BaseMapper<Rebate> { |
| 82 | * 获取返利月度统计数据 | 82 | * 获取返利月度统计数据 |
| 83 | * | 83 | * |
| 84 | * @param year 年份 | 84 | * @param year 年份 |
| 85 | + * @param dealerName 经销商名称(可选) | ||
| 85 | * @return 月度统计数据 | 86 | * @return 月度统计数据 |
| 86 | */ | 87 | */ |
| 87 | - List<Map<String, Object>> getRebateMonthlyStats(@Param("year") Integer year); | 88 | + List<Map<String, Object>> getRebateMonthlyStats(@Param("year") Integer year, @Param("dealerName") String dealerName); |
| 88 | 89 | ||
| 89 | /** | 90 | /** |
| 90 | * 获取返利状态统计数据 | 91 | * 获取返利状态统计数据 |
| 91 | * | 92 | * |
| 93 | + * @param dealerName 经销商名称(可选) | ||
| 92 | * @return 状态统计数据 | 94 | * @return 状态统计数据 |
| 93 | */ | 95 | */ |
| 94 | - Map<String, Object> getRebateStatusStats(); | 96 | + Map<String, Object> getRebateStatusStats(@Param("dealerName") String dealerName); |
| 95 | 97 | ||
| 96 | /** | 98 | /** |
| 97 | * 获取返利趋势统计数据 | 99 | * 获取返利趋势统计数据 | ... | ... |
| ... | @@ -120,16 +120,18 @@ public interface RebateService extends IService<Rebate> { | ... | @@ -120,16 +120,18 @@ public interface RebateService extends IService<Rebate> { |
| 120 | * 获取返利月度统计数据 | 120 | * 获取返利月度统计数据 |
| 121 | * | 121 | * |
| 122 | * @param year 年份 | 122 | * @param year 年份 |
| 123 | + * @param dealerName 经销商名称(可选) | ||
| 123 | * @return 月度统计数据 | 124 | * @return 月度统计数据 |
| 124 | */ | 125 | */ |
| 125 | - List<Map<String, Object>> getRebateMonthlyStats(Integer year); | 126 | + List<Map<String, Object>> getRebateMonthlyStats(Integer year, String dealerName); |
| 126 | 127 | ||
| 127 | /** | 128 | /** |
| 128 | * 获取返利状态统计数据 | 129 | * 获取返利状态统计数据 |
| 129 | * | 130 | * |
| 131 | + * @param dealerName 经销商名称(可选) | ||
| 130 | * @return 状态统计数据 | 132 | * @return 状态统计数据 |
| 131 | */ | 133 | */ |
| 132 | - Map<String, Object> getRebateStatusStats(); | 134 | + Map<String, Object> getRebateStatusStats(String dealerName); |
| 133 | 135 | ||
| 134 | /** | 136 | /** |
| 135 | * 获取返利趋势统计数据 | 137 | * 获取返利趋势统计数据 | ... | ... |
| ... | @@ -259,15 +259,15 @@ public class RebateServiceImpl extends ServiceImpl<RebateMapper, Rebate> impleme | ... | @@ -259,15 +259,15 @@ public class RebateServiceImpl extends ServiceImpl<RebateMapper, Rebate> impleme |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | @Override | 261 | @Override |
| 262 | - public List<Map<String, Object>> getRebateMonthlyStats(Integer year) { | 262 | + public List<Map<String, Object>> getRebateMonthlyStats(Integer year, String dealerName) { |
| 263 | - log.info("获取返利月度统计数据,年份:{}", year); | 263 | + log.info("获取返利月度统计数据,年份:{},经销商名称:{}", year, dealerName); |
| 264 | - return rebateMapper.getRebateMonthlyStats(year); | 264 | + return rebateMapper.getRebateMonthlyStats(year, dealerName); |
| 265 | } | 265 | } |
| 266 | 266 | ||
| 267 | @Override | 267 | @Override |
| 268 | - public Map<String, Object> getRebateStatusStats() { | 268 | + public Map<String, Object> getRebateStatusStats(String dealerName) { |
| 269 | - log.info("获取返利状态统计数据"); | 269 | + log.info("获取返利状态统计数据,经销商名称:{}", dealerName); |
| 270 | - return rebateMapper.getRebateStatusStats(); | 270 | + return rebateMapper.getRebateStatusStats(dealerName); |
| 271 | } | 271 | } |
| 272 | 272 | ||
| 273 | @Override | 273 | @Override | ... | ... |
| ... | @@ -108,32 +108,50 @@ | ... | @@ -108,32 +108,50 @@ |
| 108 | <!-- 获取返利月度统计数据 --> | 108 | <!-- 获取返利月度统计数据 --> |
| 109 | <select id="getRebateMonthlyStats" resultType="java.util.Map"> | 109 | <select id="getRebateMonthlyStats" resultType="java.util.Map"> |
| 110 | SELECT | 110 | SELECT |
| 111 | - MONTH(rebate_date) as month, | 111 | + MONTH(rd.rebate_date) as month, |
| 112 | - COALESCE(SUM(CASE WHEN operate_type = 1 THEN rebate_amount ELSE -rebate_amount END), 0) as totalAmount, | 112 | + COALESCE(SUM(CASE WHEN rd.calc_flag = 1 AND rd.operate_type = 1 THEN rd.rebate_amount |
| 113 | - COALESCE(SUM(CASE WHEN calc_flag = 1 AND operate_type = 1 THEN rebate_amount | 113 | + ELSE 0 END), 0) as totalAmount, |
| 114 | - WHEN calc_flag = 1 AND operate_type = 2 THEN -rebate_amount | 114 | + ABS(COALESCE(SUM(CASE WHEN rd.calc_flag = 1 AND rd.operate_type = 2 THEN rd.rebate_amount |
| 115 | - ELSE 0 END), 0) as calculatedAmount, | 115 | + ELSE 0 END), 0)) as calculatedAmount, |
| 116 | COUNT(*) as totalCount, | 116 | COUNT(*) as totalCount, |
| 117 | - COUNT(CASE WHEN calc_flag = 1 THEN 1 END) as calculatedCount | 117 | + COUNT(CASE WHEN rd.calc_flag = 1 THEN 1 END) as calculatedCount |
| 118 | - FROM t_rebate_detail | 118 | + FROM t_rebate_detail rd |
| 119 | - WHERE del_flag = '0' | 119 | + WHERE rd.del_flag = '0' |
| 120 | - AND YEAR(rebate_date) = #{year} | 120 | + AND YEAR(rd.rebate_date) = #{year} |
| 121 | - GROUP BY MONTH(rebate_date) | 121 | + <if test="dealerName != null and dealerName != ''"> |
| 122 | + AND rd.dealer_name LIKE CONCAT('%', #{dealerName}, '%') | ||
| 123 | + </if> | ||
| 124 | + GROUP BY MONTH(rd.rebate_date) | ||
| 122 | ORDER BY month | 125 | ORDER BY month |
| 123 | </select> | 126 | </select> |
| 124 | 127 | ||
| 125 | <!-- 获取返利状态统计数据 --> | 128 | <!-- 获取返利状态统计数据 --> |
| 126 | <select id="getRebateStatusStats" resultType="java.util.Map"> | 129 | <select id="getRebateStatusStats" resultType="java.util.Map"> |
| 127 | SELECT | 130 | SELECT |
| 128 | - COUNT(CASE WHEN calc_flag = 1 THEN 1 END) as calculatedCount, | 131 | + (SELECT COUNT(CASE WHEN calc_flag = 1 THEN 1 END) FROM t_rebate_detail WHERE del_flag = '0') as calculatedCount, |
| 129 | - COUNT(CASE WHEN calc_flag = 0 THEN 1 END) as unCalculatedCount, | 132 | + (SELECT COUNT(CASE WHEN calc_flag = 0 THEN 1 END) FROM t_rebate_detail WHERE del_flag = '0') as unCalculatedCount, |
| 130 | - COUNT(*) as totalCount, | 133 | + (SELECT COUNT(*) FROM t_rebate_detail WHERE del_flag = '0') as totalCount, |
| 131 | - COALESCE(SUM(CASE WHEN calc_flag = 1 AND operate_type = 1 THEN rebate_amount | 134 | + (SELECT COALESCE(SUM(used_rebate_amount), 0) |
| 132 | - WHEN calc_flag = 1 AND operate_type = 2 THEN -rebate_amount | 135 | + FROM t_dealer_info |
| 133 | - ELSE 0 END), 0) as calculatedAmount, | ||
| 134 | - COALESCE(SUM(CASE WHEN operate_type = 1 THEN rebate_amount ELSE -rebate_amount END), 0) as totalAmount | ||
| 135 | - FROM t_rebate_detail | ||
| 136 | WHERE del_flag = '0' | 136 | WHERE del_flag = '0' |
| 137 | + <if test="dealerName != null and dealerName != ''"> | ||
| 138 | + AND dealer_name LIKE CONCAT('%', #{dealerName}, '%') | ||
| 139 | + </if> | ||
| 140 | + ) as calculatedAmount, | ||
| 141 | + (SELECT COALESCE(SUM(total_rebate_amount), 0) | ||
| 142 | + FROM t_dealer_info | ||
| 143 | + WHERE del_flag = '0' | ||
| 144 | + <if test="dealerName != null and dealerName != ''"> | ||
| 145 | + AND dealer_name LIKE CONCAT('%', #{dealerName}, '%') | ||
| 146 | + </if> | ||
| 147 | + ) as totalAmount, | ||
| 148 | + (SELECT COALESCE(SUM(pending_rebate_amount), 0) | ||
| 149 | + FROM t_dealer_info | ||
| 150 | + WHERE del_flag = '0' | ||
| 151 | + <if test="dealerName != null and dealerName != ''"> | ||
| 152 | + AND dealer_name LIKE CONCAT('%', #{dealerName}, '%') | ||
| 153 | + </if> | ||
| 154 | + ) as unCalculatedAmount | ||
| 137 | </select> | 155 | </select> |
| 138 | 156 | ||
| 139 | <!-- 获取返利趋势统计数据 --> | 157 | <!-- 获取返利趋势统计数据 --> | ... | ... |
| ... | @@ -201,19 +201,23 @@ export const exportRebate = (params: RebateSearchParams) => { | ... | @@ -201,19 +201,23 @@ export const exportRebate = (params: RebateSearchParams) => { |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | // 获取返利月度统计数据 | 203 | // 获取返利月度统计数据 |
| 204 | -export const getRebateMonthlyStats = (year?: number) => { | 204 | +export const getRebateMonthlyStats = (year?: number, dealerName?: string) => { |
| 205 | return request({ | 205 | return request({ |
| 206 | url: '/api/rebate/monthlyStats', | 206 | url: '/api/rebate/monthlyStats', |
| 207 | method: 'get', | 207 | method: 'get', |
| 208 | - params: { year: year || new Date().getFullYear() } | 208 | + params: { |
| 209 | + year: year || new Date().getFullYear(), | ||
| 210 | + dealerName: dealerName || undefined | ||
| 211 | + } | ||
| 209 | }) | 212 | }) |
| 210 | } | 213 | } |
| 211 | 214 | ||
| 212 | // 获取返利状态统计数据 | 215 | // 获取返利状态统计数据 |
| 213 | -export const getRebateStatusStats = () => { | 216 | +export const getRebateStatusStats = (dealerName?: string) => { |
| 214 | return request({ | 217 | return request({ |
| 215 | url: '/api/rebate/statusStats', | 218 | url: '/api/rebate/statusStats', |
| 216 | - method: 'get' | 219 | + method: 'get', |
| 220 | + params: { dealerName: dealerName || undefined } | ||
| 217 | }) | 221 | }) |
| 218 | } | 222 | } |
| 219 | 223 | ... | ... |
| ... | @@ -74,7 +74,7 @@ | ... | @@ -74,7 +74,7 @@ |
| 74 | <div class="chart-legend"> | 74 | <div class="chart-legend"> |
| 75 | <div class="legend-item"> | 75 | <div class="legend-item"> |
| 76 | <span class="legend-dot" style="background-color: #4CAF50;"></span> | 76 | <span class="legend-dot" style="background-color: #4CAF50;"></span> |
| 77 | - <span>返利合计</span> | 77 | + <span>新增返利</span> |
| 78 | </div> | 78 | </div> |
| 79 | <div class="legend-item"> | 79 | <div class="legend-item"> |
| 80 | <span class="legend-dot" style="background-color: #2196F3;"></span> | 80 | <span class="legend-dot" style="background-color: #2196F3;"></span> |
| ... | @@ -779,6 +779,11 @@ const handleDateRangeChange = (dates: [string, string] | null) => { | ... | @@ -779,6 +779,11 @@ const handleDateRangeChange = (dates: [string, string] | null) => { |
| 779 | const handleSearch = () => { | 779 | const handleSearch = () => { |
| 780 | pagination.pageNum = 1 | 780 | pagination.pageNum = 1 |
| 781 | getRebateList() | 781 | getRebateList() |
| 782 | + // 刷新图表数据 | ||
| 783 | + setTimeout(async () => { | ||
| 784 | + await initTrendChart() | ||
| 785 | + await initPieChart() | ||
| 786 | + }, 100) | ||
| 782 | } | 787 | } |
| 783 | 788 | ||
| 784 | // 重置 | 789 | // 重置 |
| ... | @@ -799,6 +804,11 @@ const handleReset = () => { | ... | @@ -799,6 +804,11 @@ const handleReset = () => { |
| 799 | }) | 804 | }) |
| 800 | pagination.pageNum = 1 | 805 | pagination.pageNum = 1 |
| 801 | getRebateList() | 806 | getRebateList() |
| 807 | + // 刷新图表数据 | ||
| 808 | + setTimeout(async () => { | ||
| 809 | + await initTrendChart() | ||
| 810 | + await initPieChart() | ||
| 811 | + }, 100) | ||
| 802 | } | 812 | } |
| 803 | 813 | ||
| 804 | // 刷新 | 814 | // 刷新 |
| ... | @@ -1290,8 +1300,8 @@ const initTrendChart = async () => { | ... | @@ -1290,8 +1300,8 @@ const initTrendChart = async () => { |
| 1290 | const chart = echarts.init(trendChart.value) | 1300 | const chart = echarts.init(trendChart.value) |
| 1291 | 1301 | ||
| 1292 | try { | 1302 | try { |
| 1293 | - // 调用后端API获取月度统计数据 - 查询2025年的数据 | 1303 | + // 调用后端API获取月度统计数据 - 查询2025年的数据,传入经销商名称 |
| 1294 | - const response = await rebateApi.getRebateMonthlyStats(2025) | 1304 | + const response = await rebateApi.getRebateMonthlyStats(2025, searchForm.dealerName || undefined) |
| 1295 | console.log('月度统计API响应:', response) | 1305 | console.log('月度统计API响应:', response) |
| 1296 | let monthlyData: any[] = [] | 1306 | let monthlyData: any[] = [] |
| 1297 | 1307 | ||
| ... | @@ -1363,7 +1373,7 @@ const initTrendChart = async () => { | ... | @@ -1363,7 +1373,7 @@ const initTrendChart = async () => { |
| 1363 | }, | 1373 | }, |
| 1364 | series: [ | 1374 | series: [ |
| 1365 | { | 1375 | { |
| 1366 | - name: '返利合计', | 1376 | + name: '新增返利', |
| 1367 | type: 'line', | 1377 | type: 'line', |
| 1368 | smooth: true, | 1378 | smooth: true, |
| 1369 | data: totalRebateData, | 1379 | data: totalRebateData, |
| ... | @@ -1455,7 +1465,7 @@ const initTrendChart = async () => { | ... | @@ -1455,7 +1465,7 @@ const initTrendChart = async () => { |
| 1455 | }, | 1465 | }, |
| 1456 | series: [ | 1466 | series: [ |
| 1457 | { | 1467 | { |
| 1458 | - name: '返利合计', | 1468 | + name: '新增返利', |
| 1459 | type: 'line', | 1469 | type: 'line', |
| 1460 | smooth: true, | 1470 | smooth: true, |
| 1461 | data: totalRebateDataFallback, | 1471 | data: totalRebateDataFallback, |
| ... | @@ -1498,8 +1508,8 @@ const initPieChart = async () => { | ... | @@ -1498,8 +1508,8 @@ const initPieChart = async () => { |
| 1498 | const chart = echarts.init(pieChart.value) | 1508 | const chart = echarts.init(pieChart.value) |
| 1499 | 1509 | ||
| 1500 | try { | 1510 | try { |
| 1501 | - // 调用后端API获取状态统计数据 | 1511 | + // 调用后端API获取状态统计数据,传入经销商名称 |
| 1502 | - const response = await rebateApi.getRebateStatusStats() | 1512 | + const response = await rebateApi.getRebateStatusStats(searchForm.dealerName || undefined) |
| 1503 | console.log('状态统计API响应:', response) | 1513 | console.log('状态统计API响应:', response) |
| 1504 | let statusData: any = { calculatedAmount: 0, unCalculatedAmount: 0 } | 1514 | let statusData: any = { calculatedAmount: 0, unCalculatedAmount: 0 } |
| 1505 | 1515 | ... | ... |
| 1 | { | 1 | { |
| 2 | - "token": "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwic3ViIjoiYWRtaW4iLCJpYXQiOjE3NjE1NTY0MTksImV4cCI6MTc2MTY0MjgxOX0.seWCAYzvRAMwpf3jld21oKC8rD8TzcB3h3rTJI8veBtlE9UjipUYadO38tgOPDI3K1l7v50Lu-k5CqOe0hxhKQ", | 2 | + "token": "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwic3ViIjoiYWRtaW4iLCJpYXQiOjE3NjI5NDE3MzMsImV4cCI6MTc2MzAyODEzM30.eAK5goLY7IXBB5Zpe3Ep2kD-YN820koE4E0mB6WGdVik6BadxAEQk4bUSFDK9oTzA6SF_anwRFICgF7YSNS51A", |
| 3 | - "saved_at": 1761556419 | 3 | + "saved_at": 1762941734 |
| 4 | } | 4 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment