0.9.14 • Published 4 years ago
json-engine v0.9.14
JSON Engine
基于 JSON 的规则引擎。
由来
https://yuque.antfin-inc.com/docs/share/5ca023f4-86a2-408b-8c56-50271f9a9dd7#
规则示例
{
define: { // 预定义,不需要进行展示处理的字段
orderStatus: 'WAIT_SHIPPING',
actualMaxRefundAmount: 100,
operation: 'abortOrder',
negotiationPropose: 'shipped_part_refund',
userInput: 3,
aaa: 2,
c: {
d: 1,
},
e: [{
f: 2,
}],
},
output: { // 数据池,规则可以自动从define里面抓取数据生成。如需设置默认字段,也可以写在此处
issueId: 'xxxx',
},
rules: { // 规则
rule0: { // 规则 block
and: [{
key: '%{aaa}',
op: '==',
value: '2',
}],
},
rule1: { // 规则 block
and: [{ // and or not
key: '%{aaa}',
op: '==', // le ge lt gt is not eq exist
value: 2,
}, {
or: [{
key: '%{operation}',
op: '===', // le ge lt gt is not
value: 'abortOrder',
}, {
key: 'negotiationPropose',
op: 'shipped_part_refund', // 错误的 operator 会被忽略并返回false
value: 'x',
}],
}, {
extend: 'rule0',
}],
},
rule2: {
extend: 'rule0',
},
rule3: {
and: {
extend: 'rule1',
},
not: {
key: 1,
op: '==',
value: 2,
},
},
rule4: {
extend: 'rule3',
},
rule5: [{
key: 1,
op: '==',
value: 1,
}, {
extend: 'rule1',
}],
rawTest: {
raw: 'Date.now() > 1', // 此方法会被 eval 直接运行,尽量避免直接使用此语句
},
arrayTest: {
key: '%{e.0.f}',
op: '==',
value: '2',
},
orTest: {
or: [{
key: '%{e.0.f}',
op: '==',
value: '1',
}, {
key: '2',
op: '==',
value: 2,
}],
},
},
init: {
name: {
value: 'aaa', required: false,
},
},
observe: { // 进入观察的字段
issueId: {
rule5: { // 规则匹配后执行的动作,默认只支持 add 及 remove,如需要更多动作,请自己定义
add: 'userInput',
remove: 'aaa',
aaaaAlias: 'text',
},
},
}, // 指定被观察字段所使用的规则
actions: { // 自定义动作存入区,此处对接开发代码
aaaaAlias: 'myFunc',
},
}
详细用法见 example