Devs
Devs是一款輕量級的規則引擎。
開源地址:https://github.com/CrankZ/devs
基礎概念
此規則引擎的基礎概念有欄位、條件、規則等。
其中欄位組成條件,條件組成規則,並且支援多個條件通過與或組成一個規則。下面用常見的程式碼說明各個概念
程式碼舉例
規則分類
多個規則可組成一個模板,呼叫介面執行的時候是以模板為維度執行的。
模板
模板名稱 |
---|
模板1 |
規則模板對映表
模板id | 規則id |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
規則相關
欄位
欄位名稱 | 欄位編碼 | 欄位型別 | 取數型別 | 取數路徑 |
---|---|---|---|---|
name | 姓名 | STRING | REFLECT | engineServiceImpl#testReflect |
age | 年齡 | NUMBER | REFLECT | engineServiceImpl#testReflect |
條件
條件名稱 | 條件編碼 | 欄位編碼 | 邏輯比較符 | 期望值 |
---|---|---|---|---|
姓名是否等於張三 | C_NAME_IS_ZS | name | StringMethod.equals($EXPECT,$FACT) | 張三 |
年齡是否大於18歲 | C_AGE_GT18 | age | NumberMethod.gt($EXPECT,$FACT) | 18 |
規則
規則名稱 | 條件組 |
---|---|
姓名是否等於張三 | C_STRING_EQUALS1 |
年齡是否大於18歲 | C_NUMBER_GE1 |
使用者是否符合條件 | C_STRING_EQUALS1 && C_NUMBER_GE1 |
規則結果
呼叫介面執行時,結果會直接通過介面返回。
TODO: 儲存規則執行結果
TODO: 新增規則觸發器
ER圖
模板-規則關係
規則相關
規則執行結果
執行介面
URL:/engine/execute
METHOD:POST
入參
欄位名 | 欄位型別 | 是否必填 | 解釋 |
---|---|---|---|
templateId | Long | TRUE | 模板ID |
params | Map<String,Object> | FALSE | 引數 |
例子
{
"templateId": 1,
"params": {
"userId": 123
}
}
出參
驗收結果只有是、否、NULL。
執行結果為NULL,則只輸出內容,需要手動判斷
規則名稱 | 執行結果 | 條件組 | 實際取值 |
---|---|---|---|
姓名是否等於張三 | TRUE | 姓名是否等於張三 | "姓名": "張三" |
年齡是否大於18歲 | FALSE | 年齡是否大於18歲 | "年齡": 10 |
使用者是否符合條件 | FALSE | 姓名是否等於張三 && 年齡是否大於18歲 | "姓名": "張三", "年齡": 10 |
例子
{
"code": "0000",
"msg": "success",
"requestId": "",
"timestamp": 1637996239325,
"data": {
"templateId": 1,
"params": {},
"ruleResult": [
{
"ruleName": "姓名是否等於張三",
"trigger": true,
"conditions": "姓名是否等於張三",
"facts": {
"姓名": "張三"
}
},
{
"ruleName": "年齡是否大於18歲",
"trigger": false,
"conditions": "年齡是否大於18歲",
"facts": {
"年齡": 10
}
},
{
"ruleName": "使用者是否符合條件",
"trigger": false,
"conditions": "姓名是否等於張三 && 年齡是否大於18歲",
"facts": {
"姓名": "張三",
"年齡": 10
}
}
]
}
}