150 lines
4.3 KiB
Markdown
150 lines
4.3 KiB
Markdown
|
|
# 收益统计修复完成 - 2026-01-31
|
|||
|
|
|
|||
|
|
## 修复内容
|
|||
|
|
|
|||
|
|
### 问题
|
|||
|
|
总收益(222元)比本月收益(1774元)低,不符合逻辑。
|
|||
|
|
|
|||
|
|
### 原因
|
|||
|
|
1. 本月/季度/年度收益统计时没有筛选订单状态,包含了所有状态的订单
|
|||
|
|
2. 月份判断只比较月份不比较年份,会把去年同月的订单也算进来
|
|||
|
|
|
|||
|
|
### 修复方案
|
|||
|
|
**统一原则:所有收益统计都只计算 status=4(已完成)的订单**
|
|||
|
|
|
|||
|
|
## 修改的文件
|
|||
|
|
|
|||
|
|
### 1. ProviderController.java
|
|||
|
|
|
|||
|
|
#### 修改1:今日收益统计
|
|||
|
|
```java
|
|||
|
|
// 添加状态筛选
|
|||
|
|
todayWrapper.eq(com.peidu.entity.Order::getTeacherId, providerId)
|
|||
|
|
.eq(com.peidu.entity.Order::getStatus, 4) // 只统计已完成订单
|
|||
|
|
.between(com.peidu.entity.Order::getCreateTime, todayStart, todayEnd);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 修改2:本月/季度/年度收益统计
|
|||
|
|
```java
|
|||
|
|
// 添加状态筛选
|
|||
|
|
w.eq(com.peidu.entity.Order::getTeacherId, providerId)
|
|||
|
|
.eq(com.peidu.entity.Order::getStatus, 4) // 只统计已完成订单
|
|||
|
|
.between(com.peidu.entity.Order::getCreateTime, start, end);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 修改3:添加日志
|
|||
|
|
```java
|
|||
|
|
log.info("查询{}统计: 时间范围={} 到 {}, 订单数量={}", type, start, end, periodOrders.size());
|
|||
|
|
log.info("返回{}统计: courseCount={}, earnings={}, duration={}h",
|
|||
|
|
type, courseCount, earnings, durationMinutes / 60);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. ProviderServiceImpl.java
|
|||
|
|
|
|||
|
|
#### 修改1:修复月份判断
|
|||
|
|
```java
|
|||
|
|
// 修改前:只比较月份
|
|||
|
|
.filter(order -> order.getCreateTime().getMonth() == LocalDateTime.now().getMonth())
|
|||
|
|
|
|||
|
|
// 修改后:同时比较年份和月份
|
|||
|
|
.filter(order -> {
|
|||
|
|
LocalDateTime createTime = order.getCreateTime();
|
|||
|
|
return createTime != null
|
|||
|
|
&& createTime.getYear() == now.getYear()
|
|||
|
|
&& createTime.getMonth() == now.getMonth();
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 修改2:添加日志
|
|||
|
|
```java
|
|||
|
|
log.info("开始统计收益: providerId={}", providerId);
|
|||
|
|
log.info("查询到已完成订单数量: {}", orders.size());
|
|||
|
|
log.info("总收益: {}", totalEarnings);
|
|||
|
|
log.info("本月收益: {}", monthEarnings);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 修复后的逻辑
|
|||
|
|
|
|||
|
|
### 收益统计规则
|
|||
|
|
1. **总收益** = 所有时间已完成订单的总金额
|
|||
|
|
2. **本月收益** = 本月已完成订单的总金额
|
|||
|
|
3. **本季度收益** = 本季度已完成订单的总金额
|
|||
|
|
4. **本年收益** = 本年已完成订单的总金额
|
|||
|
|
5. **今日收益** = 今日已完成订单的总金额
|
|||
|
|
|
|||
|
|
### 数据关系
|
|||
|
|
```
|
|||
|
|
总收益 >= 本年收益 >= 本季度收益 >= 本月收益 >= 今日收益
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 验证方法
|
|||
|
|
|
|||
|
|
### 1. 查看后端日志
|
|||
|
|
重启后端服务后,访问收益页面,查看日志输出:
|
|||
|
|
```
|
|||
|
|
开始统计收益: providerId=xxx
|
|||
|
|
查询到已完成订单数量: xxx
|
|||
|
|
总收益: xxx
|
|||
|
|
本月收益: xxx
|
|||
|
|
查询month统计: 时间范围=xxx 到 xxx, 订单数量=xxx
|
|||
|
|
返回month统计: courseCount=xxx, earnings=xxx, duration=xxxh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 检查数据库
|
|||
|
|
```sql
|
|||
|
|
-- 查看服务商的所有已完成订单
|
|||
|
|
SELECT
|
|||
|
|
id,
|
|||
|
|
teacher_id,
|
|||
|
|
status,
|
|||
|
|
pay_amount,
|
|||
|
|
create_time,
|
|||
|
|
YEAR(create_time) as year,
|
|||
|
|
MONTH(create_time) as month
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE teacher_id = ? AND status = 4
|
|||
|
|
ORDER BY create_time DESC;
|
|||
|
|
|
|||
|
|
-- 统计总收益
|
|||
|
|
SELECT SUM(pay_amount) as total_earnings
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE teacher_id = ? AND status = 4;
|
|||
|
|
|
|||
|
|
-- 统计本月收益
|
|||
|
|
SELECT SUM(pay_amount) as month_earnings
|
|||
|
|
FROM `order`
|
|||
|
|
WHERE teacher_id = ?
|
|||
|
|
AND status = 4
|
|||
|
|
AND YEAR(create_time) = YEAR(NOW())
|
|||
|
|
AND MONTH(create_time) = MONTH(NOW());
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 前端验证
|
|||
|
|
1. 打开收益查看页面
|
|||
|
|
2. 检查总收益 >= 本月收益
|
|||
|
|
3. 切换到"本季度"、"本年"标签,验证数据合理性
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **订单状态定义**
|
|||
|
|
- status = 4 表示已完成
|
|||
|
|
- 其他状态(待支付、待服务、服务中等)不计入收益
|
|||
|
|
|
|||
|
|
2. **时间范围**
|
|||
|
|
- 使用订单的 create_time 字段判断时间范围
|
|||
|
|
- 本月:当前月份的第1天00:00:00 到当前时间
|
|||
|
|
- 本季度:当前季度第一个月的第1天00:00:00 到当前时间
|
|||
|
|
- 本年:当前年份的1月1日00:00:00 到当前时间
|
|||
|
|
|
|||
|
|
3. **数据一致性**
|
|||
|
|
- 确保所有收益统计使用相同的筛选条件
|
|||
|
|
- 总收益应该始终 >= 任何时间段的收益
|
|||
|
|
|
|||
|
|
## 相关文件
|
|||
|
|
|
|||
|
|
- `peidu/backend/src/main/java/com/peidu/controller/ProviderController.java`
|
|||
|
|
- `peidu/backend/src/main/java/com/peidu/service/impl/ProviderServiceImpl.java`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
*修复时间:2026-01-31*
|