|
|
@ -1,12 +1,22 @@ |
|
|
|
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 { |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据等级算出升级所需的积分 |
|
|
|
* |
|
|
@ -14,9 +24,14 @@ public class GroupLevelUtils { |
|
|
|
* @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) { |
|
|
|
Integer point = 0; |
|
|
|
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; |
|
|
|
} |
|
|
|
|
|
|
@ -29,7 +44,33 @@ public class GroupLevelUtils { |
|
|
|
* @date 2021/4/21 10:25 |
|
|
|
*/ |
|
|
|
public static Integer getLevel(Integer point) { |
|
|
|
Integer level = 0; |
|
|
|
return level; |
|
|
|
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)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|