From 69b8427aa15998e9e67a80dc1f8489f1fb8f93de Mon Sep 17 00:00:00 2001
From: dy-hu <dy-hu@haihangyun.com>
Date: Wed, 19 Jun 2024 21:36:49 +0800
Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=9F=8E=E5=89=8D=E7=AB=AF=E3=80=81?=
 =?UTF-8?q?=E5=90=8E=E5=8F=B0=E8=AE=A2=E5=8D=95=E6=8F=90=E4=BA=A4=E4=B8=9A?=
 =?UTF-8?q?=E5=8A=A1=E6=96=B0=E5=A2=9E=E4=B8=8B=E5=8D=95=E5=95=86=E5=93=81?=
 =?UTF-8?q?=E6=98=AF=E5=90=A6=E4=B8=8A=E6=9E=B6=E6=A0=A1=E9=AA=8C=E4=B8=9A?=
 =?UTF-8?q?=E5=8A=A1=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../cereshop/app/dao/product/CereProductSkuDAO.java    |  8 ++++----
 .../service/order/impl/CereShopOrderServiceImpl.java   | 18 ++++++++++++++----
 .../app/service/product/CereProductSkuService.java     |  7 +++----
 .../product/impl/CereProductSkuServiceImpl.java        |  9 +++++----
 .../mybatis/mapper/product/CereProductSkuDAO.xml       |  6 ++++++
 5 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/dao/product/CereProductSkuDAO.java b/cereshop-app/src/main/java/com/shop/cereshop/app/dao/product/CereProductSkuDAO.java
index 6b82a82..2e4b8fc 100644
--- a/cereshop-app/src/main/java/com/shop/cereshop/app/dao/product/CereProductSkuDAO.java
+++ b/cereshop-app/src/main/java/com/shop/cereshop/app/dao/product/CereProductSkuDAO.java
@@ -9,11 +9,8 @@ import com.shop.cereshop.app.page.cart.CartSku;
 import com.shop.cereshop.app.page.product.*;
 import com.shop.cereshop.app.param.groupwork.GroupWorkSettlementParam;
 import com.shop.cereshop.app.param.settlement.ProductSku;
-import com.shop.cereshop.commons.domain.product.CereProductSku;
+import com.shop.cereshop.commons.domain.product.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.shop.cereshop.commons.domain.product.Sku;
-import com.shop.cereshop.commons.domain.product.SkuName;
-import com.shop.cereshop.commons.domain.product.SkuValue;
 import com.shop.cereshop.commons.domain.tool.CereComposeSkuInfo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -110,4 +107,7 @@ public interface CereProductSkuDAO extends BaseMapper<CereProductSku> {
 
     List<CereProductSku> selectSceneTypeList(@Param("shopId") Long shopId,
                                              @Param("sceneType") Integer sceneType);
+
+    CereShopProduct findShopProdBySkuId(@Param("skuId") Long skuId);
+
 }
diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/service/order/impl/CereShopOrderServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/service/order/impl/CereShopOrderServiceImpl.java
index f351fd9..213878b 100644
--- a/cereshop-app/src/main/java/com/shop/cereshop/app/service/order/impl/CereShopOrderServiceImpl.java
+++ b/cereshop-app/src/main/java/com/shop/cereshop/app/service/order/impl/CereShopOrderServiceImpl.java
@@ -9,6 +9,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -125,10 +126,7 @@ import com.shop.cereshop.commons.domain.order.CereOrderReconciliation;
 import com.shop.cereshop.commons.domain.order.CereShopOrder;
 import com.shop.cereshop.commons.domain.pay.CerePayLog;
 import com.shop.cereshop.commons.domain.platformtool.*;
-import com.shop.cereshop.commons.domain.product.CereCommentWord;
-import com.shop.cereshop.commons.domain.product.CereProductMember;
-import com.shop.cereshop.commons.domain.product.CereProductSku;
-import com.shop.cereshop.commons.domain.product.CereProductStatsByDay;
+import com.shop.cereshop.commons.domain.product.*;
 import com.shop.cereshop.commons.domain.scene.CereShopScene;
 import com.shop.cereshop.commons.domain.scene.CereShopSceneMember;
 import com.shop.cereshop.commons.domain.sensitive.CerePlatformSensitive;
@@ -399,6 +397,18 @@ public class CereShopOrderServiceImpl implements CereShopOrderService {
         }else if (param.getPaymentMode() == null) {
             param.setPaymentMode(PayConfig.paymentMode);
         }
+        //校验商品是否有效(非上架商品为无效)
+        if (ObjectUtils.isNotEmpty(param.getShops())){
+            for (OrderProductParam shop : param.getShops()) {
+                for (ProductSku productSku : shop.getSkus()) {
+                    CereShopProduct product = cereProductSkuService.findShopProdBySkuId(productSku.getSkuId());
+                    if (product.getShelveState() != 1){
+                        throw new CoBusinessException(CoReturnFormat.HAVE_INVALID_PRODUCT);
+                    }
+
+                }
+            }
+        }
         //额外的校验
         PlaceOrderTemplate placeOrderTemplate = placeOrderFactory.getPlaceOrderTemplate(param.getType());
         return placeOrderTemplate.placeOrder(param, user, ip, time);
diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/CereProductSkuService.java b/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/CereProductSkuService.java
index 17d10a2..0ba64ba 100644
--- a/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/CereProductSkuService.java
+++ b/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/CereProductSkuService.java
@@ -9,10 +9,7 @@ import com.shop.cereshop.app.page.cart.CartSku;
 import com.shop.cereshop.app.page.product.*;
 import com.shop.cereshop.app.param.groupwork.GroupWorkSettlementParam;
 import com.shop.cereshop.app.param.settlement.ProductSku;
-import com.shop.cereshop.commons.domain.product.CereProductSku;
-import com.shop.cereshop.commons.domain.product.Sku;
-import com.shop.cereshop.commons.domain.product.SkuName;
-import com.shop.cereshop.commons.domain.product.SkuValue;
+import com.shop.cereshop.commons.domain.product.*;
 import com.shop.cereshop.commons.exception.CoBusinessException;
 
 import java.util.List;
@@ -85,4 +82,6 @@ public interface CereProductSkuService {
     int rollbackStock(Long skuId, Integer buyNumber);
 
     List<SkuValue> findSkuValueBySkuId(String skuName, Long skuId);
+
+    CereShopProduct findShopProdBySkuId(Long skuId);
 }
diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereProductSkuServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereProductSkuServiceImpl.java
index 7cb1520..a107954 100644
--- a/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereProductSkuServiceImpl.java
+++ b/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereProductSkuServiceImpl.java
@@ -11,10 +11,7 @@ import com.shop.cereshop.app.page.product.*;
 import com.shop.cereshop.app.param.groupwork.GroupWorkSettlementParam;
 import com.shop.cereshop.app.param.settlement.ProductSku;
 import com.shop.cereshop.app.service.product.CereProductSkuService;
-import com.shop.cereshop.commons.domain.product.CereProductSku;
-import com.shop.cereshop.commons.domain.product.Sku;
-import com.shop.cereshop.commons.domain.product.SkuName;
-import com.shop.cereshop.commons.domain.product.SkuValue;
+import com.shop.cereshop.commons.domain.product.*;
 import com.shop.cereshop.commons.exception.CoBusinessException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -200,4 +197,8 @@ public class CereProductSkuServiceImpl implements CereProductSkuService {
         return cereProductSkuDAO.findSkuValueBySkuId(skuName, skuId);
     }
 
+    @Override
+    public CereShopProduct findShopProdBySkuId(Long skuId) {
+        return cereProductSkuDAO.findShopProdBySkuId(skuId);
+    }
 }
diff --git a/cereshop-app/src/main/resources/mybatis/mapper/product/CereProductSkuDAO.xml b/cereshop-app/src/main/resources/mybatis/mapper/product/CereProductSkuDAO.xml
index 23c5621..9f619b8 100644
--- a/cereshop-app/src/main/resources/mybatis/mapper/product/CereProductSkuDAO.xml
+++ b/cereshop-app/src/main/resources/mybatis/mapper/product/CereProductSkuDAO.xml
@@ -613,4 +613,10 @@
     join cere_sku_real_info b on b.sku_id = a.sku_id and b.activity_type = #{sceneType}
     join cere_shop_product c on b.product_id = c.product_id and c.shop_id = #{shopId} and c.shelve_state = 1
   </select>
+
+  <select id="findShopProdBySkuId" resultType="com.shop.cereshop.commons.domain.product.CereShopProduct">
+    SELECT csp.* from cere_shop_product csp
+    join cere_product_sku cps on csp.product_id = cps.product_id
+    where cps.sku_id = #{skuId}
+  </select>
 </mapper>