From 211b5a717de92b9b52879280ca2285cdd0b4a54b Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期三, 10 九月 2025 19:11:25 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 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