Browse Source

生日积分:记录倍率日期

release_toaliyun_real
Burce 6 years ago
parent
commit
53cb925bb3
2 changed files with 48 additions and 25 deletions
  1. +8
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java
  2. +40
    -23
      mallinkService/src/main/java/com/iformall/utils/CreditUtil.java

+ 8
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxCreditHistoryServiceImpl.java View File

@@ -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);
}


+ 40
- 23
mallinkService/src/main/java/com/iformall/utils/CreditUtil.java View File

@@ -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();
}
}

Loading…
Cancel
Save