forked from rongchao/epmet-cloud-rizhao
				
			
				 1 changed files with 66 additions and 25 deletions
			
			
		@ -1,35 +1,76 @@ | 
				
			|||
package com.epmet.modules.support; | 
				
			|||
 | 
				
			|||
import com.epmet.commons.tools.constant.NumConstant; | 
				
			|||
import com.epmet.commons.tools.exception.EpmetErrorCode; | 
				
			|||
import com.epmet.commons.tools.exception.RenException; | 
				
			|||
import lombok.extern.slf4j.Slf4j; | 
				
			|||
 | 
				
			|||
import java.util.concurrent.atomic.AtomicBoolean; | 
				
			|||
import java.util.concurrent.atomic.AtomicInteger; | 
				
			|||
 | 
				
			|||
/** | 
				
			|||
 * 小组等级积分工具类 | 
				
			|||
 * | 
				
			|||
 * @author zhaoqifeng | 
				
			|||
 * @date 2021/4/21 10:22 | 
				
			|||
 */ | 
				
			|||
@Slf4j | 
				
			|||
public class GroupLevelUtils { | 
				
			|||
	/** | 
				
			|||
	 * 根据等级算出升级所需的积分 | 
				
			|||
	 * | 
				
			|||
	 * @param level | 
				
			|||
	 * @return java.lang.Integer | 
				
			|||
	 * @author zhaoqifeng | 
				
			|||
	 * @date 2021/4/21 10:25 | 
				
			|||
	 */ | 
				
			|||
	public static Integer getPoint(Integer level) { | 
				
			|||
		Integer point = 0; | 
				
			|||
		return point; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	/** | 
				
			|||
	 * 根据积分算出当前的等级 | 
				
			|||
	 * | 
				
			|||
	 * @param point | 
				
			|||
	 * @return java.lang.Integer | 
				
			|||
	 * @author zhaoqifeng | 
				
			|||
	 * @date 2021/4/21 10:25 | 
				
			|||
	 */ | 
				
			|||
	public static Integer getLevel(Integer point) { | 
				
			|||
		Integer level = 0; | 
				
			|||
		return level; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * 根据等级算出升级所需的积分 | 
				
			|||
     * | 
				
			|||
     * @param level | 
				
			|||
     * @return java.lang.Integer | 
				
			|||
     * @author zhaoqifeng | 
				
			|||
     * @date 2021/4/21 10:25 | 
				
			|||
     * @remark 通项公式:an=n(n-1)/2+2n-2(n∈N+)  -3+n(n-1)/2(需要特殊处理,所以引用前面的) | 
				
			|||
     */ | 
				
			|||
    public static Integer getPoint(Integer level) { | 
				
			|||
        if (level == null || level < NumConstant.ONE) { | 
				
			|||
            throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); | 
				
			|||
        } | 
				
			|||
        Integer point = (level * (level - NumConstant.ONE) / NumConstant.TWO + NumConstant.TWO * level - NumConstant.TWO) * NumConstant.ONE_HUNDRED; | 
				
			|||
        log.info("getPoint level:{},point:{}", level, point); | 
				
			|||
        return point; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    /** | 
				
			|||
     * 根据积分算出当前的等级 | 
				
			|||
     * | 
				
			|||
     * @param point | 
				
			|||
     * @return java.lang.Integer | 
				
			|||
     * @author zhaoqifeng | 
				
			|||
     * @date 2021/4/21 10:25 | 
				
			|||
     */ | 
				
			|||
    public static Integer getLevel(Integer point) { | 
				
			|||
        if (point == null || point < NumConstant.ZERO) { | 
				
			|||
            throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); | 
				
			|||
        } | 
				
			|||
        //如果是0 则返回等级1
 | 
				
			|||
        if (point == NumConstant.ZERO) { | 
				
			|||
            return NumConstant.ONE; | 
				
			|||
        } | 
				
			|||
        AtomicBoolean flag = new AtomicBoolean(false); | 
				
			|||
        AtomicInteger initLevel = new AtomicInteger(1); | 
				
			|||
        do { | 
				
			|||
            Integer point1 = getPoint(initLevel.incrementAndGet()); | 
				
			|||
            if (point < point1) { | 
				
			|||
                int i = initLevel.decrementAndGet(); | 
				
			|||
                log.info("getLevel level:{},point:{}", i, point); | 
				
			|||
                return i; | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
        } while (!flag.get()); | 
				
			|||
        return null; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public static void main(String[] args) { | 
				
			|||
        for (int i = 1; i < 10; i++) { | 
				
			|||
            System.out.println("lv" + i + ":" + getPoint(i)); | 
				
			|||
        } | 
				
			|||
        System.out.println(getLevel(3300)); | 
				
			|||
        System.out.println(getLevel(299)); | 
				
			|||
 | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
					Loading…
					
					
				
		Reference in new issue