美文网首页
Java进阶篇(14)——规则引擎QlExpress

Java进阶篇(14)——规则引擎QlExpress

作者: 小胖学编程 | 来源:发表于2022-08-08 21:28 被阅读0次

详细使用方案请看:https://github.com/alibaba/QLExpress官网,这里讲述一个实战场景:即B端系统的上配置的规则引擎。

需求背景:A(接入方)需要对产生的数据进行质检,即校对一些数据比昨天、上周同天的对比情况。需要在页面上提供一些功能,让用户可以个性化的配置校验规则。

以技术的语言来说,就是将页面上的一些参数组装成一段“代码脚本”,然后Java程序去运行这块代码校脚本。

引入依赖:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>QLExpress</artifactId>
  <version>3.2.0</version>
</dependency>

实现代码(伪代码):

public class QlExpressTest {

    public static void main(String[] args) throws Exception {
        test4();
    }

    public static void test4() throws Exception {
        ExpressRunner runner = new ExpressRunner();
        DefaultContext<String, Object> context = new DefaultContext<>();
        context.put("ecpm", 100);
        context.put("lastWeek_ecpm", 90.11);
        String dataIndicators = DataIndicators.ecpm.name;
        String dataComparison = DataComparison.lastWeek.name;
        String to = dataComparison + "_" + dataIndicators;
        //打印表达式(汉化-别人可以理解的)
        String alias =
                DataIndicators.ecpm.alias + "-" + DataComparison.lastWeek.alias + "的" + DataIndicators.ecpm.alias + ">="
                        + 3;
        System.out.println("汉化的表达式:" + alias);
        //真正的表达式
        String express = dataIndicators + "-" + to + ">=" + "3";
        System.out.println("真正执行的表达式:" + express);
        Object mapValueSum = runner.execute(express, context, null, true, false);
        System.out.println("执行结果:" + mapValueSum);

    }

    public enum DataComparison {

        lastWeek("lastWeek", "上周同期"),
        yesterday("yesterday", "昨天");
        
        private String name;

        private String alias;

        DataComparison(String name, String alias) {
            this.name = name;
            this.alias = alias;
        }

        public String getName() {
            return name;
        }

        public String getAlias() {
            return alias;
        }
    }


    public enum DataIndicators {
        ecpm("ecpm", "ecpm(¥)"),
        click("click", "点击量");

        private String name;

        private String alias;

        public String getName() {
            return name;
        }

        public String getAlias() {
            return alias;
        }

        DataIndicators(String name, String alias) {
            this.name = name;
            this.alias = alias;
        }
    }
}

官网文章

https://github.com/alibaba/QLExpress

相关文章

网友评论

      本文标题:Java进阶篇(14)——规则引擎QlExpress

      本文链接:https://www.haomeiwen.com/subject/vphgwrtx.html