diff --git a/backend/services/wallet-service/src/application/services/wallet-application.service.ts b/backend/services/wallet-service/src/application/services/wallet-application.service.ts index 5ad25686..d301dfa8 100644 --- a/backend/services/wallet-service/src/application/services/wallet-application.service.ts +++ b/backend/services/wallet-service/src/application/services/wallet-application.service.ts @@ -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;