fix(wallet): 统计排除 REWARD_SETTLED 避免三重计入

奖励流水三阶段 REWARD_PENDING → REWARD_TO_SETTLEABLE → REWARD_SETTLED
是同一笔钱的状态转换,只在 REWARD_PENDING 阶段计入收入。

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

View File

@ -2675,13 +2675,15 @@ export class WalletApplicationService {
// 计算收支
// 排除临时性流水类型(冻结/解冻)和状态转换类型,避免双重计算
// 例如:认种流程会产生 PLANT_FREEZE(-100) + PLANT_PAYMENT(-100),实际只支出 100
// 例如:奖励流程会产生 REWARD_PENDING(+720) + REWARD_TO_SETTLEABLE(+720),实际只收入 720
// 例如:奖励流程 REWARD_PENDING(+720) → REWARD_TO_SETTLEABLE(+720) → REWARD_SETTLED(+720)
// 是同一笔钱的三个阶段,只在 REWARD_PENDING 计入收入
const excludeFromStats = new Set([
'PLANT_FREEZE', // 认种冻结(临时)
'PLANT_UNFREEZE', // 认种解冻(回滚)
'FREEZE', // 通用冻结(临时)
'UNFREEZE', // 通用解冻(回滚)
'REWARD_TO_SETTLEABLE', // 待领取→可结算状态转换REWARD_PENDING 已计入)
'REWARD_SETTLED', // 可结算→结算到余额状态转换REWARD_PENDING 已计入)
]);
let totalIncome = 0;
@ -2775,6 +2777,7 @@ export class WalletApplicationService {
'FREEZE', // 通用冻结(临时)
'UNFREEZE', // 通用解冻(回滚)
'REWARD_TO_SETTLEABLE', // 待领取→可结算状态转换REWARD_PENDING 已计入)
'REWARD_SETTLED', // 可结算→结算到余额状态转换REWARD_PENDING 已计入)
]);
let periodIncome = 0;