场景介绍:
写道
其实我想表达的是能不能通过“阶梯1: 交易额5000万以内取55%”这一句话,直接得到一个这样的表达式: if(p1<=50000000) return "55%";
我们这边希望做到的业务场景是:
具体规则通过市场人员或者财务人员通过自然语言描述(约定特定的关键字,比如"交易额","以内",“取”),如上面的“阶梯1: 交易额5000万以内取55%”
程序解析这些自然语言为表达式
系统每天出账单的时候拿到表达式最后再去计算
对市场与财务人员他们是不会写也不会动if/else这些程序语言
我们这边希望做到的业务场景是:
具体规则通过市场人员或者财务人员通过自然语言描述(约定特定的关键字,比如"交易额","以内",“取”),如上面的“阶梯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; } }
相关推荐
9. **案例分析**:实际项目中的脚本应用示例,帮助读者理解脚本技术在不同场景下的具体应用。 通过阅读【脚本技术script56--2006】,读者可以系统地了解和掌握2006年前后的脚本技术全貌,为后续的脚本编程和系统...
QLExpress脚本引擎被广泛应用在阿里的电商业务场景,具有以下的一些特性: 1、线程安全,引擎运算过程中的产生的临时变量都是threadlocal类型。 2、高效执行,比较耗时的脚本编译过程可以缓存在本地机器,运行时的...
oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。----品质保证oracle里,汉字变成拼音的脚本。--...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
简单明了的shell脚本语言讲义,让你轻松了解shell语言。
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
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绑定脚本
obs-文本-脚本 date-and-time.lua
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
SSH免密登录脚本,免密登陆环境脚本------ssh_no_pass.sh,centos7,ssh秘钥
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
本文将深入探讨标题为"BAT批处理脚本-网络相关操作-绑定网关的批处理及预留维护提到"的批处理脚本知识。 批处理脚本是基于DOS命令或Windows PowerShell命令的文本文件,扩展名为.bat。这些脚本可以执行从简单的文件...
idea 重置试用期脚本 ide-eval-resetter 1. 下载下来,解压 2. idea 点击试用并随便创建一个项目 3. 将ide-eval-resetter.zip压缩包直接拖进idea编辑器中
"DPDK绑定和解绑网卡脚本"是DPDK部署过程中的关键步骤,因为DPDK需要将物理网卡从操作系统驱动中分离出来,以便独占使用这些网卡资源。绑定过程就是将网卡从默认的内核驱动下移除,转而使用DPDK提供的用户空间驱动;...