Эх сурвалжийг харах

fix 优惠卷优惠金额小于最小规格金额

zoujiajian 3 жил өмнө
parent
commit
a8ba5a8dce

+ 9 - 0
netflix-dao/src/main/java/com/cyksj/mapper/GoodsDonMapper.java

@@ -2,10 +2,19 @@ package com.cyksj.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.entity.GoodsDon;
+import org.apache.ibatis.annotations.Select;
+
+import java.math.BigDecimal;
 
 /**
  * @author chan
  * @date 2022/9/27 5:31 PM
  */
 public interface GoodsDonMapper extends BaseMapper<GoodsDon> {
+
+	@Select("select gdk.price from goods_don gd left join goods_don_sku gdk on gdk.goods_id = gd.id" +
+			" where gd.id = #{goodsId} and gd.deleted is true" +
+			" and gd.status is true and gd.type = 2" +
+			" order by gdk.price limit 1")
+	BigDecimal selectMinPriceSkuByGoodsId(Long goodsId);
 }

+ 6 - 3
netflix-service/src/main/java/com/cyksj/service/mange/coupon/impl/CouponCommonServiceImpl.java

@@ -217,7 +217,7 @@ public class CouponCommonServiceImpl implements CouponCommonService {
 			if (coupon.getGoodsType() == Coupon.GoodsType.virtualGoods) {
 				List<Long> skuIds = goodsSkuList.stream().map(Coupon.CouponGoodsSku::getSkuId).collect(Collectors.toList());
 				skuIds.forEach(skuId->{
-					GoodsDonSku sku = goodsDonSkuMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSku.class).in(GoodsDonSku::getId, skuId).select(GoodsDonSku::getPrice).last("limit 1"));
+					GoodsDonSku sku = goodsDonSkuMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSku.class).eq(GoodsDonSku::getId, skuId).select(GoodsDonSku::getPrice).last("limit 1"));
 					if (sku == null) {
 						throw BusinessRuntimeException.getInstance("所选规格不存在");
 					}
@@ -228,10 +228,13 @@ public class CouponCommonServiceImpl implements CouponCommonService {
 			}else {
 				List<Long> goodsIds = goodsSkuList.stream().map(Coupon.CouponGoodsSku::getGoodsId).collect(Collectors.toList());
 				goodsIds.forEach(goodsId->{
-					GoodsDon goodsDon = goodsDonMapper.selectOne(Wrappers.lambdaQuery(GoodsDon.class).in(GoodsDon::getId, goodsId).eq(GoodsDon::getType, 2).select(GoodsDon::getId).last("limit 1"));
-					if (goodsDon == null) {
+					BigDecimal price = goodsDonMapper.selectMinPriceSkuByGoodsId(goodsId);
+					if (price == null) {
 						throw BusinessRuntimeException.getInstance("实物商品不存在");
 					}
+					if (coupon.getReduceMoney().compareTo(price) > 0) {
+						throw BusinessRuntimeException.getInstance("可减金额必须小于实物最小规格金额");
+					}
 				});
 			}
 			if (coupon.getIsValidTime()) {