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:
parent
d1be7173be
commit
05e590ef04
|
|
@ -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}`,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue