From ae5d205a37698efa38ade9b5a642c97dc9adb059 Mon Sep 17 00:00:00 2001 From: Burce Date: Wed, 28 Aug 2019 14:37:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=97=A5=E7=A7=AF=E5=88=86=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iformall/schedule/CouponSendSchedule.java | 24 ++++++----- .../iformall/domain/po/WxCUserBasicInfo.java | 3 +- .../java/com/iformall/utils/CreditUtil.java | 40 ++++++++++++++----- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java index 5bdd244ad..4b317698f 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java @@ -208,7 +208,7 @@ public class CouponSendSchedule { /** * 生日券发放 */ - @Scheduled(cron = "0 0 11 * * ?") // 测试每天6点发券 + @Scheduled(cron = "0 0 15 * * ?") // 测试每天6点发券 public void birthdayCouponSendSchedule() { logger.info("生日发券: 任务开始"); List mallList = wxMallMapper.findList(new WxMall()); @@ -274,6 +274,13 @@ public class CouponSendSchedule { if (configJo.containsKey(WxCouponSend.KEY_BEFOREDAYS)) { beforeDays = configJo.getIntValue(WxCouponSend.KEY_BEFOREDAYS); } + //提前n天发送生日券,不满足跳过不执行,没有发送的进行补发 + int diffBithday = DateUtils.birthdaysBetween(cu.getBirthdate()); + if (diffBithday < 0 || diffBithday > beforeDays) { + logger.info("生日发券: [会员={},生日={}不满足提前{}天发券]", cu.getNickName(), cu.getBirthdate(), beforeDays); + continue; + } + Map params = new HashMap<>(); params.put("tenantId", cs.getTenantId()); params.put("cUserId", cu.getId()); @@ -289,12 +296,7 @@ public class CouponSendSchedule { logger.info("生日发券: 会员{}已经发送过生日券, 本次不再发送", cu.getNickName()); continue; } - //提前n天发送生日券,不满足跳过不执行,没有发送的进行补发 - int diffBithday = DateUtils.birthdaysBetween(cu.getBirthdate()); - if (diffBithday < 0 || diffBithday > beforeDays) { - logger.info("生日发券: [会员={},生日={}不满足提前{}天发券]", cu.getNickName(), cu.getBirthdate(), beforeDays); - continue; - } + if (cs.getRemainInventory() <= 0) { logger.info("生日发券: [title={},id={}]卡券库存不足!", cs.getTitle(), cs.getCouponId()); continue; @@ -319,8 +321,10 @@ public class CouponSendSchedule { sendSMS(cu, mall); // 记录积分倍率日期 try { - cu.setScoreDate(cu.getBirthdate()); - wxCUserBasicInfoMapper.updateByPrimaryKeySelective(cu); + WxCUserBasicInfo toUpdate = new WxCUserBasicInfo() ; + toUpdate.setId(cu.getId()); + toUpdate.setScoreDate(cu.getBirthdate()); + wxCUserBasicInfoMapper.updateByPrimaryKeySelective(toUpdate); } catch (Exception e) { logger.error("定时发券:记录积分倍率日期失败 {}", e.getMessage()); } @@ -353,7 +357,7 @@ public class CouponSendSchedule { wxMsgRecord.setTenantId(cUserBasicInfo.getTenantId()); Map dynamicContentMap = new HashMap<>(); - int birthdayScale = CreditUtil.getScoreScale(cUserBasicInfo.getTenantId(), wxScoreRulesService); + 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/domain/po/WxCUserBasicInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java index 952dd7c35..4ee8f9789 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java @@ -2,6 +2,7 @@ package com.iformall.domain.po; import cn.afterturn.easypoi.excel.annotation.Excel; import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -23,7 +24,7 @@ public class WxCUserBasicInfo extends BaseEntity { @Id protected Long id; - @Transient + @JsonIgnore protected Date scoreDate; @Transient diff --git a/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java b/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java index 6831b8a68..15ba97bfb 100644 --- a/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java @@ -1,14 +1,10 @@ package com.iformall.utils; import com.iformall.domain.po.*; -import com.iformall.mapper.WxLevelConfigMapper; -import com.iformall.service.WxCouponActionLogService; -import com.iformall.service.WxCouponOrderService; import com.iformall.service.WxScoreRulesService; import lombok.extern.slf4j.Slf4j; import java.math.BigDecimal; -import java.util.Date; import java.util.Objects; @Slf4j @@ -29,10 +25,10 @@ public class CreditUtil { return 0; } // 获取等级积分倍率:默认为1.0, - int levelScale = calLevelScale(wxCUser, scaleFromDb); + int levelScale = getLevelScale(wxCUser, scaleFromDb); // 获取生日积分倍率: - int birthdayScale = calBirthdayScale(wxCUserBasicInfo, wxScoreRulesService); + int birthdayScale = getBirthdayScale(wxCUserBasicInfo, wxScoreRulesService); int creditNew = new BigDecimal(creditOrigin) .multiply(new BigDecimal(levelScale)) @@ -44,7 +40,13 @@ public class CreditUtil { return creditNew; } - public static int calLevelScale(WxCUser wxCUser, Integer scaleFromDb) { + /** + * 根据会员信息获取等级积分倍率 + * @param wxCUser + * @param scaleFromDb + * @return + */ + private static int getLevelScale(WxCUser wxCUser, Integer scaleFromDb) { int levelScale = WxLevelConfig.DEFAULT_SCALE; Integer score = wxCUser.getScore(); //积分不为空时进行计算 @@ -60,18 +62,34 @@ public class CreditUtil { return levelScale; } - public static int calBirthdayScale(WxCUserBasicInfo wxCUserBasicInfo, WxScoreRulesService wxScoreRulesService) { + /** + * 根据会员信息获取倍率 + * @param wxCUserBasicInfo + * @param wxScoreRulesService + * @return + */ + private static int getBirthdayScale(WxCUserBasicInfo wxCUserBasicInfo, WxScoreRulesService wxScoreRulesService) { int birthdayScale = WxScoreRules.DEFAULT_SCALE; //判断是否生日当天,一年一天有效 + //发过生日券的用户 if (Objects.nonNull(wxCUserBasicInfo.getScoreDate()) && DateUtils.birthdaysBetween(wxCUserBasicInfo.getScoreDate()) == 0) { - birthdayScale = getScoreScale(wxCUserBasicInfo.getTenantId(), wxScoreRulesService); + birthdayScale = getBirthdayScoreScale(wxCUserBasicInfo.getTenantId(), wxScoreRulesService); + //没有发过生日券的用户 + } else if(Objects.nonNull(wxCUserBasicInfo.getBirthdate()) && DateUtils.birthdaysBetween(wxCUserBasicInfo.getBirthdate()) == 0) { + birthdayScale = getBirthdayScoreScale(wxCUserBasicInfo.getTenantId(), wxScoreRulesService); } else { log.info("积分倍率计算:未设置生日或生日条件未匹配={}", wxCUserBasicInfo.getScoreDate()); } - return birthdayScale; + return birthdayScale ; } - public static int getScoreScale(String tenantId, WxScoreRulesService wxScoreRulesService) { + /** + * 获取生日积分倍率 + * @param tenantId + * @param wxScoreRulesService + * @return + */ + public static int getBirthdayScoreScale(String tenantId, WxScoreRulesService wxScoreRulesService) { int birthdayScale = WxScoreRules.DEFAULT_SCALE; WxScoreRules rules = wxScoreRulesService.getCreditRules(tenantId); if (Objects.nonNull(rules) && Objects.nonNull(rules.getScale())) {