浏览代码

refactor(marketing): 重构会员优惠券服务

- 优化参数获取逻辑,将 orderAmount转为 Integer 类型
- 使用 ListMap 替代原始的 goodsIdList 参数
- 移除未使用的注释代码
-重构优惠券匹配逻辑,增加设备和价格条件的判断
-优化循环遍历,提高代码可读性和性能
hechunping 1 周之前
父节点
当前提交
bf7054f8b5
共有 1 个文件被更改,包括 31 次插入9 次删除
  1. 31 9
      src/main/java/com/xynet/marketing/service/impl/MemberCouponServiceImpl.java

+ 31 - 9
src/main/java/com/xynet/marketing/service/impl/MemberCouponServiceImpl.java

@@ -1,6 +1,9 @@
 package com.xynet.marketing.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -101,9 +104,9 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
         LocalDate now = LocalDate.now();
         String thirdMemberId = param.getString("thirdMemberId");
         String deviceId = param.getString("deviceId");
-        String orderAmount = param.getString("orderAmount");
+        Integer orderAmount = param.getInt("orderAmount");
         String thirdMercId = param.getString("thirdMercId");
-        //List<Object> goodsIdList = param.getList("goodsIdList");
+        List<JMap<String, Object>> goodsList = param.getListMap("goodsList");
         LambdaQueryWrapper<MemberCoupon> lqw = new LambdaQueryWrapper<MemberCoupon>()
                 .eq(MemberCoupon::getThirdMemberId, thirdMemberId)
                 .eq(MemberCoupon::getMercId, getMercId(thirdMercId))
@@ -115,23 +118,42 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
         if (!Emptys.check(list)) {
             return result;
         }
-        //判断设备是否符合
-        list.forEach(item -> {
-            if (item.getIsAllDevice()) {
-                result.add(JHashMap.copy(item));
+        for (int i = 0; i < list.size(); i++) {
+            MemberCoupon memberCoupon = list.get(i);
+            Boolean deviceCondition = false;
+            Boolean priceCondition = false;
+            if (memberCoupon.getIsAllDevice()) {
+                deviceCondition = true;
+                //result.add(JHashMap.copy(item));
             } else {
                 //判断设备是否符合
                 List<Map<String, Object>> deviceList = deviceService.list(
                         new JHashMap<String, Object>()
                                 .set("deviceId", deviceId)
-                                .set("actId", item.getCouponId())
+                                .set("actId", memberCoupon.getCouponId())
                                 .set("actType", "coupon")
                 );
                 if (Emptys.check(deviceList)) {
-                    result.add(JHashMap.copy(item));
+                    deviceCondition = true;
+                    //result.add(JHashMap.copy(item));
                 }
             }
-        });
+            //判断商品是否符合
+            if (deviceCondition) {
+                if (Objects.equals(memberCoupon.getType(), CouponTypeEnum.T_1.getCode())) {
+                    //满减判断价格
+                    JSONArray priceJson = JSONUtil.parseArray(memberCoupon.getPrice());
+                    JSONObject priceObject = priceJson.getJSONObject(0);
+                    Integer limit = Integer.valueOf(priceObject.get("limit").toString());
+                    if (orderAmount >= limit) {
+                        priceCondition = true;
+                    }
+                }
+            }
+            if (priceCondition) {
+                result.add(JHashMap.copy(memberCoupon));
+            }
+        }
         return result;
     }