| | |
| | | RLock lock = null; |
| | | try { |
| | | lock = redissonClient.getLock(LOCK_COUPON_VIRTUAL_CARD_ID + cardId); |
| | | lock.lock(); |
| | | LambdaQueryWrapper<CouponVirtual> forUpdate = Wrappers.<CouponVirtual>lambdaQuery().eq(CouponVirtual::getId, cardId).last("FOR UPDATE"); |
| | | CouponVirtual cardInfo = this.getOne(forUpdate); |
| | | if (cardInfo == null) { |
| | |
| | | } |
| | | return Result.ok().data(cardInfo.getCouponId()); |
| | | } finally { |
| | | assert lock != null; |
| | | if (lock.isHeldByCurrentThread()) { |
| | | if ( lock != null && lock.isHeldByCurrentThread()) { |
| | | lock.unlock(); |
| | | } |
| | | } |