From 53cb925bb330568fbc612fd85eed0985d69b490c Mon Sep 17 00:00:00 2001 From: Burce Date: Thu, 29 Aug 2019 16:25:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=97=A5=E7=A7=AF=E5=88=86:=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=80=8D=E7=8E=87=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/WxCreditHistoryServiceImpl.java | 10 ++- .../java/com/iformall/utils/CreditUtil.java | 63 ++++++++++++------- 2 files changed, 48 insertions(+), 25 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java index 6b2059632..45217f18b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java @@ -218,8 +218,8 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { int creditChangeNum = creditChangeNumOrigin ; if (record.getCreditType().equals(EnumScoreType.CONSUMPTION.getCode()) || record.getCreditType().equals(EnumScoreType.SPEND_CREDIT.getCode())) { //等级积分配置 - int birthdayScale = wxLevelConfigMapper.getScale(wxCUser.getTenantId(), wxCUser.getScore()) ; - creditChangeNum = CreditUtil.calUserCredit(creditChangeNumOrigin, wxCUser, birthdayScale, wxCUserBasicInfo, wxScoreRulesService); + int levelScale = wxLevelConfigMapper.getScale(wxCUser.getTenantId(), wxCUser.getScore()) ; + creditChangeNum = CreditUtil.calUserCredit(creditChangeNumOrigin, wxCUser, levelScale, wxCUserBasicInfo, wxScoreRulesService); } if (creditChangeNum != 0) { @@ -251,8 +251,14 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { WxCUserBasicInfo wxCUserBasicInfoNew = new WxCUserBasicInfo(); wxCUserBasicInfoNew.setId(wxCUserBasicInfo.getId()); wxCUserBasicInfoNew.setCredit(record.getCreditAmount()); + //如果享受了生日积分倍率,记录日期 + if(Objects.nonNull(CreditUtil.getIsBirthDayScale())) { + wxCUserBasicInfoNew.setScoreDate(new Date()); + } wxCUserBasicInfoMapper.updateByPrimaryKeySelective(wxCUserBasicInfoNew); + CreditUtil.clear(); } + } else { //wxCreditHistoryMapper.updateByPrimaryKeySelective(record); } diff --git a/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java b/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java index 15ba97bfb..17628c8b5 100644 --- a/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/CreditUtil.java @@ -10,22 +10,24 @@ import java.util.Objects; @Slf4j public class CreditUtil { + private static ThreadLocal isBirthDayScale = new ThreadLocal<>(); + /** * 计算用户积分 * * @param creditOrigin 原始积分 * @param wxCUser C端用户信息 - * @param scaleFromDb 等级倍率 + * @param levelScaleConfig 等级倍率配置 * @param wxCUserBasicInfo C端用户信息 * @param wxScoreRulesService * @return */ - public static int calUserCredit(int creditOrigin, WxCUser wxCUser, Integer scaleFromDb, WxCUserBasicInfo wxCUserBasicInfo, WxScoreRulesService wxScoreRulesService) { + public static int calUserCredit(int creditOrigin, WxCUser wxCUser, Integer levelScaleConfig, WxCUserBasicInfo wxCUserBasicInfo, WxScoreRulesService wxScoreRulesService) { if (Objects.isNull(wxCUser) || Objects.isNull(wxCUserBasicInfo)) { return 0; } - // 获取等级积分倍率:默认为1.0, - int levelScale = getLevelScale(wxCUser, scaleFromDb); + // 获取等级积分倍率, + int levelScale = getLevelScale(wxCUser, levelScaleConfig); // 获取生日积分倍率: int birthdayScale = getBirthdayScale(wxCUserBasicInfo, wxScoreRulesService); @@ -42,20 +44,21 @@ public class CreditUtil { /** * 根据会员信息获取等级积分倍率 + * * @param wxCUser - * @param scaleFromDb + * @param levelScaleConfig * @return */ - private static int getLevelScale(WxCUser wxCUser, Integer scaleFromDb) { + private static int getLevelScale(WxCUser wxCUser, Integer levelScaleConfig) { int levelScale = WxLevelConfig.DEFAULT_SCALE; Integer score = wxCUser.getScore(); //积分不为空时进行计算 if (Objects.nonNull(score)) { //等级积分配置存在时进行计算 - if (Objects.nonNull(scaleFromDb)) { - levelScale = scaleFromDb; + if (Objects.nonNull(levelScaleConfig)) { + levelScale = levelScaleConfig; } else { - log.info("积分倍率计算:等级积分倍率配置=null"); + //log.info("积分倍率计算:等级积分倍率配置=null"); } } log.info("积分倍率计算:会员等级积分倍率配置={}", levelScale); @@ -64,6 +67,7 @@ public class CreditUtil { /** * 根据会员信息获取倍率 + * * @param wxCUserBasicInfo * @param wxScoreRulesService * @return @@ -73,33 +77,46 @@ public class CreditUtil { //判断是否生日当天,一年一天有效 //发过生日券的用户 if (Objects.nonNull(wxCUserBasicInfo.getScoreDate()) && DateUtils.birthdaysBetween(wxCUserBasicInfo.getScoreDate()) == 0) { - birthdayScale = getBirthdayScoreScale(wxCUserBasicInfo.getTenantId(), wxScoreRulesService); - //没有发过生日券的用户 - } else if(Objects.nonNull(wxCUserBasicInfo.getBirthdate()) && DateUtils.birthdaysBetween(wxCUserBasicInfo.getBirthdate()) == 0) { + 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 ; + //配置了生日积分倍率,保存到上下文 + if (!Objects.equals(birthdayScale, WxScoreRules.DEFAULT_SCALE)) { + isBirthDayScale.set(wxCUserBasicInfo.getId()); + } + return birthdayScale; } /** * 获取生日积分倍率 + * * @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())) { - //规则存使用积分倍率 - birthdayScale = rules.getScale(); - } else { - //没有配置积分规则 - log.info("积分倍率计算:会员生日积分倍率配置=null"); - } + int birthdayScale = WxScoreRules.DEFAULT_SCALE; + WxScoreRules rules = wxScoreRulesService.getCreditRules(tenantId); + if (Objects.nonNull(rules) && Objects.nonNull(rules.getScale())) { + //规则存使用积分倍率 + birthdayScale = rules.getScale(); + } else { + //没有配置积分规则 + //log.info("积分倍率计算:会员生日积分倍率配置=null"); + } log.info("会员生日积分倍率配置:{}", birthdayScale); - return birthdayScale ; + return birthdayScale; + } + + public static Long getIsBirthDayScale() { + return isBirthDayScale.get(); + } + + public static void clear() { + CreditUtil.isBirthDayScale.remove(); } }