From 98be36796bf2578c34b0da1ab0d36fb9a453e23f Mon Sep 17 00:00:00 2001 From: Burce Date: Fri, 30 Aug 2019 15:39:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=97=A5=E7=A7=AF=E5=88=86:=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=A1=A5=E5=8F=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/schedule/CouponSendSchedule.java | 49 ++++++++++--------- .../java/com/iformall/utils/DateUtils.java | 2 +- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java index c67e8eae8..2e1b1c65d 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java @@ -247,6 +247,9 @@ public class CouponSendSchedule { logger.info("生日发券: {} 用户列表为空 wxCUserBasicInfoList = {}, 任务跳过不执行", mall.getName(), wxCUserBasicInfoList); return; } + + int birthdayScale = CreditUtil.getBirthdayScoreScale(mall.getTenantId(), wxScoreRulesService); + //每人可以发送几张生日券 // final int sendCount = 1; wxCUserBasicInfoList.forEach(cu -> { @@ -269,15 +272,10 @@ public class CouponSendSchedule { logger.error("生日发券: 解析conditions异常: {}", e.getMessage()); } if (Objects.isNull(conditions) || Objects.isNull(configJo)) { - logger.info("生日发券: 会员生日券配置不存在 conditions = {}, 任务跳过不执行", conditions); + logger.info("生日发券: 会员生日券配置解析异常 conditions = {}, 任务跳过不执行", conditions); return; } - boolean couponLimit = pushLimitService.checkCoupon(cu.getTenantId(), cu.getId(), cs.getCouponId()); - if (!couponLimit) { - logger.info("生日发券: {}", ErrorCode.PUSH_LIMIT_UP_TO_COUPONLIMIT.getMessage()); - return; - } //默认生日当天发送 int beforeDays = 0; if (configJo.containsKey(WxCouponSend.KEY_BEFOREDAYS)) { @@ -285,25 +283,32 @@ public class CouponSendSchedule { } //提前n天发送生日券,不满足跳过不执行,没有发送的进行补发 int diffBithday = DateUtils.birthdaysBetween(cu.getBirthdate()); - if (diffBithday < 0 || diffBithday > beforeDays) { + if (diffBithday < 0 && Math.abs(diffBithday) > beforeDays || diffBithday > beforeDays) { logger.info("生日发券: [会员={},生日={}不满足提前{}天发券]", cu.getNickName(), cu.getBirthdate(), beforeDays); + return; + } + + boolean couponLimit = pushLimitService.checkCoupon(cu.getTenantId(), cu.getId(), cs.getCouponId()); + if (!couponLimit) { + logger.info("生日发券: {}", ErrorCode.PUSH_LIMIT_UP_TO_COUPONLIMIT.getMessage()); continue; } + + Calendar now = Calendar.getInstance() ; + now.set(Calendar.HOUR, now.get(Calendar.HOUR) - 2) ; Map params = new HashMap<>(); params.put("tenantId", cs.getTenantId()); params.put("cUserId", cu.getId()); - params.put("couponId", cs.getCouponId()); + params.put("couponId", null); params.put("startTime", startTime); - params.put("endTime", endTime); + params.put("endTime", now.getTime()); params.put("channelType", EnumCouponSendSendType.BIRTHDAY.getCode()); int count = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params); - logger.info("生日发券:已经给[" + cu.getNickName() + - "]券[" + cs.getTitle() + "] " + - count + "张"); + //判断之前是否发送过会员生日券 if (count > 0) { - logger.info("生日发券: 会员{}已经发送过生日券, 本次不再发送", cu.getNickName()); - continue; + logger.info("生日发券: 已经给会员{}发送过生日券, 本次不再发送", cu.getNickName()); + return; } if (cs.getRemainInventory() <= 0) { @@ -327,12 +332,6 @@ public class CouponSendSchedule { " id-" + cu.getId()); } if (couponSent) { - boolean couponLimit = pushLimitService.checkMsg(cu.getTenantId()); - if (!couponLimit) { - logger.info("生日发券: {}", ErrorCode.PUSH_LIMIT_NOT_INRANG.getMessage()); - return; - } - sendSMS(cu, mall); // 记录积分倍率日期 try { WxCUserBasicInfo toUpdate = new WxCUserBasicInfo(); @@ -342,6 +341,13 @@ public class CouponSendSchedule { } catch (Exception e) { logger.error("定时发券:记录积分倍率日期失败 {}", e.getMessage()); } + //短信限制 + boolean couponLimit = pushLimitService.checkMsg(cu.getTenantId()); + if (couponLimit) { + sendSMS(cu, mall, birthdayScale); + } else { + logger.info("生日发券: {}", ErrorCode.PUSH_LIMIT_NOT_INRANG.getMessage()); + } } }); }); @@ -364,14 +370,13 @@ public class CouponSendSchedule { return false; } - private void sendSMS(WxCUserBasicInfo cUserBasicInfo, WxMall mall) { + private void sendSMS(WxCUserBasicInfo cUserBasicInfo, WxMall mall, int birthdayScale) { WxMsgRecord wxMsgRecord = new WxMsgRecord(); wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); wxMsgRecord.setReceiver(cUserBasicInfo.getPhone()); wxMsgRecord.setTenantId(cUserBasicInfo.getTenantId()); Map dynamicContentMap = new HashMap<>(); - int birthdayScale = CreditUtil.getBirthdayScoreScale(cUserBasicInfo.getTenantId(), wxScoreRulesService); if (birthdayScale > WxScoreRules.DEFAULT_SCALE) { float creditScale = new BigDecimal(birthdayScale).divide(new BigDecimal(WxScoreRules.DEFAULT_SCALE)).floatValue(); dynamicContentMap.put("creditScale", String.valueOf(creditScale)); diff --git a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java index 9cc72483c..342a24c4f 100755 --- a/mallinkService/src/main/java/com/iformall/utils/DateUtils.java +++ b/mallinkService/src/main/java/com/iformall/utils/DateUtils.java @@ -1080,7 +1080,7 @@ public class DateUtils { /** * 日期距离今天还有几天 * @param date - * @return <0 今后n天? + * @return <0:已过n天;=0:当天 ;>0 n天前 */ public static int birthdaysBetween(Date date) { Date today = new Date() ;