fix(wallet): 统计概览排除 REWARD_TO_SETTLEABLE 避免重复计入

REWARD_PENDING(入账) 和 REWARD_TO_SETTLEABLE(状态转换) 是同一笔收入
的两个阶段,统计时只应计入 REWARD_PENDING,排除 REWARD_TO_SETTLEABLE。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-03-01 10:01:36 -08:00
parent ecaaf68a27
commit b905e8cb23
1 changed files with 13 additions and 10 deletions

View File

@ -2673,13 +2673,15 @@ export class WalletApplicationService {
} }
// 计算收支 // 计算收支
// 排除临时性流水类型(冻结/解冻),避免双重计算 // 排除临时性流水类型(冻结/解冻)和状态转换类型,避免双重计算
// 例如:认种流程会产生 PLANT_FREEZE(-100) + PLANT_PAYMENT(-100),实际只支出 100 // 例如:认种流程会产生 PLANT_FREEZE(-100) + PLANT_PAYMENT(-100),实际只支出 100
// 例如:奖励流程会产生 REWARD_PENDING(+720) + REWARD_TO_SETTLEABLE(+720),实际只收入 720
const excludeFromStats = new Set([ const excludeFromStats = new Set([
'PLANT_FREEZE', // 认种冻结(临时) 'PLANT_FREEZE', // 认种冻结(临时)
'PLANT_UNFREEZE', // 认种解冻(回滚) 'PLANT_UNFREEZE', // 认种解冻(回滚)
'FREEZE', // 通用冻结(临时) 'FREEZE', // 通用冻结(临时)
'UNFREEZE', // 通用解冻(回滚) 'UNFREEZE', // 通用解冻(回滚)
'REWARD_TO_SETTLEABLE', // 待领取→可结算状态转换REWARD_PENDING 已计入)
]); ]);
let totalIncome = 0; let totalIncome = 0;
@ -2766,12 +2768,13 @@ export class WalletApplicationService {
} }
// 填充数据 // 填充数据
// 排除临时性流水类型(冻结/解冻),避免双重计算 // 排除临时性流水类型(冻结/解冻)和状态转换类型,避免双重计算
const excludeFromStats = new Set([ const excludeFromStats = new Set([
'PLANT_FREEZE', // 认种冻结(临时) 'PLANT_FREEZE', // 认种冻结(临时)
'PLANT_UNFREEZE', // 认种解冻(回滚) 'PLANT_UNFREEZE', // 认种解冻(回滚)
'FREEZE', // 通用冻结(临时) 'FREEZE', // 通用冻结(临时)
'UNFREEZE', // 通用解冻(回滚) 'UNFREEZE', // 通用解冻(回滚)
'REWARD_TO_SETTLEABLE', // 待领取→可结算状态转换REWARD_PENDING 已计入)
]); ]);
let periodIncome = 0; let periodIncome = 0;