瀏覽代碼

fix(marketing): 修复会员优惠券商品总价计算逻辑

- 新增计算符合优惠券条件的商品总价的逻辑
- 修改满减判断逻辑,使用计算出的优惠券商品总价进行比较
- 优化代码结构,提高可读性和可维护性
hechunping 4 天之前
父節點
當前提交
9001ee63c1
共有 1 個文件被更改,包括 21 次插入2 次删除
  1. 21 2
      src/main/java/com/xynet/marketing/service/impl/MemberCouponServiceImpl.java

+ 21 - 2
src/main/java/com/xynet/marketing/service/impl/MemberCouponServiceImpl.java

@@ -30,6 +30,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 会员优惠券服务-实现类
@@ -142,9 +143,10 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
                     continue;
                 }
             }
+            List<Map<String, Object>> projectGoodsList = new ArrayList<>();
             //判断商品是否符合
             if (!mercCoupon.getBoolean("isAllGoods")) {
-                List<Map<String, Object>> projectGoodsList = goodsService.list(
+                projectGoodsList = goodsService.list(
                         new JHashMap<String, Object>()
                                 .set("goodsIdList", goodsIdList)
                                 .set("actId", memberCoupon.getCouponId())
@@ -155,13 +157,30 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
                 }
             }
 
+            //计算该券的商品总价
+            List<Map<String, Object>> finalProjectGoodsList = projectGoodsList;
+            Stream<JMap<String, Object>> jMapStream = goodsList.stream().filter(g -> {
+                if (mercCoupon.getBoolean("isAllGoods")) {
+                    return true;
+                } else {
+                    String goodsId = g.getString("goodsId");
+                    for (Map<String, Object> projectGoods : finalProjectGoodsList) {
+                        if (Objects.equals(projectGoods.get("goodsId"), goodsId)) {
+                            return true;
+                        }
+                    }
+                }
+                return false;
+            });
+            Integer couponGoodsPrice = jMapStream.map(g -> g.getInt("price") * g.getInt("num")).reduce(0, Integer::sum);
+
             //判断价格是否符合
             if (Objects.equals(mercCoupon.getString("type"), CouponTypeEnum.T_1.getCode())) {
                 //满减判断价格
                 JSONArray priceJson = JSONUtil.parseArray(mercCoupon.getString("price"));
                 JSONObject priceObject = priceJson.getJSONObject(0);
                 Integer limit = Integer.valueOf(priceObject.get("limit").toString());
-                if (orderAmount < limit) {
+                if (couponGoodsPrice < limit) {
                     continue;
                 }
             }