Toggle navigation
Toggle navigation
This project
Loading...
Sign in
zhouhui.jiang
/
test_cursor
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
zhouhui.jiang
2025-11-13 09:45:15 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
3846ef30fa53c75f37e4dc2cdb9b01dfa7eeac7a
3846ef30
1 parent
e7fb471a
update
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
86 additions
and
47 deletions
backend/src/main/java/com/apple/erp/controller/RebateController.java
backend/src/main/java/com/apple/erp/mapper/RebateMapper.java
backend/src/main/java/com/apple/erp/service/RebateService.java
backend/src/main/java/com/apple/erp/service/impl/RebateServiceImpl.java
backend/src/main/resources/mapper/RebateMapper.xml
frontend/src/api/rebate.ts
frontend/src/views/rebate/index.vue
tests/api/.token.json
backend/src/main/java/com/apple/erp/controller/RebateController.java
View file @
3846ef3
...
...
@@ -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
);
...
...
backend/src/main/java/com/apple/erp/mapper/RebateMapper.java
View file @
3846ef3
...
...
@@ -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
);
/**
* 获取返利趋势统计数据
...
...
backend/src/main/java/com/apple/erp/service/RebateService.java
View file @
3846ef3
...
...
@@ -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
);
/**
* 获取返利趋势统计数据
...
...
backend/src/main/java/com/apple/erp/service/impl/RebateServiceImpl.java
View file @
3846ef3
...
...
@@ -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
...
...
backend/src/main/resources/mapper/RebateMapper.xml
View file @
3846ef3
...
...
@@ -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(r
d.r
ebate_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
(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>
<!-- 获取返利趋势统计数据 -->
...
...
frontend/src/api/rebate.ts
View file @
3846ef3
...
...
@@ -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
}
})
}
...
...
frontend/src/views/rebate/index.vue
View file @
3846ef3
...
...
@@ -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 }
...
...
tests/api/.token.json
View file @
3846ef3
{
"token"
:
"eyJhbGciOiJIUzUxMiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwic3ViIjoiYWRtaW4iLCJpYXQiOjE3Nj
E1NTY0MTksImV4cCI6MTc2MTY0MjgxOX0.seWCAYzvRAMwpf3jld21oKC8rD8TzcB3h3rTJI8veBtlE9UjipUYadO38tgOPDI3K1l7v50Lu-k5CqOe0hxhKQ
"
,
"saved_at"
:
176
1556419
"token"
:
"eyJhbGciOiJIUzUxMiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwic3ViIjoiYWRtaW4iLCJpYXQiOjE3Nj
I5NDE3MzMsImV4cCI6MTc2MzAyODEzM30.eAK5goLY7IXBB5Zpe3Ep2kD-YN820koE4E0mB6WGdVik6BadxAEQk4bUSFDK9oTzA6SF_anwRFICgF7YSNS51A
"
,
"saved_at"
:
176
2941734
}
\ No newline at end of file
...
...
Please
register
or
login
to post a comment