peixue-dev/Archive/[一次性]收益数据不一致问题诊断-2026-01-31.md

127 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

2026-02-28 17:26:03 +08:00
# 收益数据不一致问题诊断 - 2026-01-31
## 问题描述
收益查看页面显示的数据不一致:
- **顶部"总收益"**¥222
- **下方"本月总收益"**¥1774
## 问题原因
### 数据来源
**1. 顶部"总收益"¥222**
```javascript
// 调用接口
GET /api/provider/earnings/stats?type=overview
// 使用字段
totalEarnings = res.data.totalEarnings
```
**2. 下方"本月总收益"¥1774**
```javascript
// 调用接口
GET /api/provider/earnings/stats?type=month
// 使用字段
currentStats.earnings = res.data.earnings || res.data.total
```
### 根本原因
**后端接口返回的数据不一致:**
1. `type=overview` 返回的 `totalEarnings` = 222可能是累计总收益
2. `type=month` 返回的 `earnings` = 1774本月收益
**逻辑混乱:**
- 顶部显示"总收益",但实际显示的可能是某个特定时期的收益
- 下方显示"本月总收益",数值反而更大
## 可能的情况
### 情况1后端数据错误
- `type=overview` 返回的不是真正的总收益
- 可能只统计了部分数据
### 情况2前端理解错误
- 顶部应该显示"可提取收益"而不是"总收益"
- 下方的"本月总收益"是正确的
### 情况3数据库统计问题
- 总收益统计SQL有问题
- 本月收益统计正常
## 验证步骤
### 1. 检查后端接口返回
```bash
# 查看overview接口返回
GET /api/provider/earnings/stats?type=overview
# 查看month接口返回
GET /api/provider/earnings/stats?type=month
```
### 2. 检查数据库数据
```sql
-- 查看服务商的所有订单收益
SELECT
SUM(price) as total_earnings,
COUNT(*) as order_count
FROM work_order
WHERE provider_id = ?
AND status IN (3, 4); -- 已完成的订单
-- 查看本月订单收益
SELECT
SUM(price) as month_earnings,
COUNT(*) as order_count
FROM work_order
WHERE provider_id = ?
AND status IN (3, 4)
AND DATE_FORMAT(service_date, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m');
```
### 3. 检查后端Controller
文件:`peidu/backend/src/main/java/com/peidu/controller/ProviderController.java`
查找 `/api/provider/earnings/stats` 接口的实现
## 修复方案
### 方案1修改前端显示逻辑推荐
将顶部的"总收益"改为"可提取收益",更符合实际业务逻辑
```vue
<view class="total-earnings">
<text class="label">可提取收益(元)</text>
<text class="amount">{{ withdrawableEarnings }}</text>
</view>
```
### 方案2修复后端接口
确保 `type=overview` 返回真正的累计总收益
### 方案3统一数据源
让顶部和下方使用相同的数据源,避免混淆
## 建议
**短期方案:**
1. 确认顶部显示的是什么数据(总收益 vs 可提取收益)
2. 修改文案,让用户理解数据含义
**长期方案:**
1. 规范后端接口返回的数据结构
2. 统一收益统计逻辑
3. 添加数据验证,确保一致性
## 相关文件
- 前端页面:`peidu/uniapp/src/provider-package/pages/provider/earnings.vue`
- 后端控制器:`peidu/backend/src/main/java/com/peidu/controller/ProviderController.java`
---
*诊断时间2026-01-31*