| | |
| | | String key = String.format(RedisConstants.GOOD_STOCK, goods.getId()); |
| | | RSemaphore semaphore = redissonClient.getSemaphore(key); |
| | | semaphore.trySetPermits(goods.getSurplus()); |
| | | return new GoodDetailVO(goods,recipient); |
| | | return new GoodDetailVO(goods, recipient); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Object goodExchange(GoodExchangeDTO goodExchange, Recipient recipient) { |
| | | public Boolean goodExchange(GoodExchangeDTO goodExchange, Recipient recipient) { |
| | | Integer number = goodExchange.getNumber(); |
| | | Integer goodId = goodExchange.getGoodId(); |
| | | TGoods good = this.getById(goodId); |
| | |
| | | // redisson分布式锁,防止超卖 |
| | | String key = String.format(RedisConstants.GOOD_STOCK, good.getId()); |
| | | RSemaphore semaphore = redissonClient.getSemaphore(key); |
| | | // 请求超时时间 单位:毫秒 |
| | | semaphore.trySetPermits(1000); |
| | | boolean tried = semaphore.tryAcquire(number); |
| | | // 兑换失败,库存不足 |
| | | if (!tried) { |