From fc13d832e58e42e241aa827e930651a28ca357e1 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 31 五月 2024 11:48:43 +0800
Subject: [PATCH] Merge branch 'mitao-dev'

---
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java |   37 +++++++++++++++++++++++--------------
 1 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
index 5427e04..b40685d 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
+++ b/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,21 +232,28 @@
                 .collect(Collectors.toMap(GoodsStockUpdDTO::getGoodsSkuId,
                         GoodsStockUpdDTO::getAuctionStock));
         for (GoodsSku skus : goodsSkus) {
-            Integer auctionStock = stockMap.get(skus.getId());
-            if (StringUtils.isNotNull(auctionStock) && auctionStock > 0) {
-                // 更新商品库存,更新五次失败抛出异常
-                boolean isUpdated = false;
-                for (int i = 0; i < 5; i++) {
-                    isUpdated = updateGoodsStock(skus, auctionStock);
-                    if (isUpdated) {
-                        break;
-                    } else {
-                        skus = this.getById(skus.getId());
+            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) {
+                    // 更新商品库存,更新五次失败抛出异常
+                    boolean isUpdated = false;
+                    for (int i = 0; i < 5; i++) {
+                        isUpdated = updateGoodsStock(skus, auctionStock);
+                        if (isUpdated) {
+                            break;
+                        } else {
+                            skus = this.getById(skus.getId());
+                        }
+                    }
+                    if (!isUpdated) {
+                        throw new ServiceException("商品库存回退失败");
                     }
                 }
-                if (!isUpdated) {
-                    throw new ServiceException("商品库存回退失败");
-                }
+            } finally {
+                redissonLock.unlock();
             }
         }
 

--
Gitblit v1.7.1