Commit 330fa3a2974cb36eb81bce68485fbc1963586668

Authored by 芋道源码
Committed by GitHub
2 parents 9b5241dd a83a9e04

Merge pull request #1234 from dadiyang/fix/product-sku-empty-properties

[ENHANCE]
yudao-module-mall/yudao-module-product/src/main/java/cn/iocoder/yudao/module/product/enums/ErrorCodeConstants.java
@@ -45,6 +45,7 @@ public interface ErrorCodeConstants { @@ -45,6 +45,7 @@ public interface ErrorCodeConstants {
45 ErrorCode SPU_ATTR_NUMBERS_MUST_BE_EQUALS = new ErrorCode(1_008_006_002, "一个 SPU 下的每个 SKU,其属性项必须一致"); 45 ErrorCode SPU_ATTR_NUMBERS_MUST_BE_EQUALS = new ErrorCode(1_008_006_002, "一个 SPU 下的每个 SKU,其属性项必须一致");
46 ErrorCode SPU_SKU_NOT_DUPLICATE = new ErrorCode(1_008_006_003, "一个 SPU 下的每个 SKU,必须不重复"); 46 ErrorCode SPU_SKU_NOT_DUPLICATE = new ErrorCode(1_008_006_003, "一个 SPU 下的每个 SKU,必须不重复");
47 ErrorCode SKU_STOCK_NOT_ENOUGH = new ErrorCode(1_008_006_004, "商品 SKU 库存不足"); 47 ErrorCode SKU_STOCK_NOT_ENOUGH = new ErrorCode(1_008_006_004, "商品 SKU 库存不足");
  48 + ErrorCode SKU_PROPERTIES_EMPTY = new ErrorCode(1_008_006_005, "多规格商品必须从规格列表选择属性组合,SKU 属性不能为空");
48 49
49 // ========== 商品 评价 1-008-007-000 ========== 50 // ========== 商品 评价 1-008-007-000 ==========
50 ErrorCode COMMENT_NOT_EXISTS = new ErrorCode(1_008_007_000, "商品评价不存在"); 51 ErrorCode COMMENT_NOT_EXISTS = new ErrorCode(1_008_007_000, "商品评价不存在");
yudao-module-mall/yudao-module-product/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuServiceImpl.java
@@ -106,9 +106,13 @@ public class ProductSkuServiceImpl implements ProductSkuService { @@ -106,9 +106,13 @@ public class ProductSkuServiceImpl implements ProductSkuService {
106 Set<Long> propertyIds = skus.stream().filter(p -> p.getProperties() != null) 106 Set<Long> propertyIds = skus.stream().filter(p -> p.getProperties() != null)
107 // 遍历多个 Property 属性 107 // 遍历多个 Property 属性
108 .flatMap(p -> p.getProperties().stream()) 108 .flatMap(p -> p.getProperties().stream())
109 - // 将每个 Property 转换成对应的 propertyId,最后形成集合  
110 - .map(ProductSkuSaveReqVO.Property::getPropertyId)  
111 - .collect(Collectors.toSet()); 109 + // 将每个 Property 转换成对应的 propertyId,最后形成集合
  110 + .map(ProductSkuSaveReqVO.Property::getPropertyId)
  111 + .collect(Collectors.toSet());
  112 + // 多规格下,属性组合不能为空:空集合会让后续按 id 批量查询生成非法 SQL(IN())而 500,这里明确拒绝
  113 + if (CollUtil.isEmpty(propertyIds)) {
  114 + throw exception(SKU_PROPERTIES_EMPTY);
  115 + }
112 List<ProductPropertyDO> propertyList = productPropertyService.getPropertyList(propertyIds); 116 List<ProductPropertyDO> propertyList = productPropertyService.getPropertyList(propertyIds);
113 if (propertyList.size() != propertyIds.size()) { 117 if (propertyList.size() != propertyIds.size()) {
114 throw exception(PROPERTY_NOT_EXISTS); 118 throw exception(PROPERTY_NOT_EXISTS);