php规则引擎 脚本语言,规则引擎的使用

本文详细介绍了Aviator引擎在项目中的应用,包括数据类型转换(如字符串转整数、浮点数等)、逻辑运算符、关系运算符、正则表达式以及时间计算。此外,还讲解了内置和自定义函数的使用,如sysdate()、nvl()、sql执行等,并展示了条件语句、循环语句的语法。内容涵盖了变量声明、作用域、条件判断和循环控制,为实际业务中的规则引擎应用提供了全面指导。
摘要由CSDN通过智能技术生成

在aviator引擎的基础上进行项目化的使用,扩展定义

1 规则设置数据定义

编码

名称

处理方式

string

字符串

强转

int

整数

强转

double

浮点数

强转

boolean

布尔值

强转

long

长整数

强转

date

日期

转换为java日期对象

millis

毫秒值

时间计算推荐使用毫秒值,例如天数

array

数组

出差人等此类数据,便于处理

area

区划

预留行政区划特殊类型

money

金额

对金额,去除千分位,转换为BigDecimal

2 规则设置操作符

2.1 算数运算符

运算符

说明

表达式

入参

结果

+

A+B

A=10,B=3

13

-

A-B

A=10,B=3

7

*

A*B

A=10,B=3

30

/

A/B

A=10,B=3

3

%

取余

A%B

A=10,B=3

1

-

-A

A=10

-10

2.2 逻辑运算符

运算符

说明

表达式

入参

结果

||

或者

A||B

A=true,B=false

true

&&

并且

A&&B

A=true,B=false

false

!

!A

A=true

false

2.3 关系运算符

运算符

说明

表达式

入参

结果

<

小于

A

A=10,B=20

true

<=

小于等于

A<=B

A=10,B=20

true

>

大于

A>B

A=10,B=20

false

>=

大于等于

A>=B

A=10,B=20

false

==

等于

A==B

A=10,B=20

false

!=

不等于

A!=B

A=10,B=20

true

2.4 三元运算符

运算符

说明

表达式

入参

结果

?:

形式为bool ? exp1: exp2。 其中bool必须为Boolean类型的表达式

A

A=10,B=20

10

2.4 正则表达式

运算符

说明

表达式

入参

结果

=~

field01 =~ /^[A-Z]+$/"

field01=ABC

true

2.4 正则表达式

3 函数

3.1原生函数列表

运算符

说明

sysdate()

返回当前时间对象java.util.Date

now()

返回 System.currentTimeMillis

max(v1,v2,v3, ...)

返回参数列表中的最大值。

min(v1,v2,v3, ...)

返回参数列表中的最小值。

date_to_string(date,format)

将 Date 对象转化化特定格式的字符

string_to_date(source,format)

将特定格式的字符串转化为 Date 对象

string.contains(s1,s2)

判断 s1 是否包含 s2,返回 Boolean

string.length(s)

求字符串长度,返回 Long

string.startsWith(s1,s2)

s1 是否以 s2 开始,返回 Boolean

string.endsWith(s1,s2)

s1 是否以 s2 结尾,返回 Boolean

string.substring(s,begin[,end])

截取字符串 s,从 begin 到 end,如果忽略 end 的话,将从 begin 到结尾

string.indexOf(s1,s2)

java 中的 s1.indexOf(s2),求 s2 在 s1 中 的起始索引位置,如果不存在为-1

string.split(target,regex,[limit])

按照regex分隔符,将target字符串分割成数组

count(seq)

返回集合大小

include(seq,element)

判断 element 是否在集合 seq 中,返回 boolean 值

3.2自定义函数列表

运算符

说明

nvl(v1,v2)

如果v1为空,返回v2

sql.list(v1)

执行v1语句,返回数组类型的数据

sql.map(v1)

执行v1语句,返回map类型的数据

sql.one(v1)

执行v1语句,返回单个数据,常用与 select count(1) from dual 此类写法

4 语法

4.1 脚本语法

4.1.1 关键字let

声明定义一个变量或者对象

let a = 99;

let b = '张三';

let c = vo.bill;

let d = string_to_date('2011-11-11','yyyy-MM-dd');

4.1.1 注释

代码注释用于在代码中说明代码的用意或者注意事项,你可以通过连续的两个 # 号引入一行注释:

## examples/demo2.av

## 这是一行注释

a = 1;## 行尾注释

4.1.2 作用域

## 全局作用域

let a = 1;

a = a + 1;

println(a);

a 的作用域在 let 定义后,在整个脚本内有效,我们称之为全局作用域,在这个范围内,你可以正常地读写它。

但是你可以限定一个变量的作用域,通过大括号来引入一个嵌套的作用域:

let a = 1; ## 全局作用域内的 a

{

## 嵌套作用域 scope1

let a = 2; ## let 定义了 scope1 内有效的变量 a

println(a); ## 2

a = 3;

}

println(a); ## 1

进入作用域后以域内为准,离开作用域后域内的变量就失效了

let a = 1;

{

let b = 2;

println(b); ## 2

}

println(b); ## null

println(a); ## 1

4.1.2 条件语句

使用方式如下

if 条件1 {

如果条件1为真,执行这里;(条件为真才执行)

} else if 条件2 {

否则,当条件2为真执行这里。(当条件1不为真,条件2为真执行这里)

} else {

条件1,条件2都不为真,执行这里

}

let a = rand(1100); ## 随机一个数字

if a > 1000 {

println("a 大于 1000.");

} elsif a > 100 {

println("a 大于 100.");

} elsif a > 10 {

println("a 大于 10.");

} else {

println("a 小于 10 ");

}

println("a is " + a + ".");

## a 大于 100.

## a is 674.

4.1.3 循环语句

4.1.3.1 for

for .. in 可以用于任何集合结构,比如数组、 java.util.List 、 java.util.Map 等等:

##定义测试数据

let m = seq.map("a", 1, "b", 2, "c", 3);

let list = seq.list(1, 2, 3, 4, 5, 6, 7, 8, 9);

## m 是一个map类型的集合

for x in m {

println(x.key + "=" + x.value);

}

## list 是一个数组

let sum = 0;

for x in list {

sum = sum + x;

}

println("sum of list is "+ sum);

4.1.3.2 continue/break/return

continue : 结束本次循环,循环变量继续递增或递减,开始下次循环

##打印所有奇数

let list = seq.list(1, 2, 3, 4, 5, 6, 7, 8, 9);

for x in list {

if x % 2 == 0 {

continue;

}

println(x);

}

break : 结束循环,执行循环后面的代码(如果有的话)

###打印到第一个大于5时,结束循环

let list = seq.list(1, 2, 3, 4, 5, 6, 7, 8, 9);

for x in list {

if x > 5 {

break;

}

println(x);

}

return : 结束脚本的执行,return后面的所有代码都不再执行,并将结果返回

##返回一个大于5的数字

let list = seq.list(1, 2, 3, 4, 5, 6, 7, 8, 9);

for x in list {

if x > 5 {

return x;

}

println(x);

}

4.1.4.3 while

while 循环本质上是条件语句和循环的结合,当满足一定条件下,不停地执行一段代码块,直到条件变为否定:

while(循环条件){

循环操作

}

举例

let sum = 1;

while sum < 1000 {

sum = sum + sum;

}

## sum 从 1 开始,不停地累加自身,直到超过 1000 才终止,这里输出:1024

println(sum);

使用条件语句可以改写为下面的写法,含义相同

let sum = 1;

while true {

sum = sum + sum;

if sum > 1000 {

break;

}

}

println(sum);

规则类型定义

赋值计算

数值类型

结束时间 - 开始时间 = 天数

金额计算

标准 * 人数 * 天数 = 金额

字符类型

校验规则

控件只读显隐

举例说明

1 内部函数使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值