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

127 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 收益数据不一致问题诊断 - 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*