现在遇到一个问题,就是都知道规则引擎是个好东西,但怎么用它却没有一个直观的概念.
因为看到的example都是很简单的,简单的东西什么工具都能做,要体现优势就需要有个复杂场景,这个场景在dmn里可以可视化开发,可视化运行,与之相对比用传统语言代码非常复杂难懂不易维护. 那这就很有说服性了
首先DMN是 OMG这个组织发布的规范
https://www.omg.org/spec/DMN/1.4/Beta1/PDF
给了几个例子,对应pdf中的几个章节
https://www.omg.org/spec/DMN/20211108/examples.zip
例子不是给drools用的, drools实现dmn是有差异的所以不能直接打开,对比能打开的dmn, 对官方给的例子做了些调整(替换文字的时候正则表达式…真好用,表示任意字符) 现在起码是能打开了,后续还要做些调整.比如import现在是粗暴的直接注释了.
文件等下上传 .另外提一点 workbench里的项目可以git管理代码
非常好用,dmn在本地一上传, kie-wb里就看到打印出来的解析dmn的错误堆栈
有了它才有了进行格式转换的可能(人肉转换)
dmn文件见:
https://download.csdn.net/download/wangduqiang747/86404649
文件有几个版本,用最新的那个
发布之后的请求如下:
post http://127.0.0.1:8080/kie-server/services/rest/server/containers/dumpli_1.0.0-SNAPSHOT/dmn
{
"model-namespace": "http://www.trisotech.com/definitions/_9d01a0c4-f529-4ad8-ad8e-ec5fb5d96ad4",
"model-name": "Chapter 11 Example",
"dmn-context": {
"Applicant data": {
"Age": 25,
"MaritalStatus": "M",
"EmploymentStatus": "EMPLOYED",
"ExistingCustomer": false,
"Monthly": {
"Income": 10000,
"Repayments": 2500,
"Expenses": 100000
}
},
"Requested product": {
"ProductType": "STANDARD LOAN",
"Rate": 0.08,
"Term": 36,
"Amount": 10000
},
"Bureau data": {
"Bankrupt": false,
"CreditScore": 100
},
"Supporting documents": {},
"Loan default data": "aaaaa"
}
}
请求的返回如下:
{
"type": "SUCCESS",
"msg": "OK from container 'dumpli_1.0.0-SNAPSHOT'",
"result": {
"dmn-evaluation-result": {
"messages": [],
"model-namespace": "http://www.trisotech.com/definitions/_9d01a0c4-f529-4ad8-ad8e-ec5fb5d96ad4",
"model-name": "Chapter 11 Example",
"decision-name": [],
"dmn-context": {
"Installment calculation": "function Installment calculation( Product Type, Rate, Term, Amount )",
"Bureau call type table": "function Bureau call type table( Pre-Bureau Risk Category )",
"Eligibility": "INELIGIBLE",
"Adjudication": 2,
"Loan default data": "aaaaa",
"Application risk score model": "function Application risk score model( Age, Marital Status, Employment Status )",
"Credit contingency factor table": "function Credit contingency factor table( Risk Category )",
"Application risk score": 125,
"Pre-bureau risk category": "LOW",
"Supporting documents": {},
"Bureau data": {
"Bankrupt": false,
"CreditScore": 100
},
"Eligibility rules": "function Eligibility rules( Pre-Bureau Risk Category, Pre-Bureau Affordability, Age )",
"Pre-bureau risk category table": "function Pre-bureau risk category table( Existing Customer, Application Risk Score )",
"Routing rules": "function Routing rules( Post-bureau risk category, Post-bureau affordability, Bankrupt, Credit score )",
"Post-bureau risk category": "HIGH",
"Requested product": {
"Rate": 0.08,
"Amount": 10000,
"ProductType": "STANDARD LOAN",
"Term": 36
},
"Routing": "DECLINE",
"Affordability calculation": "function Affordability calculation( Monthly Income, Monthly Repayments, Monthly Expenses, Risk Category, Required Monthly Installment )",
"Post-bureau affordability": false,
"Financial.PMT": "function Financial.PMT( Rate, Term, Amount )",
"Post-bureau risk category table": "function Post-bureau risk category table( Existing Customer, Application Risk Score, Credit Score )",
"Required monthly installment": 333.3636546143084985132842970339110,
"Applicant data": {
"MaritalStatus": "M",
"Monthly": {
"Repayments": 2500,
"Expenses": 100000,
"Income": 10000
},
"ExistingCustomer": false,
"EmploymentStatus": "EMPLOYED",
"Age": 25
},
"Strategy": "DECLINE",
"Bureau call type": "MINI",
"Pre-bureau affordability": false
},
"decision-results": {
"_5b8356f3-2cf2-40e8-8f80-324937e8b276": {
"messages": [],
"decision-id": "_5b8356f3-2cf2-40e8-8f80-324937e8b276",
"decision-name": "Bureau call type",
"result": "MINI",
"status": "SUCCEEDED"
},
"_b5e759df-f662-44cd-94f5-55c3c81f0ee3": {
"messages": [],
"decision-id": "_b5e759df-f662-44cd-94f5-55c3c81f0ee3",
"decision-name": "Eligibility",
"result": "INELIGIBLE",
"status": "SUCCEEDED"
},
"_4bd33d4a-741b-444a-968b-64e1841211e7": {
"messages": [],
"decision-id": "_4bd33d4a-741b-444a-968b-64e1841211e7",
"decision-name": "Adjudication",
"result": 2,
"status": "SUCCEEDED"
},
"_e905f02c-c5d9-4f2a-ba57-7912ff523b46": {
"messages": [],
"decision-id": "_e905f02c-c5d9-4f2a-ba57-7912ff523b46",
"decision-name": "Application risk score",
"result": 125,
"status": "SUCCEEDED"
},
"_ed60265c-25e2-400f-a99f-fafd3b489838": {
"messages": [],
"decision-id": "_ed60265c-25e2-400f-a99f-fafd3b489838",
"decision-name": "Pre-bureau affordability",
"result": false,
"status": "SUCCEEDED"
},
"_40b45659-9299-43a6-af30-04c948c5c0ec": {
"messages": [],
"decision-id": "_40b45659-9299-43a6-af30-04c948c5c0ec",
"decision-name": "Post-bureau risk category",
"result": "HIGH",
"status": "SUCCEEDED"
},
"_728e3a50-f00f-42c0-b3ee-1ee5aabd5474": {
"messages": [],
"decision-id": "_728e3a50-f00f-42c0-b3ee-1ee5aabd5474",
"decision-name": "Post-bureau affordability",
"result": false,
"status": "SUCCEEDED"
},
"_3c8cee68-99dd-418c-847d-0b54697354f2": {
"messages": [],
"decision-id": "_3c8cee68-99dd-418c-847d-0b54697354f2",
"decision-name": "Required monthly installment",
"result": 333.3636546143084985132842970339110,
"status": "SUCCEEDED"
},
"_ca1e6032-12eb-428a-a80b-49028a88c0b5": {
"messages": [],
"decision-id": "_ca1e6032-12eb-428a-a80b-49028a88c0b5",
"decision-name": "Routing",
"result": "DECLINE",
"status": "SUCCEEDED"
},
"_9997fcfd-0f50-4933-939e-88a235b5e2a0": {
"messages": [],
"decision-id": "_9997fcfd-0f50-4933-939e-88a235b5e2a0",
"decision-name": "Pre-bureau risk category",
"result": "LOW",
"status": "SUCCEEDED"
},
"_8b838f06-968a-4c66-875e-f5412fd692cf": {
"messages": [],
"decision-id": "_8b838f06-968a-4c66-875e-f5412fd692cf",
"decision-name": "Strategy",
"result": "DECLINE",
"status": "SUCCEEDED"
}
}
}
}
}