From 8fe046facef85567f44b0d1aaf5164afbda30fe1 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期三, 10 九月 2025 11:08:04 +0800
Subject: [PATCH] 添加优惠券限制单个商品使用逻辑
---
framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java | 47 ++++++++++++++++++++++++++++++++++++++---------
1 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java
index 36d0423..24c6404 100644
--- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java
+++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java
@@ -5,6 +5,7 @@
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO;
+import cn.lili.modules.order.cart.entity.dto.SkuMapDTO;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.cart.entity.enums.RenderStepEnums;
import cn.lili.modules.order.cart.entity.vo.CartSkuVO;
@@ -240,8 +241,13 @@
//鎺ユ敹鍏蜂綋浼樻儬鍒镐俊鎭�
MemberCoupon coupon = memberCouponDTO.getMemberCoupon();
+
+ Integer goodsNum = tradeDTO.getSkuList().stream().map(CartSkuVO::getNum).reduce(Integer::sum).get();
+
//澶勭悊涓�涓瀬绔儏鍐碉紝濡傛灉浼樻儬鍒告弧鍑忛噾棰濆ぇ浜庤鍗曢噾棰�
- if (coupon.getCouponType().equals(CouponTypeEnum.PRICE.name()) && coupon.getPrice() > countPrice) {
+ if (coupon.getCouponType().equals(CouponTypeEnum.PRICE.name())
+ && coupon.getPrice() > countPrice
+ && coupon.getGoodsUseLimitNum() >= goodsNum) {
//灏嗙鍚堜紭鎯犲埜鐨勯噾棰濆啓鍏ワ紝鍗虫渶澶ф墸鍑忛噾棰�
coupon.setPrice(countPrice);
}
@@ -264,21 +270,42 @@
* @param memberCouponDTO 鐢ㄤ簬璁$畻浼樻儬鍒哥粨绠楄鎯�
*/
private void renderCouponPrice(Map<String, Double> couponMap, TradeDTO tradeDTO, MemberCoupon coupon, MemberCouponDTO memberCouponDTO) {
+ List<SkuMapDTO> skuMapDTOList = new ArrayList<>();
+ for (String skuId : couponMap.keySet()) {
+ skuMapDTOList.add(new SkuMapDTO(skuId, couponMap.get(skuId)));
+ }
+ skuMapDTOList.sort((o1, o2) -> o2.getPrice().compareTo(o1.getPrice()));
//鍒嗗彂浼樻儬鍒�
- PromotionPriceUtil.recountPrice(tradeDTO, memberCouponDTO.getSkuDetail(), memberCouponDTO.getMemberCoupon().getPrice(),
- Boolean.TRUE.equals(coupon.getPlatformFlag()) ?
- PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON, memberCouponDTO.getMemberCoupon().getCouponId());
+ PromotionPriceUtil.recountPrice(tradeDTO, memberCouponDTO.getSkuDetail(),
+ memberCouponDTO.getMemberCoupon().getPrice(),
+ Boolean.TRUE.equals(coupon.getPlatformFlag()) ? PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON,
+ memberCouponDTO.getMemberCoupon().getCouponId(),
+ memberCouponDTO.getMemberCoupon().getGoodsUseLimitNum());
//濡傛灉鏄钩鍙板埜 鍒欓渶瑕佽绠楀晢瀹舵壙鎷呮瘮渚�
if (Boolean.TRUE.equals(coupon.getPlatformFlag()) && coupon.getStoreCommission() > 0) {
+ Integer i = coupon.getGoodsUseLimitNum();
//寰幆鎵�鏈変紭鎯犲埜
- for (String skuId : couponMap.keySet()) {
+ for (SkuMapDTO skuMapDTO : skuMapDTOList) {
for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) {
//鍐欏叆骞冲彴浼樻儬鍒告壙鎷呮瘮渚�
- if (cartSkuVO.getGoodsSku().getId().equals(skuId)) {
- //鍐欏叆搴楅摵鎵挎媴姣斾緥
- cartSkuVO.getPriceDetailDTO().setSiteCouponPoint(coupon.getStoreCommission());
+ if (cartSkuVO.getGoodsSku().getId().equals(skuMapDTO.getSkuId())) {
+ if (i == null) {
+ cartSkuVO.getPriceDetailDTO().setSiteCouponPoint(coupon.getStoreCommission());
+ } else {
+ if (i > 0) {
+ //鍐欏叆搴楅摵鎵挎媴姣斾緥
+ if (i >= cartSkuVO.getNum()) {
+ cartSkuVO.getPriceDetailDTO().setSiteCouponPoint(coupon.getStoreCommission());
+ } else {
+ cartSkuVO.getPriceDetailDTO().setSiteCouponPoint(coupon.getStoreCommission() * i / cartSkuVO.getNum());
+ }
+ i = i - cartSkuVO.getNum();
+ } else {
+ return;
+ }
+ }
}
}
}
@@ -294,6 +321,7 @@
* @param coupon 浼樻儬鍒镐俊鎭�
*/
private void renderCouponDiscount(Map<String, Double> couponMap, TradeDTO tradeDTO, MemberCoupon coupon) {
+
//寰幆鎵�鏈変紭鎯犲埜
for (String skuId : couponMap.keySet()) {
@@ -315,9 +343,10 @@
}
priceDetailDTO.setCouponPrice(CurrencyUtil.add(priceDetailDTO.getCouponPrice(), discountCouponPrice));
+ } else {
+ return;
}
}
}
}
-
}
--
Gitblit v1.8.0