QLExpress脚本语言技术讲解(9)-------方法绑定_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > QLExpress脚本语言技术讲解(9)-------方法绑定

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

 2014/11/12 18:19:05  express_wind  程序员俱乐部  我要评论(0)
  • 摘要:场景介绍:写道其实我想表达的是能不能通过“阶梯1:交易额5000万以内取55%”这一句话,直接得到一个这样的表达式:if(p1<=50000000)return"55%";我们这边希望做到的业务场景是:具体规则通过市场人员或者财务人员通过自然语言描述(约定特定的关键字,比如"交易额","以内",“取”),如上面的“阶梯1
  • 标签:方法 技术 脚本

场景介绍:

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

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

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

?

?

解决方案:

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

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

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

?

?

class="java">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;
	}
	
}

?

?

上一篇: java中的关键字问题 下一篇: 没有下一篇了!
发表评论
用户名: 匿名