Browse Source

获取小组等级级分数

master
jianjun 4 years ago
parent
commit
68faf0e6c5
  1. 91
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupLevelUtils.java

91
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupLevelUtils.java

@ -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(nN+) -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…
Cancel
Save