场景介绍:
写道
其实我想表达的是能不能通过“阶梯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年前后的脚本技术全貌,为后续的脚本编程和系统...
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个
简单明了的shell脚本语言讲义,让你轻松了解shell语言。
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批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个...BAT批处理脚本-格式转换-9个 BAT批处理脚本-清理-清除-垃圾-28个 BAT批处理脚本-系统设置查询修改-硬件相关-139个 BAT批处理脚本-网络相关操作-44个
本文将深入探讨标题为"BAT批处理脚本-网络相关操作-绑定网关的批处理及预留维护提到"的批处理脚本知识。 批处理脚本是基于DOS命令或Windows PowerShell命令的文本文件,扩展名为.bat。这些脚本可以执行从简单的文件...
Hyper-V 是微软提供的一种虚拟化技术,主要用于在Windows操作系统上创建和管理虚拟机。这个"一键安装 Hyper-V 脚本"(Hyper-V.bat)是一个方便用户快速在Windows家庭版上安装Hyper-V组件的自动化工具。通常,Hyper-V...
使用/ dev / usb / lp0设备句柄) 声称支持以下打印机(✓表示经过作者或贡献者验证的打印机): QL-500(✓),QL-550(✓),QL-560(✓),QL-570(✓),QL-580N,QL-650TD,QL-700(✓),QL-710W(✓), QL-...
**批处理**(Batch Scripting),是一种计算机编程语言,它允许用户创建一系列预定义命令的脚本文件,以实现自动化任务的执行。在Windows操作系统中,这种脚本通常被称为**批处理脚本**,其文件扩展名为`.bat`或`....
大麦抢票脚本 大麦抢票脚本|大麦-抢票|大麦抢票-脚本
"游戏脚本-猩红收割者-弗拉基米尔2.zip"这个压缩包很可能包含了某个游戏——可能是电子游戏或者角色扮演游戏——中的角色“猩红收割者”(Vladimir)的相关脚本代码。弗拉基米尔这个名字通常与吸血鬼或暗黑角色相...
奔梦向前:学编程其实很简单,html、css、JavaScript、html5、css3、vue、Canvas实现网页特效页面、新手入门学习、了解网页动画的制作、代码实现网页动态画面-表白代码脚本-2020-04-28-1。