# 收益数据不一致问题诊断 - 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 可提取收益(元) {{ withdrawableEarnings }} ``` ### 方案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*