Преглед изворни кода

生日积分:调整补发逻辑

release_toaliyun_real
Burce пре 6 година
родитељ
комит
98be36796b
2 измењених фајлова са 28 додато и 23 уклоњено
  1. +27
    -22
      mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java
  2. +1
    -1
      mallinkService/src/main/java/com/iformall/utils/DateUtils.java

+ 27
- 22
mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java Прегледај датотеку

@@ -247,6 +247,9 @@ public class CouponSendSchedule {
logger.info("生日发券: {} 用户列表为空 wxCUserBasicInfoList = {}, 任务跳过不执行", mall.getName(), wxCUserBasicInfoList); logger.info("生日发券: {} 用户列表为空 wxCUserBasicInfoList = {}, 任务跳过不执行", mall.getName(), wxCUserBasicInfoList);
return; return;
} }

int birthdayScale = CreditUtil.getBirthdayScoreScale(mall.getTenantId(), wxScoreRulesService);

//每人可以发送几张生日券 //每人可以发送几张生日券
// final int sendCount = 1; // final int sendCount = 1;
wxCUserBasicInfoList.forEach(cu -> { wxCUserBasicInfoList.forEach(cu -> {
@@ -269,15 +272,10 @@ public class CouponSendSchedule {
logger.error("生日发券: 解析conditions异常: {}", e.getMessage()); logger.error("生日发券: 解析conditions异常: {}", e.getMessage());
} }
if (Objects.isNull(conditions) || Objects.isNull(configJo)) { if (Objects.isNull(conditions) || Objects.isNull(configJo)) {
logger.info("生日发券: 会员生日券配置不存在 conditions = {}, 任务跳过不执行", conditions);
logger.info("生日发券: 会员生日券配置解析异常 conditions = {}, 任务跳过不执行", conditions);
return; 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; int beforeDays = 0;
if (configJo.containsKey(WxCouponSend.KEY_BEFOREDAYS)) { if (configJo.containsKey(WxCouponSend.KEY_BEFOREDAYS)) {
@@ -285,25 +283,32 @@ public class CouponSendSchedule {
} }
//提前n天发送生日券,不满足跳过不执行,没有发送的进行补发 //提前n天发送生日券,不满足跳过不执行,没有发送的进行补发
int diffBithday = DateUtils.birthdaysBetween(cu.getBirthdate()); 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); 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; continue;
} }



Calendar now = Calendar.getInstance() ;
now.set(Calendar.HOUR, now.get(Calendar.HOUR) - 2) ;
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("tenantId", cs.getTenantId()); params.put("tenantId", cs.getTenantId());
params.put("cUserId", cu.getId()); params.put("cUserId", cu.getId());
params.put("couponId", cs.getCouponId());
params.put("couponId", null);
params.put("startTime", startTime); params.put("startTime", startTime);
params.put("endTime", endTime);
params.put("endTime", now.getTime());
params.put("channelType", EnumCouponSendSendType.BIRTHDAY.getCode()); params.put("channelType", EnumCouponSendSendType.BIRTHDAY.getCode());
int count = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params); int count = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params);
logger.info("生日发券:已经给[" + cu.getNickName() +
"]券[" + cs.getTitle() + "] " +
count + "张");
//判断之前是否发送过会员生日券
if (count > 0) { if (count > 0) {
logger.info("生日发券: 会员{}已经发送过生日券, 本次不再发送", cu.getNickName());
continue;
logger.info("生日发券: 已经给会员{}发送过生日券, 本次不再发送", cu.getNickName());
return;
} }


if (cs.getRemainInventory() <= 0) { if (cs.getRemainInventory() <= 0) {
@@ -327,12 +332,6 @@ public class CouponSendSchedule {
" id-" + cu.getId()); " id-" + cu.getId());
} }
if (couponSent) { if (couponSent) {
boolean couponLimit = pushLimitService.checkMsg(cu.getTenantId());
if (!couponLimit) {
logger.info("生日发券: {}", ErrorCode.PUSH_LIMIT_NOT_INRANG.getMessage());
return;
}
sendSMS(cu, mall);
// 记录积分倍率日期 // 记录积分倍率日期
try { try {
WxCUserBasicInfo toUpdate = new WxCUserBasicInfo(); WxCUserBasicInfo toUpdate = new WxCUserBasicInfo();
@@ -342,6 +341,13 @@ public class CouponSendSchedule {
} catch (Exception e) { } catch (Exception e) {
logger.error("定时发券:记录积分倍率日期失败 {}", e.getMessage()); 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; return false;
} }


private void sendSMS(WxCUserBasicInfo cUserBasicInfo, WxMall mall) {
private void sendSMS(WxCUserBasicInfo cUserBasicInfo, WxMall mall, int birthdayScale) {
WxMsgRecord wxMsgRecord = new WxMsgRecord(); WxMsgRecord wxMsgRecord = new WxMsgRecord();
wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode());
wxMsgRecord.setReceiver(cUserBasicInfo.getPhone()); wxMsgRecord.setReceiver(cUserBasicInfo.getPhone());
wxMsgRecord.setTenantId(cUserBasicInfo.getTenantId()); wxMsgRecord.setTenantId(cUserBasicInfo.getTenantId());
Map<String, String> dynamicContentMap = new HashMap<>(); Map<String, String> dynamicContentMap = new HashMap<>();


int birthdayScale = CreditUtil.getBirthdayScoreScale(cUserBasicInfo.getTenantId(), wxScoreRulesService);
if (birthdayScale > WxScoreRules.DEFAULT_SCALE) { if (birthdayScale > WxScoreRules.DEFAULT_SCALE) {
float creditScale = new BigDecimal(birthdayScale).divide(new BigDecimal(WxScoreRules.DEFAULT_SCALE)).floatValue(); float creditScale = new BigDecimal(birthdayScale).divide(new BigDecimal(WxScoreRules.DEFAULT_SCALE)).floatValue();
dynamicContentMap.put("creditScale", String.valueOf(creditScale)); dynamicContentMap.put("creditScale", String.valueOf(creditScale));


+ 1
- 1
mallinkService/src/main/java/com/iformall/utils/DateUtils.java Прегледај датотеку

@@ -1080,7 +1080,7 @@ public class DateUtils {
/** /**
* 日期距离今天还有几天 * 日期距离今天还有几天
* @param date * @param date
* @return <0 今后n天?
* @return <0:已过n天;=0:当天 ;>0 n天前
*/ */
public static int birthdaysBetween(Date date) { public static int birthdaysBetween(Date date) {
Date today = new Date() ; Date today = new Date() ;


Loading…
Откажи
Сачувај