`
express_wind
  • 浏览: 29844 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

QLExpress脚本语言技术讲解(9)-------方法绑定

阅读更多

场景介绍:

写道
其实我想表达的是能不能通过“阶梯1: 交易额5000万以内取55%”这一句话,直接得到一个这样的表达式: if(p1<=50000000) return "55%";

我们这边希望做到的业务场景是:
具体规则通过市场人员或者财务人员通过自然语言描述(约定特定的关键字,比如"交易额","以内",“取”),如上面的“阶梯1: 交易额5000万以内取55%”
程序解析这些自然语言为表达式
系统每天出账单的时候拿到表达式最后再去计算

对市场与财务人员他们是不会写也不会动if/else这些程序语言

 

 

解决方案:

复杂逻辑的脚本的可读性确实是个大问题,QlExpress除了可以在脚本里用自定义的function,更常用的方法是底层业务封装一些基础函数,然后通过函数绑定、操作符、宏定义来解决。

以下是我的一个简单的解决方案:

更多介绍在 《QlExpress实战宝典》http://t.cn/RvO2qtn (提取码:RE1Z0F

 

 

package com.ql.util.express.test;

import org.junit.Test;

import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;

public class StepTest {
	@Test
	public void testMax() throws Exception {
		

		String express = "阶梯1 = 阶梯(0.0,100.0,0.2);阶梯2 = 阶梯(100.0,200.0,0.15);阶梯3 = 阶梯(200.0,10000.0,0.1);阶梯取值(220,阶梯1,阶梯2,阶梯3)";
		ExpressRunner runner = new ExpressRunner(false,true);
		DefaultContext<String, Object> context = new DefaultContext<String, Object>();
		runner.addFunctionOfClassMethod("阶梯", "com.ql.util.express.test.Step", "createStep", new Class[]{double.class,double.class,double.class}, null);
		runner.addFunctionOfClassMethod("阶梯取值", "com.ql.util.express.test.Step", "chooseStep", new Class[]{double.class,Step.class,Step.class,Step.class}, null);
		Object r = runner.execute(express, context, null, false, true);

		System.out.println(r);
	}
}

 

package com.ql.util.express.test;


public class Step {
	private double min;
	private double max;
	private double value;
	public double getMin() {
		return min;
	}
	public void setMin(double min) {
		this.min = min;
	}
	public double getMax() {
		return max;
	}
	public void setMax(double max) {
		this.max = max;
	}
	public double getValue() {
		return value;
	}
	public void setValue(double value) {
		this.value = value;
	}
	public static Step createStep(double _min,double _max,double _value)
	{
		Step step = new Step();
		step.min = _min;
		step.max = _max;
		step.value = _value;
		return step;		
	}

	public static double chooseStep(double input,Step step1,Step step2,Step step3)
	{
		Step[] steps = {step1,step2,step3};
		for(Step step:steps){
			if(step.min<=input && step.max>=input){
				return step.value;
			}
		}
		return -1;
	}
	
}

 

 

分享到:
评论
1 楼 express_wind 2018-08-05  
现在我在阿里云上有个关于QLExpress和规则引擎的专栏,欢迎相互关注 https://yq.aliyun.com/album/130

相关推荐

    脚本技术script56--2006(CHM)

    9. **案例分析**:实际项目中的脚本应用示例,帮助读者理解脚本技术在不同场景下的具体应用。 通过阅读【脚本技术script56--2006】,读者可以系统地了解和掌握2006年前后的脚本技术全貌,为后续的脚本编程和系统...

    QLExpress:QLExpress是用于Java平台的功能强大,轻量级,动态的语言,旨在提高开发人员在不同业务场景中的工作效率

    QLExpress脚本引擎被广泛应用在阿里的电商业务场景,具有以下的一些特性: 1、线程安全,引擎运算过程中的产生的临时变量都是threadlocal类型。 2、高效执行,比较耗时的脚本编译过程可以缓存在本地机器,运行时的...

    oracle里,汉字变成拼音的脚本。----品质保证

    oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。--...

    BAT批处理脚本-清理-清除-垃圾-28个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    BAT批处理脚本-文件相关操作-92个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    BAT批处理脚本-网络相关操作-44个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    BAT批处理脚本-提示窗口进度条-17个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    BAT批处理脚本-WinXP相关批处理-12个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    shell脚本语言使用简介---培训指南

    简单明了的shell脚本语言讲义,让你轻松了解shell语言。

    BAT批处理脚本-格式转换-9个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    BAT批处理脚本-加密解密-22个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    Oracle-NUMA绑定脚本

    Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本

    obs-文本-脚本 date-and-time.lua

    obs-文本-脚本 date-and-time.lua

    BAT批处理脚本-数值计算-23个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    BAT批处理脚本-文本操作-52个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    SSH免密登录脚本,免密登陆环境脚本------ssh_no_pass.sh

    SSH免密登录脚本,免密登陆环境脚本------ssh_no_pass.sh,centos7,ssh秘钥

    BAT批处理脚本-系统设置查询修改-硬件相关-139个.zip

    BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个

    BAT批处理脚本-网络相关操作-绑定网关的批处理及预留维护提到.bat.zip

    本文将深入探讨标题为"BAT批处理脚本-网络相关操作-绑定网关的批处理及预留维护提到"的批处理脚本知识。 批处理脚本是基于DOS命令或Windows PowerShell命令的文本文件,扩展名为.bat。这些脚本可以执行从简单的文件...

    ide-eval-resetter idea重置试用期脚本

    idea 重置试用期脚本 ide-eval-resetter 1. 下载下来,解压 2. idea 点击试用并随便创建一个项目 3. 将ide-eval-resetter.zip压缩包直接拖进idea编辑器中

    DPDK绑定和解绑网卡脚本

    "DPDK绑定和解绑网卡脚本"是DPDK部署过程中的关键步骤,因为DPDK需要将物理网卡从操作系统驱动中分离出来,以便独占使用这些网卡资源。绑定过程就是将网卡从默认的内核驱动下移除,转而使用DPDK提供的用户空间驱动;...

Global site tag (gtag.js) - Google Analytics