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

3.1 KiB
Raw Permalink Blame History

收益数据不一致问题诊断 - 2026-01-31

问题描述

收益查看页面显示的数据不一致:

  • 顶部"总收益"¥222
  • 下方"本月总收益"¥1774

问题原因

数据来源

1. 顶部"总收益"¥222

// 调用接口
GET /api/provider/earnings/stats?type=overview

// 使用字段
totalEarnings = res.data.totalEarnings

2. 下方"本月总收益"¥1774

// 调用接口
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. 检查后端接口返回

# 查看overview接口返回
GET /api/provider/earnings/stats?type=overview

# 查看month接口返回
GET /api/provider/earnings/stats?type=month

2. 检查数据库数据

-- 查看服务商的所有订单收益
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修改前端显示逻辑推荐

将顶部的"总收益"改为"可提取收益",更符合实际业务逻辑

<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