diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/CouponServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/CouponServiceImpl.java index 75250121..7c3644a8 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/CouponServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/CouponServiceImpl.java @@ -125,12 +125,17 @@ public class CouponServiceImpl implements ICouponService { List applicableProductTypes = objectMapper.readValue( coupon.getApplicableProducts(), new TypeReference>() {}); - discountableProducts = products.stream() - .filter(product -> applicableProductTypes.contains(product.getProductType().getCode())) - .toList(); + // 空数组表示不限制商品类型,适用于所有商品 + if (applicableProductTypes == null || applicableProductTypes.isEmpty()) { + // 不过滤,使用全部商品 + } else { + discountableProducts = products.stream() + .filter(product -> applicableProductTypes.contains(product.getProductType().getCode())) + .toList(); - if (discountableProducts.isEmpty()) { - return false; + if (discountableProducts.isEmpty()) { + return false; + } } } catch (Exception e) { log.error("解析适用商品类型失败", e); @@ -198,6 +203,13 @@ public class CouponServiceImpl implements ICouponService { List applicableProductTypes = objectMapper.readValue( coupon.getApplicableProducts(), new TypeReference>() {}); + // 空数组表示不限制商品类型,返回所有商品总价 + if (applicableProductTypes == null || applicableProductTypes.isEmpty()) { + return products.stream() + .map(ProductItem::getSubtotal) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + // 计算适用商品的总价 return products.stream() .filter(product -> applicableProductTypes.contains(product.getProductType().getCode()))