前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EvalEx示例

EvalEx示例

作者头像
菩提树下的杨过
发布2021-04-01 09:47:25
1.1K0
发布2021-04-01 09:47:25
举报

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

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

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

...

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

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

用法:

1、先引用pom依赖项

代码语言:javascript
复制
<dependency>
    <groupId>com.udojava</groupId>
    <artifactId>EvalEx</artifactId>
    <version>2.5</version>
</dependency>

2、示例

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档