From 7347c1c9d6addcf1ddd2abd97e1e4b721e79c835 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 13 Dec 2025 10:18:31 +0800 Subject: [PATCH] fix:【pay】pay_wallet 表,部分用户出现两条钱包记录问题,对应 https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/1475 --- yudao-module-pay/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/yudao-module-pay/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java b/yudao-module-pay/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java index 0005ace..58036ee 100644 --- a/yudao-module-pay/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java +++ b/yudao-module-pay/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java @@ -58,13 +58,22 @@ public class PayWalletServiceImpl implements PayWalletService { private PayRefundService refundService; @Override + @SneakyThrows public PayWalletDO getOrCreateWallet(Long userId, Integer userType) { PayWalletDO wallet = walletMapper.selectByUserIdAndType(userId, userType); if (wallet == null) { - wallet = new PayWalletDO().setUserId(userId).setUserType(userType) - .setBalance(0).setTotalExpense(0).setTotalRecharge(0); - wallet.setCreateTime(LocalDateTime.now()); - walletMapper.insert(wallet); + // 使用双重检查锁,保证钱包创建并发问题 + // https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/1475/files + wallet = lockRedisDAO.lock(userId, UPDATE_TIMEOUT_MILLIS, () -> { + PayWalletDO newWallet = walletMapper.selectByUserIdAndType(userId, userType); + if (newWallet == null) { + newWallet = new PayWalletDO().setUserId(userId).setUserType(userType) + .setBalance(0).setTotalExpense(0).setTotalRecharge(0); + newWallet.setCreateTime(LocalDateTime.now()); + walletMapper.insert(newWallet); + } + return newWallet; + }); } return wallet; } -- libgit2 0.21.4