From b905e8cb23c400b80a80f0294dacd9557cbfc705 Mon Sep 17 00:00:00 2001 From: hailin Date: Sun, 1 Mar 2026 10:01:36 -0800 Subject: [PATCH] =?UTF-8?q?fix(wallet):=20=E7=BB=9F=E8=AE=A1=E6=A6=82?= =?UTF-8?q?=E8=A7=88=E6=8E=92=E9=99=A4=20REWARD=5FTO=5FSETTLEABLE=20?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E8=AE=A1=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit REWARD_PENDING(入账) 和 REWARD_TO_SETTLEABLE(状态转换) 是同一笔收入 的两个阶段,统计时只应计入 REWARD_PENDING,排除 REWARD_TO_SETTLEABLE。 Co-Authored-By: Claude Opus 4.6 --- .../services/wallet-application.service.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) 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 3f787282..5ad25686 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 @@ -2673,13 +2673,15 @@ export class WalletApplicationService { } // 计算收支 - // 排除临时性流水类型(冻结/解冻),避免双重计算 + // 排除临时性流水类型(冻结/解冻)和状态转换类型,避免双重计算 // 例如:认种流程会产生 PLANT_FREEZE(-100) + PLANT_PAYMENT(-100),实际只支出 100 + // 例如:奖励流程会产生 REWARD_PENDING(+720) + REWARD_TO_SETTLEABLE(+720),实际只收入 720 const excludeFromStats = new Set([ - 'PLANT_FREEZE', // 认种冻结(临时) - 'PLANT_UNFREEZE', // 认种解冻(回滚) - 'FREEZE', // 通用冻结(临时) - 'UNFREEZE', // 通用解冻(回滚) + 'PLANT_FREEZE', // 认种冻结(临时) + 'PLANT_UNFREEZE', // 认种解冻(回滚) + 'FREEZE', // 通用冻结(临时) + 'UNFREEZE', // 通用解冻(回滚) + 'REWARD_TO_SETTLEABLE', // 待领取→可结算(状态转换,REWARD_PENDING 已计入) ]); let totalIncome = 0; @@ -2766,12 +2768,13 @@ export class WalletApplicationService { } // 填充数据 - // 排除临时性流水类型(冻结/解冻),避免双重计算 + // 排除临时性流水类型(冻结/解冻)和状态转换类型,避免双重计算 const excludeFromStats = new Set([ - 'PLANT_FREEZE', // 认种冻结(临时) - 'PLANT_UNFREEZE', // 认种解冻(回滚) - 'FREEZE', // 通用冻结(临时) - 'UNFREEZE', // 通用解冻(回滚) + 'PLANT_FREEZE', // 认种冻结(临时) + 'PLANT_UNFREEZE', // 认种解冻(回滚) + 'FREEZE', // 通用冻结(临时) + 'UNFREEZE', // 通用解冻(回滚) + 'REWARD_TO_SETTLEABLE', // 待领取→可结算(状态转换,REWARD_PENDING 已计入) ]); let periodIncome = 0;