用户等级-等级与计算
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package com.accompany.payment.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@ApiModel
|
||||
@TableName("user_recharge_level")
|
||||
public class UserRechargeLevel {
|
||||
|
||||
/**
|
||||
* 用户UID
|
||||
*/
|
||||
@TableId(type = IdType.NONE)
|
||||
@ApiModelProperty("用户UID")
|
||||
private Long uid;
|
||||
|
||||
@ApiModelProperty("等级")
|
||||
@TableField("`level`")
|
||||
private String level;
|
||||
|
||||
@ApiModelProperty("总充值金币")
|
||||
private BigDecimal totalGold;
|
||||
|
||||
@ApiModelProperty("充值金币")
|
||||
private BigDecimal rechargeGold;
|
||||
|
||||
@ApiModelProperty("受转赠金币")
|
||||
private BigDecimal giveGold;
|
||||
|
||||
@ApiModelProperty("近60天总充值金币")
|
||||
@TableField("`last_60_total_gold`")
|
||||
private BigDecimal last60TotalGold;
|
||||
|
||||
@ApiModelProperty("近60天充值金币")
|
||||
@TableField("`last_60_recharge_gold`")
|
||||
private BigDecimal last60RechargeGold;
|
||||
|
||||
@ApiModelProperty("近60天受转赠金币")
|
||||
@TableField("`last_60_give_gold`")
|
||||
private BigDecimal last60GiveGold;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ApiModelProperty("更新时间")
|
||||
private Date updateTime;
|
||||
|
||||
}
|
@@ -0,0 +1,36 @@
|
||||
package com.accompany.payment.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@ApiModel
|
||||
@TableName("user_recharge_level_config")
|
||||
public class UserRechargeLevelConfig {
|
||||
|
||||
/**
|
||||
* 等级
|
||||
*/
|
||||
@TableId(value = "`level`")
|
||||
private String level;
|
||||
|
||||
@ApiModelProperty("代理用户默认等级")
|
||||
private Boolean rechargeUserDefault;
|
||||
|
||||
@ApiModelProperty("总充值金额")
|
||||
private BigDecimal goldThreshold;
|
||||
|
||||
@ApiModelProperty("充值金额")
|
||||
@TableField("last_60_gold_threshold")
|
||||
private BigDecimal last60GoldThreshold;
|
||||
|
||||
@ApiModelProperty("remark")
|
||||
private String remark;
|
||||
|
||||
}
|
@@ -67,6 +67,7 @@ public interface ChargeRecordMapperMgr {
|
||||
@Param("endTime") Date endTime);
|
||||
|
||||
BigDecimal getUserChargeGold(@Param("uid") Long uid);
|
||||
BigDecimal getUserLast60ChargeGold(@Param("uid") Long uid);
|
||||
|
||||
Long getHistoryRechargeAmountByChannel(@Param("userId") long userId, @Param("channel") String channel);
|
||||
|
||||
|
@@ -0,0 +1,10 @@
|
||||
package com.accompany.payment.mapper;
|
||||
|
||||
import com.accompany.payment.model.UserRechargeLevelConfig;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface UserRechargeLevelConfigMapper extends BaseMapper<UserRechargeLevelConfig> {
|
||||
|
||||
}
|
@@ -0,0 +1,19 @@
|
||||
package com.accompany.payment.mapper;
|
||||
|
||||
import com.accompany.payment.model.UserRechargeLevel;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Mapper
|
||||
public interface UserRechargeLevelMapper extends BaseMapper<UserRechargeLevel> {
|
||||
|
||||
void saveOrUpdate(@Param("uid") Long uid, @Param("level") String level,
|
||||
@Param("totalGold") BigDecimal totalGold, @Param("rechargeGold")BigDecimal rechargeGold, @Param("giveGold")BigDecimal giveGold,
|
||||
@Param("last60TotalGold")BigDecimal last60Gold, @Param("last60RechargeGold")BigDecimal last60RechargeGold, @Param("last60GiveGold")BigDecimal last60GiveGold,
|
||||
@Param("updateTime")Date updateTime);
|
||||
|
||||
}
|
@@ -0,0 +1,37 @@
|
||||
package com.accompany.payment.service;
|
||||
|
||||
import com.accompany.payment.mapper.UserRechargeLevelConfigMapper;
|
||||
import com.accompany.payment.model.UserRechargeLevelConfig;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class UserRechargeLevelConfigService extends ServiceImpl<UserRechargeLevelConfigMapper, UserRechargeLevelConfig> {
|
||||
|
||||
@Autowired
|
||||
private RechargeUserService rechargeUserService;
|
||||
|
||||
public String calLevel(Long uid, BigDecimal totalGold, BigDecimal last60TotalGold){
|
||||
List<UserRechargeLevelConfig> levelList = lambdaQuery()
|
||||
.orderByDesc(UserRechargeLevelConfig::getGoldThreshold, UserRechargeLevelConfig::getLast60GoldThreshold).list();
|
||||
if (CollectionUtils.isEmpty(levelList)){
|
||||
return null;
|
||||
}
|
||||
|
||||
boolean isRechargeUser = rechargeUserService.isRechargeUser(uid);
|
||||
for (UserRechargeLevelConfig level : levelList){
|
||||
if (level.getRechargeUserDefault() && isRechargeUser){
|
||||
return level.getLevel();
|
||||
} else if (totalGold.compareTo(level.getGoldThreshold()) >= 0 && last60TotalGold.compareTo(level.getLast60GoldThreshold()) >= 0) {
|
||||
return level.getLevel();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,57 @@
|
||||
package com.accompany.payment.service;
|
||||
|
||||
import com.accompany.core.model.Users;
|
||||
import com.accompany.core.service.user.UsersBaseService;
|
||||
import com.accompany.payment.mapper.ChargeRecordMapperMgr;
|
||||
import com.accompany.payment.mapper.UserRechargeLevelMapper;
|
||||
import com.accompany.payment.model.UserRechargeLevel;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Service
|
||||
public class UserRechargeLevelService extends ServiceImpl<UserRechargeLevelMapper, UserRechargeLevel> {
|
||||
|
||||
@Autowired
|
||||
private UsersBaseService usersBaseService;
|
||||
@Autowired
|
||||
private UserRechargeLevelConfigService highRechargeLevelService;
|
||||
@Autowired
|
||||
private ChargeRecordMapperMgr chargeRecordMapperMgr;
|
||||
|
||||
public void statistics(Long uid, BigDecimal totalReceiveGoldNum, BigDecimal last60TotalReceiveGoldNum) {
|
||||
Users u = usersBaseService.getUsersByUid(uid);
|
||||
if (null == u){
|
||||
return;
|
||||
}
|
||||
|
||||
BigDecimal totalChargeGold = chargeRecordMapperMgr.getUserChargeGold(uid);
|
||||
if (null == totalChargeGold){
|
||||
totalChargeGold = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
BigDecimal last60ChargeGold = chargeRecordMapperMgr.getUserLast60ChargeGold(uid);
|
||||
if (null == last60ChargeGold){
|
||||
last60ChargeGold = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
if (null == totalReceiveGoldNum){
|
||||
totalReceiveGoldNum = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
if (null == last60TotalReceiveGoldNum){
|
||||
last60TotalReceiveGoldNum = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
BigDecimal total = totalChargeGold.add(totalReceiveGoldNum);
|
||||
BigDecimal last60Total = last60ChargeGold.add(last60TotalReceiveGoldNum);
|
||||
String level = highRechargeLevelService.calLevel(uid ,total, last60Total);
|
||||
|
||||
getBaseMapper().saveOrUpdate(uid, level,
|
||||
total, totalChargeGold, totalReceiveGoldNum, last60Total, last60ChargeGold, last60TotalReceiveGoldNum, new Date());
|
||||
}
|
||||
|
||||
}
|
@@ -348,8 +348,14 @@
|
||||
|
||||
<select id="getUserChargeGold" resultType="java.math.BigDecimal">
|
||||
select sum(total_gold) from charge_record
|
||||
where charge_status in (2,6) and channel not in ('exchange')
|
||||
where charge_status in (2)
|
||||
and uid = #{uid}
|
||||
</select>
|
||||
|
||||
<select id="getUserLast60ChargeGold" resultType="java.math.BigDecimal">
|
||||
select sum(total_gold) from charge_record
|
||||
where charge_status in (2)
|
||||
and uid = #{uid} and create_time >= DATE_FORMAT(adddate(now(), -60), '%Y-%m-%d 00:00:00')
|
||||
</select>
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.accompany.payment.mapper.UserRechargeLevelConfigMapper">
|
||||
</mapper>
|
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.accompany.payment.mapper.UserRechargeLevelMapper">
|
||||
|
||||
<update id="saveOrUpdate">
|
||||
insert into user_recharge_level(`uid`, `level`, `total_gold`, `recharge_gold`, `give_gold`,
|
||||
`last_60_total_gold`, `last_60_recharge_gold`, `last_60_give_gold`, `update_time`)
|
||||
values (#{uid}, #{level}, #{totalGold}, #{rechargeGold}, #{giveGold}, #{last60TotalGold}, #{last60RechargeGold}, #{last60GiveGold}, #{updateTime})
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`level` = values(`level`),
|
||||
`total_gold` = GREATEST(`total_gold`, values(`total_gold`)),
|
||||
`recharge_gold` = GREATEST(`recharge_gold`, values(`recharge_gold`)),
|
||||
`give_gold` = GREATEST(`give_gold`, values(`give_gold`)),
|
||||
`last_60_total_gold` = values(`last_60_total_gold`),
|
||||
`last_60_recharge_gold` = values(`last_60_recharge_gold`),
|
||||
`last_60_give_gold` = values(`last_60_give_gold`),
|
||||
`update_time` = values(`update_time`)
|
||||
</update>
|
||||
|
||||
</mapper>
|
Reference in New Issue
Block a user