mitao
2024-05-31 fc13d832e58e42e241aa827e930651a28ca357e1
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -29,9 +29,11 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@@ -217,7 +219,7 @@
     */
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void returningStock(List<GoodsStockUpdDTO> goodsStockUpdDTOS) {
    public void updGoodsStock(List<GoodsStockUpdDTO> goodsStockUpdDTOS) {
        List<Long> goodsSkuIdList = goodsStockUpdDTOS.stream()
                .map(GoodsStockUpdDTO::getGoodsSkuId)
                .collect(Collectors.toList());
@@ -230,6 +232,10 @@
                .collect(Collectors.toMap(GoodsStockUpdDTO::getGoodsSkuId,
                        GoodsStockUpdDTO::getAuctionStock));
        for (GoodsSku skus : goodsSkus) {
            String goodsLock = "goods_lock:" + skus.getId();
            RLock redissonLock = redissonClient.getLock(goodsLock);
            try {
                redissonLock.lock(100, TimeUnit.SECONDS);
            Integer auctionStock = stockMap.get(skus.getId());
            if (StringUtils.isNotNull(auctionStock) && auctionStock > 0) {
                // 更新商品库存,更新五次失败抛出异常
@@ -246,6 +252,9 @@
                    throw new ServiceException("商品库存回退失败");
                }
            }
            } finally {
                redissonLock.unlock();
            }
        }
    }