From 712d76307f323db8c96f0e0c71b16efef4abe95f Mon Sep 17 00:00:00 2001 From: zhx Date: Mon, 20 Jul 2026 16:48:19 +0800 Subject: [PATCH] feat: include pre-withdrawal balance in review --- .../wallet/app/command/bank/UserBankWithdrawCmdExe.java | 2 ++ .../wallet/app/integration/HyAppWithdrawalReviewClient.java | 4 ++++ .../mongo/entity/bank/UserBankWithdrawMoneyApply.java | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankWithdrawCmdExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankWithdrawCmdExe.java index e550868c..a71f7ea8 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankWithdrawCmdExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankWithdrawCmdExe.java @@ -133,6 +133,8 @@ public class UserBankWithdrawCmdExe { .setBankCardId(bankCard.getId()) .setBankCardType(bankCard.getCardType()) .setAmount(cmd.getAmount()) + // balance 在扣款前读取并完成充足性校验;固化到申请文档后,异步重试始终投递同一份财务快照。 + .setBalanceBefore(balance) .setAmountType(salaryType.getCode()) .setApprovalProcesses(List.of( new UserBankWithdrawMoneyApprovalProcess() diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/integration/HyAppWithdrawalReviewClient.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/integration/HyAppWithdrawalReviewClient.java index 85e0483e..cd238fe0 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/integration/HyAppWithdrawalReviewClient.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/integration/HyAppWithdrawalReviewClient.java @@ -75,6 +75,10 @@ public class HyAppWithdrawalReviewClient { payload.put("salaryAssetType", apply.getAmountType()); payload.put("withdrawAmount", normalizedAmount.toPlainString()); payload.put("withdrawAmountMinor", amountMinor); + if (apply.getBalanceBefore() != null) { + // 审核展示必须使用扣款前快照;不能在定时投递时重新查询已经扣减或退款后的余额。 + payload.put("balanceBefore", apply.getBalanceBefore().stripTrailingZeros().toPlainString()); + } payload.put("withdrawMethod", bankCard.getCardType()); payload.put("withdrawAddress", bankCard.getCardNo()); payload.put("createdAtMs", apply.getCreateTime().getTime()); diff --git a/rc-service/rc-service-wallet/wallet-infrastructure/src/main/java/com/red/circle/wallet/infra/database/mongo/entity/bank/UserBankWithdrawMoneyApply.java b/rc-service/rc-service-wallet/wallet-infrastructure/src/main/java/com/red/circle/wallet/infra/database/mongo/entity/bank/UserBankWithdrawMoneyApply.java index 6c08b343..fdb5c4d1 100644 --- a/rc-service/rc-service-wallet/wallet-infrastructure/src/main/java/com/red/circle/wallet/infra/database/mongo/entity/bank/UserBankWithdrawMoneyApply.java +++ b/rc-service/rc-service-wallet/wallet-infrastructure/src/main/java/com/red/circle/wallet/infra/database/mongo/entity/bank/UserBankWithdrawMoneyApply.java @@ -66,6 +66,11 @@ public class UserBankWithdrawMoneyApply implements Serializable { */ private BigDecimal amount; + /** + * 提交提现前的可用余额快照;只记录申请时事实,审核页不能用之后变化的当前余额替代. + */ + private BigDecimal balanceBefore; + /** * 金额类型:MONEY(美金政策)、SALARY_DIAMOND(工资钻石政策) */