等级+时间的优先级算法

简介

本算法为等级与时间结合计算对应优先级逻辑

等级越高者优先级越高
同等级下,时间越小者优先级越高

实现

主方法

calculatePriority

import com.zk.blog.enums.TypeEnum;
import org.apache.commons.lang3.StringUtils;

/**
 * @program: 
 * @description:
 * @author: zk
 * @create: 2024-08-09 17:26
 **/
public class PriorityService {

    /**
     * 基线时间
     * 2024-01-01 00:00:00
     * 秒值
     */
    private static final Long baseTime = 1704067200L;

    /**
     * 前缀
     */
    private static final String prefix = "1";

    /**
     * 按照阶梯类型+时间计算优先级
     * 类型级别越高、时间越前者优先级越高
     *
     * @param type 类型 类型优先级最大2位
     * @param time 计算时间
     * @return 优先级结果 :越大优先级越高
     */
    public String calculatePriority(TypeEnum type, Long time) {
        //毫秒转秒
        if (String.valueOf(time).length() == 13) {
            time = time / 1000;
        }
        if (String.valueOf(time).length() != 10) {
            throw new RuntimeException("时间格式错误");
        }
        String typePriority = String.valueOf(type.getLevelPriority());
        String timePriority = String.valueOf(Integer.MAX_VALUE - (time - baseTime));
        typePriority = StringUtils.leftPad(typePriority, 2, "0");
        timePriority = StringUtils.leftPad(timePriority, 12, "0");
        return new StringBuilder().append(prefix).append(typePriority).append(timePriority).toString();
    }
}

采用:Integer.MAX_VALUE - (time - 基线时间)计算出时间优先级
等级优先级为2位,不够则左侧补0
时间优先级为12位,不够则左侧补0
最终优先级::1位前缀+2位级别优先级+12位时间优先级 = 13位字符串

等级类型枚举

TypeEnum


/**
 * @program: 
 * @description: 类型级别
 * @author: zk
 * @create: 2024-08-09 17:30
 **/
public enum TypeEnum {
    /**
     * 级别:描述, 等级优先级
     */
    ONE("一级", 1),
    TWO("二级", 2),
    THREE("三级", 3),
    FOUR("四级", 4),
    FIVE("五级", 5),
    SIX("六级", 6),
    SEVEN("七级", 7),
    EIGHT("八级", 8),
    NINE("九级", 9),
    TEN("十级", 10);

    private String name;

    private Integer levelPriority;

    TypeEnum(String name, Integer levelPriority) {
        this.name = name;
        this.levelPriority = levelPriority;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getLevelPriority() {
        return levelPriority;
    }

    public void setLevelPriority(Integer levelPriority) {
        this.levelPriority = levelPriority;
    }
}

测试

  • 测试代码
    @Test
    public void test(){
        //一级 + 2024-02-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.ONE, 1706745600L));
        //一级 + 2024-03-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.ONE, 1709251200L));
        //九级 + 2024-02-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.NINE, 1706745600L));
        //九级 + 2024-03-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.NINE, 1709251200L));
        //十级 + 2024-02-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.TEN, 1706745600L));
        //十级 + 2024-03-01 00:00:00
        System.out.println(calculatePriority(TypeEnum.TEN, 1709251200L));
    }
  • 测试结果
101002144805247
101002142299647
109002144805247
109002142299647
110002144805247
110002142299647

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿似锦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值