|
|
|
@@ -10,22 +10,24 @@ import java.util.Objects; |
|
|
|
@Slf4j |
|
|
|
public class CreditUtil { |
|
|
|
|
|
|
|
private static ThreadLocal<Long> 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(); |
|
|
|
} |
|
|
|
} |