• EvalEx示例


    项目做久了,难免会发现有些需求总是反复无常,今天想这样,明天想那样,但是逻辑本身又不是很复杂,比如:

    A、很多系统为了鼓励用户,会出一些奖励政策:连续打卡(或登录)X天,奖虚拟币Y枚。但是这个X,Y的系数,可能会经常调整,有时候甚至还会搞1个上限封顶。

    B、系统出现重大故障后,事后复盘,要定故障等级,一般会涉及几个变量:“故障持续时间”、“影响订单数”、“影响用户数”...,然后根据这些变量,套一个公式,算出来一个值。但是这个计算公式,可能时常调整。

    ...

    这类场景,有一个共同的特征:已知若干变量A,B,C...,通过一些数学运算,计算出一个值。只是这些数学运算规则 ,可能会随着业务时常调整。如果硬编码的话,就得经常改代码,十分枯燥。

    这时候,就是EvalEx这个开源项目的用武之地了,简言之,EvalEx可以动态处理一些数学表达式(即:业务上的计算规则)进行计算,这样我们只要把这些规则弄成配置,当需求变化时,调整表达式的配置即可。

    用法:

    1、先引用pom依赖项

    <dependency>
        <groupId>com.udojava</groupId>
        <artifactId>EvalEx</artifactId>
        <version>2.5</version>
    </dependency>
    

      

    2、示例

    import com.udojava.evalex.Expression;
    
    import java.math.BigDecimal;
    
    public class EvalexTest {
    
        public static void main(String[] args) {
            //业务规则:连续登录5天,奖励2个虚拟币
            String rule = "FLOOR(loginDays/5)*2";
    
            BigDecimal result = new Expression(rule)
                    //用户实际连续登录的天数,这里只是示例,实际应用中,可从db中查询出具体值
                    .with("loginDays", "6")
                    .eval();
            System.out.println(result.toPlainString());
        }
    }
    

    输出:2

    参考文档:

    https://github.com/uklimaschewski/EvalEx

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    求js数组中最小值
    分析apply,call方法
    前端模块化详解
    js中形参的小练习
    js中return返回值小练习
    mysql 视图
    mysql 数据库语句
    mysql 事务管理
    vue-前端工程化
    Vue-router
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/14590236.html
Copyright © 2020-2023  润新知