From 68faf0e6c5929593e3e34be5ad3c1490c3f68071 Mon Sep 17 00:00:00 2001 From: jianjun Date: Wed, 21 Apr 2021 15:49:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=B0=8F=E7=BB=84=E7=AD=89?= =?UTF-8?q?=E7=BA=A7=E7=BA=A7=E5=88=86=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/support/GroupLevelUtils.java | 91 ++++++++++++++----- 1 file changed, 66 insertions(+), 25 deletions(-) diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupLevelUtils.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupLevelUtils.java index 266cc096f0..b6c6b12b8a 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/support/GroupLevelUtils.java +++ b/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(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)); + + } }