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