fix(mobile): 预种可结算列表以wallet实际金额为准,避免已结算条目残留
planting-service 的分配记录不跟踪 wallet 端的结算状态, 原来的反向排除法(排除PENDING+EXPIRED)无法处理: 1. 已结算到余额(SETTLED→余额)的条目 2. hasPlanted=true 后直接进可结算、不经 pending_rewards 的条目 改为以 walletInfo.rewards.settleableUsdt 为权威来源: - settleableUsdt=0 时直接跳过(已全部结算到余额) - settleableUsdt>0 时按金额截断,确保展示总额不超过实际可结算 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
eba125901c
commit
31e6f9e15a
|
|
@ -801,39 +801,52 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
|
||||||
|
|
||||||
// [2026-03-01] 合并预种可结算奖励到列表中
|
// [2026-03-01] 合并预种可结算奖励到列表中
|
||||||
// pre-planting/my-rewards 返回所有分配记录(不区分状态),
|
// pre-planting/my-rewards 返回所有分配记录(不区分状态),
|
||||||
// 但部分条目可能实际处于 PENDING 状态(用户未认种时)。
|
// 需要排除 PENDING、EXPIRED 和已结算到余额的条目,只保留真正可结算的。
|
||||||
// 需要排除 PENDING 和 EXPIRED 状态的条目,只保留真正可结算的。
|
//
|
||||||
final pendingPplOrderIds = walletPendingRewards
|
// 策略:以 wallet 的 settleableUsdt 为权威来源。
|
||||||
.where((r) => r.isPrePlanting)
|
// 如果 settleableUsdt=0(已全部结算到余额),直接跳过,不显示任何预种可结算条目。
|
||||||
.map((r) => r.sourceOrderId)
|
// 如果 settleableUsdt>0,排除 PENDING + EXPIRED 的条目后,
|
||||||
.toSet();
|
// 按金额截断,确保展示总额不超过 wallet 实际可结算金额。
|
||||||
final expiredPplOrderIds = expiredRewards
|
final walletSettleableUsdt = walletInfo.rewards.settleableUsdt;
|
||||||
.where((r) => r.sourceOrderId.startsWith('PPL'))
|
List<SettleableRewardItem> prePlantingSettleable = [];
|
||||||
.map((r) => r.sourceOrderId)
|
|
||||||
.toSet();
|
if (walletSettleableUsdt > 0) {
|
||||||
final excludedPplOrderIds = {...pendingPplOrderIds, ...expiredPplOrderIds};
|
final pendingPplOrderIds = walletPendingRewards
|
||||||
final prePlantingSettleable = prePlantingRewards.settleableRewards
|
.where((r) => r.isPrePlanting)
|
||||||
.where((r) => !excludedPplOrderIds.contains(r.sourceOrderNo))
|
.map((r) => r.sourceOrderId)
|
||||||
.map((r) {
|
.toSet();
|
||||||
final srcAcct = r.sourceAccountSequence;
|
final expiredPplOrderIds = expiredRewards
|
||||||
final memoSuffix = (srcAcct != null && srcAcct.isNotEmpty)
|
.where((r) => r.sourceOrderId.startsWith('PPL'))
|
||||||
? ':来自${srcAcct}的预种'
|
.map((r) => r.sourceOrderId)
|
||||||
: '';
|
.toSet();
|
||||||
return SettleableRewardItem(
|
final excludedPplOrderIds = {...pendingPplOrderIds, ...expiredPplOrderIds};
|
||||||
id: r.id,
|
|
||||||
rightType: r.rightType,
|
double accumulatedUsdt = 0;
|
||||||
usdtAmount: r.usdtAmount,
|
for (final r in prePlantingRewards.settleableRewards) {
|
||||||
hashpowerAmount: r.hashpowerAmount,
|
if (excludedPplOrderIds.contains(r.sourceOrderNo)) continue;
|
||||||
createdAt: r.createdAt,
|
if (accumulatedUsdt + r.usdtAmount > walletSettleableUsdt + 0.01) break;
|
||||||
claimedAt: null,
|
accumulatedUsdt += r.usdtAmount;
|
||||||
sourceOrderNo: r.sourceOrderNo,
|
|
||||||
sourceAccountSequence: r.sourceAccountSequence,
|
final srcAcct = r.sourceAccountSequence;
|
||||||
memo: '[预种] ${r.memo}$memoSuffix',
|
final memoSuffix = (srcAcct != null && srcAcct.isNotEmpty)
|
||||||
);
|
? ':来自${srcAcct}的预种'
|
||||||
})
|
: '';
|
||||||
.toList();
|
prePlantingSettleable.add(SettleableRewardItem(
|
||||||
|
id: r.id,
|
||||||
|
rightType: r.rightType,
|
||||||
|
usdtAmount: r.usdtAmount,
|
||||||
|
hashpowerAmount: r.hashpowerAmount,
|
||||||
|
createdAt: r.createdAt,
|
||||||
|
claimedAt: null,
|
||||||
|
sourceOrderNo: r.sourceOrderNo,
|
||||||
|
sourceAccountSequence: r.sourceAccountSequence,
|
||||||
|
memo: '[预种] ${r.memo}$memoSuffix',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
settleableRewards = [...settleableRewards, ...prePlantingSettleable];
|
settleableRewards = [...settleableRewards, ...prePlantingSettleable];
|
||||||
debugPrint('[ProfilePage] 预种可结算奖励: ${prePlantingSettleable.length} 条 (排除 ${pendingPplOrderIds.length} 条 PENDING, ${expiredPplOrderIds.length} 条 EXPIRED)');
|
debugPrint('[ProfilePage] 预种可结算奖励: ${prePlantingSettleable.length} 条 (walletSettleableUsdt=$walletSettleableUsdt)');
|
||||||
|
|
||||||
// [2026-03-01] 合并预种待领取奖励到列表中
|
// [2026-03-01] 合并预种待领取奖励到列表中
|
||||||
// wallet-service 的 pending_rewards 表包含正常认种 + 预种的待领取记录,
|
// wallet-service 的 pending_rewards 表包含正常认种 + 预种的待领取记录,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue