diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 54fe07c25..8df263b53 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -89,9 +89,9 @@ public enum ErrorCode{ COUPON_CHANNEL_IS_EXISTED(2027, "此券已投放过"), COUPON_SEND_IS_EXISTED(2028, "此券已经添加到该渠道"), COUPON_SEND_IS_INVALID(2029, "此发券渠道不存在"), - COUPON_SEND_UP_TO_1DAYLIMIT(2030, "此用户一天内发券到达限制"), - COUPON_SEND_UP_TO_COUPONLIMIT(2031, "此用户发此券到达限制"), - COUPON_SEND_NOT_INRANG(2032, "发券不在允许的时间段"), + PUSH_LIMIT_UP_TO_1DAYLIMIT(2030, "此用户一天内发券到达疲劳度限制"), + PUSH_LIMIT_UP_TO_COUPONLIMIT(2031, "此用户发此券到达疲劳度限制"), + PUSH_LIMIT_NOT_INRANG(2032, "不在疲劳度允许的时间段"), /** * 车流 2040 */ diff --git a/mallinkService/src/main/java/com/iformall/service/PushLimitService.java b/mallinkService/src/main/java/com/iformall/service/PushLimitService.java index 92990ad86..bd8d1daba 100644 --- a/mallinkService/src/main/java/com/iformall/service/PushLimitService.java +++ b/mallinkService/src/main/java/com/iformall/service/PushLimitService.java @@ -18,7 +18,7 @@ public interface PushLimitService { PageInfo listAsPage(PushLimit record, Integer pageIndex, Integer pageSize); /** - * 获取租户的ScoreRules + * 获取租户的PushLimit * * @param tenantId * @return @@ -47,6 +47,13 @@ public interface PushLimitService { */ void deleteById(Long id); + /** + * 检查发送时间 + * @param tenantId + * @return + */ + boolean checkSendTime(String tenantId); + /** * 发短信检查 * @param tenantId diff --git a/mallinkService/src/main/java/com/iformall/service/impl/CouponInjectServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/CouponInjectServiceImpl.java index a3a7c2729..7c6ab7c04 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/CouponInjectServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/CouponInjectServiceImpl.java @@ -125,15 +125,27 @@ public class CouponInjectServiceImpl implements CouponInjectService { record.setSendAmount(cUsers.size()); couponInjectMapper.insertSelective(record); if(record.getSendType().equals(EnumCouponInjectSendType.IMMEDIATE.getCode())) { - sendNow(wxCoupon,cUsers,record); + try { + sendNow(wxCoupon, cUsers, record); + } catch (MallinkException e) { + logger.error(e.getMessage()); + if (e.getErrorCode() == ErrorCode.PUSH_LIMIT_NOT_INRANG.getCode()) { + return new ResultData(ErrorCode.PUSH_LIMIT_NOT_INRANG); + } + } } return new ResultData(); } private void sendMsg(CouponInject record, List cUsers) { - if (!pushLimitService.checkMsg(record.getTenantId())) { - logger.error("发送短信时间在疲劳度允许时间范围外"); + boolean checkMsg = false; + try { + checkMsg = pushLimitService.checkMsg(record.getTenantId()); + } catch (MallinkException e) { + logger.error(e.getMessage()); + } + if (!checkMsg) { return; } @@ -208,19 +220,28 @@ public class CouponInjectServiceImpl implements CouponInjectService { } private void sendNow(WxCoupon wxCoupon,List cUsers,CouponInject record){ - //查询标签用户 - int sendRealAmount=0; - List sentUsers = new ArrayList(); - for (WxCUser tempCUser : cUsers) { - boolean bResult = sendCouponToUser(tempCUser,wxCoupon,record.getId()); - if (bResult) { - sentUsers.add(tempCUser); - sendRealAmount += 1; - } + boolean checkTime = false; + try { + checkTime = pushLimitService.checkSendTime(wxCoupon.getTenantId()); + } catch (MallinkException e) { + logger.error(e.getMessage()); + throw new MallinkException(e.getErrorCode(), e.getMessage()); } + if (checkTime) { + //查询标签用户 + int sendRealAmount=0; + List sentUsers = new ArrayList(); + for (WxCUser tempCUser : cUsers) { + boolean bResult = sendCouponToUser(tempCUser,wxCoupon,record.getId()); + if (bResult) { + sentUsers.add(tempCUser); + sendRealAmount += 1; + } + } - //发送短信 - sendMsg(record,sentUsers); + //发送短信 + sendMsg(record,sentUsers); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/PushLimitServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/PushLimitServiceImpl.java index 10897c757..c71f7630b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/PushLimitServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/PushLimitServiceImpl.java @@ -77,6 +77,20 @@ public class PushLimitServiceImpl implements PushLimitService { pushLimitMapper.deleteByPrimaryKey(id); } + @Override + public boolean checkSendTime(String tenantId) { + Date curDate = new Date(); + // 1. get tenant limit + PushLimit pushLimit = getPushLimit(tenantId); + // 2. check time + boolean isInDate = DateUtils.isInDate(curDate, pushLimit.getTimeStart(), pushLimit.getTimeEnd()); + if (!isInDate) { + logger.error("短信已达到每天上限"); + throw new MallinkException(ErrorCode.PUSH_LIMIT_NOT_INRANG); + } + return isInDate; + } + @Override public boolean checkMsg(String tenantId) { Date curDate = new Date(); @@ -86,7 +100,7 @@ public class PushLimitServiceImpl implements PushLimitService { boolean isInDate = DateUtils.isInDate(curDate, pushLimit.getTimeStart(), pushLimit.getTimeEnd()); if (!isInDate) { logger.error("短信已达到每天上限"); - throw new MallinkException(ErrorCode.COUPON_SEND_NOT_INRANG); + throw new MallinkException(ErrorCode.PUSH_LIMIT_NOT_INRANG); } // TODO 3. check phone had up to limit return true; @@ -100,7 +114,7 @@ public class PushLimitServiceImpl implements PushLimitService { // 2. check time 是否在给定的时间段内 boolean isInDate = DateUtils.isInDate(curDate, pushLimit.getTimeStart(), pushLimit.getTimeEnd()); if (!isInDate) { - throw new MallinkException(ErrorCode.COUPON_SEND_NOT_INRANG); + throw new MallinkException(ErrorCode.PUSH_LIMIT_NOT_INRANG); } // 3. check 每人每天多少张券 Map params = new HashMap(); @@ -110,7 +124,7 @@ public class PushLimitServiceImpl implements PushLimitService { if (countForUser >= pushLimit.getCouponAmount()) { String errMsg = "每人每天领券已达到疲劳度上限: " + pushLimit.getCouponAmount(); logger.error(errMsg); - throw new MallinkException(ErrorCode.COUPON_SEND_UP_TO_COUPONLIMIT.getCode(), errMsg); + throw new MallinkException(ErrorCode.PUSH_LIMIT_UP_TO_1DAYLIMIT.getCode(), errMsg); } // 4. check 每人多少天内不会重复收到一张券 params.put("couponId", couponId); @@ -119,7 +133,7 @@ public class PushLimitServiceImpl implements PushLimitService { if (countForUserCoupon >= 1) { String errMsg = "每人" + pushLimit.getCouponDay() + "天领一张券已到疲劳度上限"; logger.error(errMsg); - throw new MallinkException(ErrorCode.COUPON_SEND_UP_TO_COUPONLIMIT.getCode(), errMsg); + throw new MallinkException(ErrorCode.PUSH_LIMIT_UP_TO_COUPONLIMIT.getCode(), errMsg); } return true; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java index fa3c6d76a..605601c25 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java @@ -104,24 +104,34 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { } } - List wxCouponSends = wxCouponSendMapper.findList(wxCouponSendQuery); - for (WxCouponSend send : wxCouponSends) { - boolean checkLimit = false; - // 检查疲劳度 - try { - checkLimit = pushLimitService.checkCoupon(tenantId, cUserId, send.getCouponId()); - } catch (MallinkException e) { - logger.error(e.getMessage()); - } - if (!checkLimit) { - continue; - } - // 发放免费券 - WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(cUserId, send.getCouponId()); - if (couponOrder != null) { - wxCouponActionLogService.addOne(tenantId, send.getCouponId(), couponOrder.getId(), actionType, send.getId()); + boolean checkTime = false; + try { + checkTime = pushLimitService.checkSendTime(tenantId); + } catch (MallinkException e) { + logger.error(e.getMessage()); + return; + } + + if (checkTime) { + List wxCouponSends = wxCouponSendMapper.findList(wxCouponSendQuery); + for (WxCouponSend send : wxCouponSends) { + boolean checkLimit = false; + // 检查疲劳度 + try { + checkLimit = pushLimitService.checkCoupon(tenantId, cUserId, send.getCouponId()); + } catch (MallinkException e) { + logger.error(e.getMessage()); + } + if (!checkLimit) { + continue; + } + // 发放免费券 + WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(cUserId, send.getCouponId()); + if (couponOrder != null) { + wxCouponActionLogService.addOne(tenantId, send.getCouponId(), couponOrder.getId(), actionType, send.getId()); + } + wxCouponService.reduceInventory(send.getCouponId(), 1); } - wxCouponService.reduceInventory(send.getCouponId(), 1); } }