فهرست منبع

Merge remote-tracking branch 'origin/zx_saas_goods' into zx_saas_goods

zouxuan 1 سال پیش
والد
کامیت
c1f1c5ff2d

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -1200,7 +1200,18 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			goods.setStockCount(updateStock);
 			updateGoods.add(goods);
 		}
-		goodsDao.updateStock(updateGoods);
+		// 处理同一个商品,多个子商品同时更新库存,取最小的库存
+		Map<Integer, Optional<Goods>> collect = updateGoods.stream().collect(Collectors.groupingBy(Goods::getId, Collectors.minBy(Comparator.comparingInt(Goods::getStockCount))));
+		List<Goods> collect1 = collect.entrySet().stream().map(next -> {
+			if (next.getValue().isPresent()) {
+				Goods goods = new Goods();
+				goods.setId(next.getKey());
+				goods.setStockCount(next.getValue().get().getStockCount());
+				return goods;
+			}
+			return null;
+		}).filter(Objects::nonNull).collect(Collectors.toList());
+		goodsDao.updateStock(collect1);
 		return true;
 	}
 

+ 3 - 0
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/PmsPortalProductService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.portal.service;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.yonge.cooleshow.mbg.model.PmsProduct;
+import com.yonge.cooleshow.mbg.model.PmsSkuStock;
 import com.yonge.cooleshow.portal.domain.PmsPortalProductDetail;
 import com.yonge.cooleshow.portal.domain.PmsProductCategoryNode;
 import com.yonge.cooleshow.portal.dto.ProductSearchConditionVo;
@@ -20,6 +21,8 @@ public interface PmsPortalProductService {
      */
     List<PmsProduct> search(String keyword, Long brandId, Long productCategoryId, Long productAttributeCategoryId, Integer pageNum, Integer pageSize, Integer sort);
 
+    List<PmsSkuStock> updateProductSkuStock(List<PmsSkuStock> skuStocks);
+
     List<PmsProduct> updateProductStock(List<PmsProduct> pmsProducts);
 
     /**

+ 16 - 8
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsCartItemServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.portal.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import com.beust.jcommander.internal.Lists;
 import com.ym.mec.common.exception.BizException;
 import com.yonge.cooleshow.mbg.mapper.OmsCartItemMapper;
 import com.yonge.cooleshow.mbg.mapper.PmsProductMapper;
@@ -11,6 +12,7 @@ import com.yonge.cooleshow.portal.domain.CartProduct;
 import com.yonge.cooleshow.portal.domain.CartPromotionItem;
 import com.yonge.cooleshow.portal.service.OmsCartItemService;
 import com.yonge.cooleshow.portal.service.OmsPromotionService;
+import com.yonge.cooleshow.portal.service.PmsPortalProductService;
 import com.yonge.cooleshow.portal.service.UmsMemberService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -44,6 +46,9 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
     @Autowired
     private PmsSkuStockMapper skuStockMapper;
 
+    @Autowired
+    private PmsPortalProductService portalProductService;
+
     @Override
     public OmsCartItem add(OmsCartItem cartItem) {
         UmsMember currentMember;
@@ -66,14 +71,14 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
         }
 
         PmsSkuStock pmsSkuStock = skuStockMapper.selectByPrimaryKey(cartItem.getProductSkuId());
-        if (pmsSkuStock == null) {
-            throw new BizException("商品规格不存在");
+        if (pmsSkuStock == null|| pmsSkuStock.getDeleteStatus() == 1) {
+            throw new BizException("商品已下架");
         }
         if (existCartItem == null) {
             PmsProduct pmsProduct = pmsProductMapper.selectByPrimaryKey(cartItem.getProductId());
 
-            if (pmsProduct == null) {
-                throw new BizException("商品不存在");
+            if (pmsProduct == null || pmsProduct.getDeleteStatus() == 1) {
+                throw new BizException("商品已下架");
             }
             cartItem.setPrice(pmsProduct.getPrice());
             cartItem.setProductPic(pmsProduct.getPic());
@@ -135,6 +140,8 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
         PmsSkuStockExample skuExample = new PmsSkuStockExample();
         skuExample.createCriteria().andIdIn(skuIds).andDeleteStatusEqualTo(0);
         List<PmsSkuStock> pmsSkuStocks = skuStockMapper.selectByExample(skuExample);
+
+        pmsSkuStocks = portalProductService.updateProductSkuStock(pmsSkuStocks);
         Map<Long, List<PmsSkuStock>> collect =
                 pmsSkuStocks.stream().collect(Collectors.groupingBy(PmsSkuStock::getId));
         for (OmsCartItem omsCartItem : omsCartItems) {
@@ -178,10 +185,11 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
         }
 
         PmsSkuStock pmsSkuStock = skuStockMapper.selectByPrimaryKey(omsCartItem.getProductSkuId());
-
-        if (pmsSkuStock.getStock() - pmsSkuStock.getLockStock() < quantity) {
-            return pmsSkuStock.getStock() - pmsSkuStock.getLockStock();
-        }
+        List<PmsSkuStock> pmsSkuStocks = portalProductService.updateProductSkuStock(Lists.newArrayList(pmsSkuStock));
+        pmsSkuStock = pmsSkuStocks.get(0);
+//        if (pmsSkuStock.getStock() - pmsSkuStock.getLockStock() < quantity) {
+//            return pmsSkuStock.getStock() - pmsSkuStock.getLockStock();
+//        }
 
         OmsCartItemExample example = new OmsCartItemExample();
         example.createCriteria().andDeleteStatusEqualTo(0)

+ 16 - 0
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -206,6 +206,22 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             orderItem.setIntegrationAmount(new BigDecimal(0));
             orderItemList.add(orderItem);
         }
+        // 判断是否存在被删除的商品 和sku 如果有被删除的商品或者sku则不允许下单
+        List<Long> productIds = orderItemList.stream().map(OmsOrderItem::getProductId).collect(Collectors.toList());
+        PmsProductExample pmsProductExample = new PmsProductExample();
+        pmsProductExample.createCriteria().andIdIn(productIds).andDeleteStatusEqualTo(1);
+        List<PmsProduct> pmsProducts = pmsProductMapper.selectByExample(pmsProductExample);
+        if (CollUtil.isNotEmpty(pmsProducts)) {
+            throw new BizException("商品已下架");
+        }
+        List<Long> skuIds = orderItemList.stream().map(OmsOrderItem::getProductSkuId).collect(Collectors.toList());
+        PmsSkuStockExample pmsSkuStockExample = new PmsSkuStockExample();
+        pmsSkuStockExample.createCriteria().andIdIn(skuIds).andDeleteStatusEqualTo(1);
+        List<PmsSkuStock> pmsSkuStocks = skuStockMapper.selectByExample(pmsSkuStockExample);
+        if (CollUtil.isNotEmpty(pmsSkuStocks)) {
+            throw new BizException("商品已下架");
+        }
+
         //判断购物车中商品是否都有库存
 
         BigDecimal couponAmount = BigDecimal.ZERO;

+ 11 - 1
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPromotionServiceImpl.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.portal.dao.PortalProductDao;
 import com.yonge.cooleshow.portal.domain.CartPromotionItem;
 import com.yonge.cooleshow.portal.domain.PromotionProduct;
 import com.yonge.cooleshow.portal.service.OmsPromotionService;
+import com.yonge.cooleshow.portal.service.PmsPortalProductService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -25,6 +26,9 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
     @Autowired
     private PortalProductDao portalProductDao;
 
+    @Autowired
+    private PmsPortalProductService portalProductService;
+
     @Override
     public List<CartPromotionItem> calcCartPromotion(List<OmsCartItem> cartItemList) {
         //1.先根据productId对CartItem进行分组,以spu为单位进行计算优惠
@@ -136,7 +140,13 @@ public class OmsPromotionServiceImpl implements OmsPromotionService {
         for(OmsCartItem cartItem:cartItemList){
             productIdList.add(cartItem.getProductId());
         }
-        return portalProductDao.getPromotionProductList(productIdList);
+        List<PromotionProduct> promotionProductList = portalProductDao.getPromotionProductList(productIdList);
+        for (PromotionProduct promotionProduct : promotionProductList) {
+            List<PmsSkuStock> pmsSkuStocks = portalProductService.updateProductSkuStock(promotionProduct.getSkuStockList());
+            promotionProduct.setSkuStockList(pmsSkuStocks);
+        }
+
+        return promotionProductList;
     }
 
     /**

+ 1 - 1
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/PmsPortalProductServiceImpl.java

@@ -11,7 +11,6 @@ import com.yonge.cooleshow.mbg.model.*;
 import com.yonge.cooleshow.portal.dao.PortalProductDao;
 import com.yonge.cooleshow.portal.domain.PmsPortalProductDetail;
 import com.yonge.cooleshow.portal.domain.PmsProductCategoryNode;
-import com.yonge.cooleshow.portal.domain.ProductStock;
 import com.yonge.cooleshow.portal.dto.ProductCategorySmallVo;
 import com.yonge.cooleshow.portal.dto.ProductSearchConditionVo;
 import com.yonge.cooleshow.portal.dto.ShareProductVo;
@@ -110,6 +109,7 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
 
     }
 
+    @Override
     public List<PmsSkuStock> updateProductSkuStock(List<PmsSkuStock> skuStocks) {
         if (CollectionUtils.isEmpty(skuStocks)) {
             return new ArrayList<>();