Browse Source

feat(coupon): 实现商家优惠券自动发送功能

- 新增自动发送优惠券的逻辑,支持"每人必得"和"按日期发放"两种发送类型
- 优化了优惠券查询条件,提高了查询效率
- 修复了部分代码格式问题,提高了代码可读性
hechunping 3 months ago
parent
commit
3c6e391942

+ 47 - 9
src/main/java/com/xynet/marketing/service/factory/coupon/merc/impl/base/MercCouponFactoryBase.java

@@ -25,10 +25,7 @@ import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -110,7 +107,7 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
         LambdaQueryWrapper<MercCoupon> lqw = new LambdaQueryWrapper<MercCoupon>()
         LambdaQueryWrapper<MercCoupon> lqw = new LambdaQueryWrapper<MercCoupon>()
                 .eq(MercCoupon::getMercId, param.getInt("mercId"))
                 .eq(MercCoupon::getMercId, param.getInt("mercId"))
                 .eq(MercCoupon::getStatus, true)
                 .eq(MercCoupon::getStatus, true)
-                .eq(MercCoupon::getSendType, CouponSendTypeEnum.T_2.getCode())
+                .eq(MercCoupon::getSendType, CouponSendTypeEnum.REGISTER.getCode())
                 .and(wrapper -> wrapper.isNull(MercCoupon::getSendStartDate)
                 .and(wrapper -> wrapper.isNull(MercCoupon::getSendStartDate)
                         .or()
                         .or()
                         .le(MercCoupon::getSendStartDate, today))
                         .le(MercCoupon::getSendStartDate, today))
@@ -142,7 +139,7 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
         LambdaQueryWrapper<MercCoupon> lqw = new LambdaQueryWrapper<MercCoupon>()
         LambdaQueryWrapper<MercCoupon> lqw = new LambdaQueryWrapper<MercCoupon>()
                 .eq(MercCoupon::getMercId, param.getInt("mercId"))
                 .eq(MercCoupon::getMercId, param.getInt("mercId"))
                 .eq(MercCoupon::getStatus, true)
                 .eq(MercCoupon::getStatus, true)
-                .eq(MercCoupon::getSendType, CouponSendTypeEnum.T_3.getCode())
+                .eq(MercCoupon::getSendType, CouponSendTypeEnum.SHOPPING.getCode())
                 .and(wrapper -> wrapper.isNull(MercCoupon::getSendStartDate)
                 .and(wrapper -> wrapper.isNull(MercCoupon::getSendStartDate)
                         .or()
                         .or()
                         .le(MercCoupon::getSendStartDate, orderCreateTime))
                         .le(MercCoupon::getSendStartDate, orderCreateTime))
@@ -167,11 +164,52 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
     @Override
     @Override
     public void autoSend(JMap<String, Object> param) {
     public void autoSend(JMap<String, Object> param) {
         LocalDate today = LocalDate.now();
         LocalDate today = LocalDate.now();
+        String thirdMemberId = param.getString("thirdMemberId");
+        String mercId = param.getString("mercId");
         //获取自动赠送的列表
         //获取自动赠送的列表
         List<String> enumByAutoSend = CouponSendTypeEnum.getEnumByAutoSend(true);
         List<String> enumByAutoSend = CouponSendTypeEnum.getEnumByAutoSend(true);
-        //TODO 没完成
-
-
+        //查找商家可赠送的优惠券
+        LambdaQueryWrapper<MercCoupon> lqw = new LambdaQueryWrapper<MercCoupon>()
+                .eq(MercCoupon::getMercId, mercId)
+                .eq(MercCoupon::getStatus, "1")
+                .in(MercCoupon::getSendType, enumByAutoSend)
+                .and(wrapper -> wrapper.isNull(MercCoupon::getSendStartDate)
+                        .or()
+                        .le(MercCoupon::getSendStartDate, today))
+                .and(wrapper -> wrapper.isNull(MercCoupon::getSendEndDate)
+                        .or()
+                        .ge(MercCoupon::getSendEndDate, today));
+        List<MercCoupon> list = list(lqw);
+        List<MercCoupon> sendList = new ArrayList<>();
+        if (Emptys.check(list)) {
+            list.forEach(mercCoupon -> {
+                //每人必得
+                if (Objects.equals(mercCoupon.getSendType(), CouponSendTypeEnum.EVERYONE.getCode())) {
+                    //查询券是否已领取过了
+                    Map<String, Object> existNewMember = memberCouponService.obj(new JHashMap<String, Object>()
+                            .set("couponId", mercCoupon.getId())
+                            .set("thirdMemberId", thirdMemberId)
+                    );
+                    if (!Emptys.check(existNewMember)) {
+                        sendList.add(mercCoupon);
+                        memberCouponService.saveOrUpdate(modelSave(mercCoupon, thirdMemberId, "系统赠送", null));
+                    }
+                }
+                //按日期发放
+                if (Objects.equals(mercCoupon.getSendType(), CouponSendTypeEnum.DAY.getCode())) {
+                    //查询券是否已领取过了
+                    Map<String, Object> existNewMember = memberCouponService.obj(new JHashMap<String, Object>()
+                            .set("couponId", mercCoupon.getId())
+                            .set("thirdMemberId", thirdMemberId)
+                            .set("createDate", today)
+                    );
+                    if (!Emptys.check(existNewMember)) {
+                        sendList.add(mercCoupon);
+                        memberCouponService.saveOrUpdate(modelSave(mercCoupon, thirdMemberId, "系统赠送", null));
+                    }
+                }
+            });
+        }
     }
     }