zhouhui.jiang

update

......@@ -244,13 +244,15 @@ public class RebateController {
@Operation(summary = "获取返利月度统计数据")
@GetMapping("/monthlyStats")
public ApiRes<List<Map<String, Object>>> getRebateMonthlyStats(@RequestParam(required = false) Integer year) {
log.info("获取返利月度统计数据,年份:{}", year);
public ApiRes<List<Map<String, Object>>> getRebateMonthlyStats(
@RequestParam(required = false) Integer year,
@RequestParam(required = false) String dealerName) {
log.info("获取返利月度统计数据,年份:{},经销商名称:{}", year, dealerName);
try {
if (year == null) {
year = java.time.LocalDate.now().getYear();
}
List<Map<String, Object>> result = rebateService.getRebateMonthlyStats(year);
List<Map<String, Object>> result = rebateService.getRebateMonthlyStats(year, dealerName);
return ApiRes.success(result);
} catch (Exception e) {
log.error("获取返利月度统计数据失败", e);
......@@ -260,10 +262,11 @@ public class RebateController {
@Operation(summary = "获取返利状态统计数据")
@GetMapping("/statusStats")
public ApiRes<Map<String, Object>> getRebateStatusStats() {
log.info("获取返利状态统计数据");
public ApiRes<Map<String, Object>> getRebateStatusStats(
@RequestParam(required = false) String dealerName) {
log.info("获取返利状态统计数据,经销商名称:{}", dealerName);
try {
Map<String, Object> result = rebateService.getRebateStatusStats();
Map<String, Object> result = rebateService.getRebateStatusStats(dealerName);
return ApiRes.success(result);
} catch (Exception e) {
log.error("获取返利状态统计数据失败", e);
......
......@@ -82,16 +82,18 @@ public interface RebateMapper extends BaseMapper<Rebate> {
* 获取返利月度统计数据
*
* @param year 年份
* @param dealerName 经销商名称(可选)
* @return 月度统计数据
*/
List<Map<String, Object>> getRebateMonthlyStats(@Param("year") Integer year);
List<Map<String, Object>> getRebateMonthlyStats(@Param("year") Integer year, @Param("dealerName") String dealerName);
/**
* 获取返利状态统计数据
*
* @param dealerName 经销商名称(可选)
* @return 状态统计数据
*/
Map<String, Object> getRebateStatusStats();
Map<String, Object> getRebateStatusStats(@Param("dealerName") String dealerName);
/**
* 获取返利趋势统计数据
......
......@@ -120,16 +120,18 @@ public interface RebateService extends IService<Rebate> {
* 获取返利月度统计数据
*
* @param year 年份
* @param dealerName 经销商名称(可选)
* @return 月度统计数据
*/
List<Map<String, Object>> getRebateMonthlyStats(Integer year);
List<Map<String, Object>> getRebateMonthlyStats(Integer year, String dealerName);
/**
* 获取返利状态统计数据
*
* @param dealerName 经销商名称(可选)
* @return 状态统计数据
*/
Map<String, Object> getRebateStatusStats();
Map<String, Object> getRebateStatusStats(String dealerName);
/**
* 获取返利趋势统计数据
......
......@@ -259,15 +259,15 @@ public class RebateServiceImpl extends ServiceImpl<RebateMapper, Rebate> impleme
}
@Override
public List<Map<String, Object>> getRebateMonthlyStats(Integer year) {
log.info("获取返利月度统计数据,年份:{}", year);
return rebateMapper.getRebateMonthlyStats(year);
public List<Map<String, Object>> getRebateMonthlyStats(Integer year, String dealerName) {
log.info("获取返利月度统计数据,年份:{},经销商名称:{}", year, dealerName);
return rebateMapper.getRebateMonthlyStats(year, dealerName);
}
@Override
public Map<String, Object> getRebateStatusStats() {
log.info("获取返利状态统计数据");
return rebateMapper.getRebateStatusStats();
public Map<String, Object> getRebateStatusStats(String dealerName) {
log.info("获取返利状态统计数据,经销商名称:{}", dealerName);
return rebateMapper.getRebateStatusStats(dealerName);
}
@Override
......
......@@ -108,32 +108,50 @@
<!-- 获取返利月度统计数据 -->
<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,
MONTH(rd.rebate_date) as month,
COALESCE(SUM(CASE WHEN rd.calc_flag = 1 AND rd.operate_type = 1 THEN rd.rebate_amount
ELSE 0 END), 0) as totalAmount,
ABS(COALESCE(SUM(CASE WHEN rd.calc_flag = 1 AND rd.operate_type = 2 THEN rd.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)
COUNT(CASE WHEN rd.calc_flag = 1 THEN 1 END) as calculatedCount
FROM t_rebate_detail rd
WHERE rd.del_flag = '0'
AND YEAR(rd.rebate_date) = #{year}
<if test="dealerName != null and dealerName != ''">
AND rd.dealer_name LIKE CONCAT('%', #{dealerName}, '%')
</if>
GROUP BY MONTH(rd.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 COUNT(CASE WHEN calc_flag = 1 THEN 1 END) FROM t_rebate_detail WHERE del_flag = '0') as calculatedCount,
(SELECT COUNT(CASE WHEN calc_flag = 0 THEN 1 END) FROM t_rebate_detail WHERE del_flag = '0') as unCalculatedCount,
(SELECT COUNT(*) FROM t_rebate_detail WHERE del_flag = '0') as totalCount,
(SELECT COALESCE(SUM(used_rebate_amount), 0)
FROM t_dealer_info
WHERE del_flag = '0'
<if test="dealerName != null and dealerName != ''">
AND dealer_name LIKE CONCAT('%', #{dealerName}, '%')
</if>
) as calculatedAmount,
(SELECT COALESCE(SUM(total_rebate_amount), 0)
FROM t_dealer_info
WHERE del_flag = '0'
<if test="dealerName != null and dealerName != ''">
AND dealer_name LIKE CONCAT('%', #{dealerName}, '%')
</if>
) as totalAmount,
(SELECT COALESCE(SUM(pending_rebate_amount), 0)
FROM t_dealer_info
WHERE del_flag = '0'
<if test="dealerName != null and dealerName != ''">
AND dealer_name LIKE CONCAT('%', #{dealerName}, '%')
</if>
) as unCalculatedAmount
</select>
<!-- 获取返利趋势统计数据 -->
......
......@@ -201,19 +201,23 @@ export const exportRebate = (params: RebateSearchParams) => {
}
// 获取返利月度统计数据
export const getRebateMonthlyStats = (year?: number) => {
export const getRebateMonthlyStats = (year?: number, dealerName?: string) => {
return request({
url: '/api/rebate/monthlyStats',
method: 'get',
params: { year: year || new Date().getFullYear() }
params: {
year: year || new Date().getFullYear(),
dealerName: dealerName || undefined
}
})
}
// 获取返利状态统计数据
export const getRebateStatusStats = () => {
export const getRebateStatusStats = (dealerName?: string) => {
return request({
url: '/api/rebate/statusStats',
method: 'get'
method: 'get',
params: { dealerName: dealerName || undefined }
})
}
......
......@@ -74,7 +74,7 @@
<div class="chart-legend">
<div class="legend-item">
<span class="legend-dot" style="background-color: #4CAF50;"></span>
<span>返利合计</span>
<span>新增返利</span>
</div>
<div class="legend-item">
<span class="legend-dot" style="background-color: #2196F3;"></span>
......@@ -779,6 +779,11 @@ const handleDateRangeChange = (dates: [string, string] | null) => {
const handleSearch = () => {
pagination.pageNum = 1
getRebateList()
// 刷新图表数据
setTimeout(async () => {
await initTrendChart()
await initPieChart()
}, 100)
}
// 重置
......@@ -799,6 +804,11 @@ const handleReset = () => {
})
pagination.pageNum = 1
getRebateList()
// 刷新图表数据
setTimeout(async () => {
await initTrendChart()
await initPieChart()
}, 100)
}
// 刷新
......@@ -1290,8 +1300,8 @@ const initTrendChart = async () => {
const chart = echarts.init(trendChart.value)
try {
// 调用后端API获取月度统计数据 - 查询2025年的数据
const response = await rebateApi.getRebateMonthlyStats(2025)
// 调用后端API获取月度统计数据 - 查询2025年的数据,传入经销商名称
const response = await rebateApi.getRebateMonthlyStats(2025, searchForm.dealerName || undefined)
console.log('月度统计API响应:', response)
let monthlyData: any[] = []
......@@ -1363,7 +1373,7 @@ const initTrendChart = async () => {
},
series: [
{
name: '返利合计',
name: '新增返利',
type: 'line',
smooth: true,
data: totalRebateData,
......@@ -1455,7 +1465,7 @@ const initTrendChart = async () => {
},
series: [
{
name: '返利合计',
name: '新增返利',
type: 'line',
smooth: true,
data: totalRebateDataFallback,
......@@ -1498,8 +1508,8 @@ const initPieChart = async () => {
const chart = echarts.init(pieChart.value)
try {
// 调用后端API获取状态统计数据
const response = await rebateApi.getRebateStatusStats()
// 调用后端API获取状态统计数据,传入经销商名称
const response = await rebateApi.getRebateStatusStats(searchForm.dealerName || undefined)
console.log('状态统计API响应:', response)
let statusData: any = { calculatedAmount: 0, unCalculatedAmount: 0 }
......
{
"token": "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwic3ViIjoiYWRtaW4iLCJpYXQiOjE3NjE1NTY0MTksImV4cCI6MTc2MTY0MjgxOX0.seWCAYzvRAMwpf3jld21oKC8rD8TzcB3h3rTJI8veBtlE9UjipUYadO38tgOPDI3K1l7v50Lu-k5CqOe0hxhKQ",
"saved_at": 1761556419
"token": "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwic3ViIjoiYWRtaW4iLCJpYXQiOjE3NjI5NDE3MzMsImV4cCI6MTc2MzAyODEzM30.eAK5goLY7IXBB5Zpe3Ep2kD-YN820koE4E0mB6WGdVik6BadxAEQk4bUSFDK9oTzA6SF_anwRFICgF7YSNS51A",
"saved_at": 1762941734
}
\ No newline at end of file
......