浏览代码

优化库存处理

liujunchi 2 年之前
父节点
当前提交
420d978c34

+ 2 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dao/PortalOrderDao.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.portal.dao;
 
 import com.yonge.cooleshow.mbg.model.OmsOrderItem;
 import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
+import com.yonge.cooleshow.portal.domain.ProductStock;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -37,5 +38,5 @@ public interface PortalOrderDao {
      */
     int releaseSkuStockLock(@Param("itemList") List<OmsOrderItem> orderItemList);
 
-    int releaseProductStockLock(@Param("itemList") List<OmsOrderItem> orderItemList);
+    int releaseProductStockLock(@Param("itemList") List<ProductStock> orderItemList);
 }

+ 17 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -494,7 +494,23 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             //解除订单商品库存锁定
             if (!CollectionUtils.isEmpty(orderItemList)) {
                 portalOrderDao.releaseSkuStockLock(orderItemList);
-                portalOrderDao.releaseProductStockLock(orderItemList);
+                Map<Long, List<OmsOrderItem>> collect = orderItemList
+                        .stream()
+                        .collect(Collectors.groupingBy(OmsOrderItem::getProductId));
+                List<ProductStock> productStockList = new ArrayList<>();
+                for (Map.Entry<Long, List<OmsOrderItem>> entry : collect.entrySet()) {
+                    ProductStock stock = new ProductStock();
+                    stock.setProductId(entry.getKey());
+                    List<OmsOrderItem> value = entry.getValue();
+                    if (CollectionUtils.isEmpty(value)) {
+                        continue;
+                    }
+                    int sum = value.stream().mapToInt(OmsOrderItem::getProductQuantity).sum();
+                    stock.setStock(sum);
+                    productStockList.add(stock);
+                }
+
+                portalOrderDao.releaseProductStockLock(productStockList);
             }
             //修改优惠券使用状态
             // updateCouponStatus(cancelOrder.getCouponId(), cancelOrder.getMemberId(), 0);

+ 2 - 1
cooleshow-mall/mall-portal/src/main/resources/config/mybatis/PortalOrderDao.xml

@@ -94,12 +94,13 @@
         </foreach>
     </update>
 
+
     <update id="releaseProductStockLock">
         UPDATE pms_product
         SET
         lock_stock = CASE id
         <foreach collection="itemList" item="item">
-            WHEN #{item.productId} THEN lock_stock - #{item.productQuantity}
+            WHEN #{item.productId} THEN lock_stock - #{item.stock}
         </foreach>
         END
         WHERE