fix(pre-planting): 修复可结算收益重复计算

pre-planting getMyRewards API 错误地将所有分配记录金额算作
settleableUsdt(包括 PENDING 状态的待领取奖励)。
预种奖励的 PENDING/SETTLEABLE 状态由 wallet-service 管理,
reward-service 的 getMyRewardSummary 已包含预种可结算部分,
不应重复累加。

修复:
- 后端 getMyRewards 返回 settleableUsdt: 0
- 前端"我"页面和"兑换"页面不再额外加预种 settleableUsdt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-03-01 03:34:22 -08:00
parent d1be7173be
commit 05e590ef04
3 changed files with 11 additions and 14 deletions

View File

@ -119,11 +119,14 @@ export class PrePlantingController {
// 只返回用户账户收到的奖励D 开头),排除系统账户 // 只返回用户账户收到的奖励D 开头),排除系统账户
const userEntries = entries.filter(e => e.recipientAccountSequence.startsWith('D')); const userEntries = entries.filter(e => e.recipientAccountSequence.startsWith('D'));
const settleableUsdt = userEntries.reduce((sum, e) => sum + e.usdtAmount, 0); // settleableUsdt 设为 0预种奖励的可结算状态由 wallet-service 管理,
// wallet-service 的 getSettleableRewards / getMyRewardSummary 已包含预种的可结算部分。
// pre_planting_reward_entries 只是分配记录,不反映实际的 PENDING/SETTLEABLE 状态。
// 之前错误地把所有分配记录的金额算作 settleableUsdt导致前端重复计算。
return { return {
summary: { summary: {
settleableUsdt, settleableUsdt: 0,
}, },
settleableRewards: userEntries.map(e => ({ settleableRewards: userEntries.map(e => ({
id: `pp-${e.sourceOrderNo}-${e.rightType}`, id: `pp-${e.sourceOrderNo}-${e.rightType}`,

View File

@ -842,7 +842,8 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
setState(() { setState(() {
_pendingUsdt = summary.pendingUsdt; _pendingUsdt = summary.pendingUsdt;
_pendingPower = summary.pendingHashpower; _pendingPower = summary.pendingHashpower;
_settleableUsdt = summary.settleableUsdt + prePlantingRewards.settleableUsdt; // wallet-service summary.settleableUsdt
_settleableUsdt = summary.settleableUsdt;
// 使 // 使
_settledUsdt = settledFromLedger; _settledUsdt = settledFromLedger;
_expiredUsdt = summary.expiredTotalUsdt; _expiredUsdt = summary.expiredTotalUsdt;

View File

@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import '../../../../core/di/injection_container.dart'; import '../../../../core/di/injection_container.dart';
import '../../../../core/services/pre_planting_service.dart';
import '../../../../routes/route_paths.dart'; import '../../../../routes/route_paths.dart';
/// ///
@ -39,33 +38,27 @@ class _TradingPageState extends ConsumerState<TradingPage> {
try { try {
debugPrint('[TradingPage] 开始加载数据...'); debugPrint('[TradingPage] 开始加载数据...');
// + + // reward-service settleableUsdt wallet-service
final rewardService = ref.read(rewardServiceProvider); final rewardService = ref.read(rewardServiceProvider);
final prePlantingService = ref.read(prePlantingServiceProvider);
final walletService = ref.read(walletServiceProvider); final walletService = ref.read(walletServiceProvider);
final results = await Future.wait([ final results = await Future.wait([
rewardService.getMyRewardSummary(), rewardService.getMyRewardSummary(),
prePlantingService.getMyRewards(),
walletService.getMyWallet(), walletService.getMyWallet(),
]); ]);
final summary = results[0] as dynamic; final summary = results[0] as dynamic;
final prePlantingRewards = results[1] as PrePlantingMyRewards; final wallet = results[1] as dynamic;
final wallet = results[2] as dynamic;
if (mounted) { if (mounted) {
setState(() { setState(() {
// + _settleableAmount = summary.settleableUsdt;
_settleableAmount = summary.settleableUsdt + prePlantingRewards.settleableUsdt;
_dstBalance = wallet.balances.dst.available; _dstBalance = wallet.balances.dst.available;
_usdtBalance = wallet.balances.usdt.available; _usdtBalance = wallet.balances.usdt.available;
_isLoading = false; _isLoading = false;
}); });
debugPrint('[TradingPage] 数据加载成功:'); debugPrint('[TradingPage] 数据加载成功:');
debugPrint('[TradingPage] 正常认种可结算: ${summary.settleableUsdt}'); debugPrint('[TradingPage] 可结算 USDT: $_settleableAmount');
debugPrint('[TradingPage] 预种可结算: ${prePlantingRewards.settleableUsdt}');
debugPrint('[TradingPage] 合计可结算 USDT: $_settleableAmount');
debugPrint('[TradingPage] DST 余额: $_dstBalance'); debugPrint('[TradingPage] DST 余额: $_dstBalance');
debugPrint('[TradingPage] USDT 余额: $_usdtBalance'); debugPrint('[TradingPage] USDT 余额: $_usdtBalance');
} }