【同步】BOOT 和 CLOUD 的功能
This commit is contained in:
@@ -51,7 +51,7 @@ public class PayWalletRechargeController {
|
||||
public CommonResult<Boolean> updateWalletRechargeRefunded(@RequestBody PayRefundNotifyReqDTO notifyReqDTO) {
|
||||
walletRechargeService.updateWalletRechargeRefunded(
|
||||
Long.valueOf(notifyReqDTO.getMerchantOrderId()),
|
||||
Long.valueOf(notifyReqDTO.getMerchantRefundId()),
|
||||
notifyReqDTO.getMerchantRefundId(),
|
||||
notifyReqDTO.getPayRefundId());
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@@ -56,9 +56,9 @@ public interface PayWalletRechargeService {
|
||||
* 更新钱包充值记录为已退款
|
||||
*
|
||||
* @param id 钱包充值记录编号
|
||||
* @param refundId 钱包充值退款编号(实际和 id 相同)
|
||||
* @param refundId 钱包充值退款编号(格式:{id}-refund)
|
||||
* @param payRefundId 退款单id
|
||||
*/
|
||||
void updateWalletRechargeRefunded(Long id, Long refundId, Long payRefundId);
|
||||
void updateWalletRechargeRefunded(Long id, String refundId, Long payRefundId);
|
||||
|
||||
}
|
||||
|
||||
@@ -220,9 +220,8 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateWalletRechargeRefunded(Long id, Long refundId, Long payRefundId) {
|
||||
public void updateWalletRechargeRefunded(Long id, String refundId, Long payRefundId) {
|
||||
// 1.1 获取钱包充值记录
|
||||
// 说明:因为 id 和 refundId 是相同的,所以直接使用 id 查询即可!
|
||||
PayWalletRechargeDO walletRecharge = walletRechargeMapper.selectById(id);
|
||||
if (walletRecharge == null) {
|
||||
log.error("[updateWalletRechargerPaid][钱包充值记录不存在,钱包充值记录 id({})]", id);
|
||||
@@ -274,8 +273,8 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService {
|
||||
walletRecharge.getId(), payRefundId, toJsonString(walletRecharge), toJsonString(payRefund));
|
||||
throw exception(WALLET_RECHARGE_REFUND_FAIL_REFUND_PRICE_NOT_MATCH);
|
||||
}
|
||||
// 2.3 校验退款订单商户订单是否匹配
|
||||
if (notEqual(payRefund.getMerchantRefundId(), walletRecharge.getId().toString())) {
|
||||
// 2.3 校验退款订单商户退款单是否匹配
|
||||
if (notEqual(payRefund.getMerchantRefundId(), walletRecharge.getId() + "-refund")) {
|
||||
log.error("[validateWalletRechargeCanRefunded][钱包({}) 退款单不匹配({}),请进行处理!payRefund 数据是:{}]",
|
||||
walletRecharge.getId(), payRefundId, toJsonString(payRefund));
|
||||
throw exception(WALLET_RECHARGE_REFUND_FAIL_REFUND_ORDER_ID_ERROR);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user