Bläddra i källkod

refactor(marketing): 优化会员优惠券服务的代码逻辑

- 添加商品 ID 列表的提取,提高代码可读性
- 增加商家优惠券的查询和映射,以便后续使用
- 优化设备和商品限制的判断逻辑
- 修复价格限制判断中的 JSON 解析问题
hechunping 4 dagar sedan
förälder
incheckning
c0b73f4303

+ 26 - 13
src/main/java/com/xynet/marketing/service/impl/MemberCouponServiceImpl.java

@@ -107,6 +107,8 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
         Integer orderAmount = param.getInt("orderAmount");
         String thirdMercId = param.getString("thirdMercId");
         List<JMap<String, Object>> goodsList = param.getListMap("goodsList");
+        List<String> goodsIdList = goodsList.stream().map(i -> i.getString("goodsId")).collect(Collectors.toList());
+
         LambdaQueryWrapper<MemberCoupon> lqw = new LambdaQueryWrapper<MemberCoupon>()
                 .eq(MemberCoupon::getThirdMemberId, thirdMemberId)
                 .eq(MemberCoupon::getMercId, mercService.thirdMercIdToMercId(param.getString("provider-id"), thirdMercId))
@@ -118,15 +120,22 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
         if (!Emptys.check(list)) {
             return result;
         }
-        //TODO 商品限制
+        //查找商家优惠券
+        List<Integer> couponIdList = list.stream().map(i -> i.getCouponId()).collect(Collectors.toList());
+        List<Map<String, Object>> mercCouponList = mercCouponService.list(new JHashMap<String, Object>().set("idList", couponIdList));
+        Map<Integer, Map<String, Object>> mercCouponMap = mercCouponList.stream().collect(Collectors.toMap(i -> Integer.valueOf(i.get("id").toString()), i -> i));
+
+
         for (int i = 0; i < list.size(); i++) {
             MemberCoupon memberCoupon = list.get(i);
-            if (!memberCoupon.getIsAllDevice()) {
+            Map<String, Object> mercCoupon1 = mercCouponMap.get(list.get(i).getCouponId());
+            JMap<String, Object> mercCoupon = new JHashMap<>(mercCoupon1);
+            if (!mercCoupon.getBoolean("isAllDevice")) {
                 //判断设备是否符合
                 List<Map<String, Object>> deviceList = deviceService.list(
                         new JHashMap<String, Object>()
                                 .set("deviceId", deviceId)
-                                .set("actId", memberCoupon.getCouponId())
+                                .set("actId", mercCoupon.getInt("actId"))
                                 .set("actType", "coupon")
                 );
                 if (!Emptys.check(deviceList)) {
@@ -134,18 +143,22 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
                 }
             }
             //判断商品是否符合
-//            if (!memberCoupon.getIsAllGoods()) {
-//                List<Map<String, Object>> goodsList1 = goodsService.list(
-//                        new JHashMap<String, Object>()
-//                                .set("goodsIdList", goodsList)
-//                                .set("actId", memberCoupon.getCouponId())
-//                                .set("actType", "coupon")
-//                );
-//            }
+            if (!mercCoupon.getBoolean("isAllGoods")) {
+                List<Map<String, Object>> projectGoodsList = goodsService.list(
+                        new JHashMap<String, Object>()
+                                .set("goodsIdList", goodsIdList)
+                                .set("actId", memberCoupon.getCouponId())
+                                .set("actType", "coupon")
+                );
+                if (!Emptys.check(projectGoodsList)) {
+                    continue;
+                }
+            }
+
             //判断价格是否符合
-            if (Objects.equals(memberCoupon.getType(), CouponTypeEnum.T_1.getCode())) {
+            if (Objects.equals(mercCoupon.getString("type"), CouponTypeEnum.T_1.getCode())) {
                 //满减判断价格
-                JSONArray priceJson = JSONUtil.parseArray(memberCoupon.getPrice());
+                JSONArray priceJson = JSONUtil.parseArray(mercCoupon.getString("price"));
                 JSONObject priceObject = priceJson.getJSONObject(0);
                 Integer limit = Integer.valueOf(priceObject.get("limit").toString());
                 if (orderAmount < limit) {