# rule-engine **Repository Path**: tangkaihua/rule-engine ## Basic Information - **Project Name**: rule-engine - **Description**: DSL+MVEL实现一个简单的规则引擎 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2023-05-05 - **Last Updated**: 2023-08-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # rule-engine #### 介绍 {**以下是 Gitee 平台说明,您可以替换此简介** Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} #### 软件架构 业务背景: 领域:贷款规则1: 一个人有资格获得住房贷款吗? 规则1:如果: 1、他的月薪超过5万; 2、他的信用评分超过了800分; 3、且申请贷款金额小于40L; 4、银行今年的住房贷款目标没有实现。批准住房贷款; 5、批准申请贷款金额的80%; 规则2:一个人有资格获得住房贷款? 如果: 1、他的月薪在3500英镑以上,在5万英镑以下; 2、他的信用评分不到500分; 3、且申请的贷款金额小于20L; 4、银行今年的住房贷款目标没有实现,批准住房贷款; 5、制裁申请贷款金额的60%; 将上面两个业务规则转换未DSL+MVEL规则,实现一个简单的规则引擎 DSL+MVEL规则: #Loan Rule 1:Condition:input.monthlySalary >= 50000&& input.creditScore >= 800&& input.requestedLoanAmount < 4000000&& $(bank.target_done) == false Action:output.setApprovalStatus(true);output.setSanctionedPercentage(90);output.setProcessingFees(8000); #Loan Rule 2:Condition:input.monthlySalary >= 35000 && input.monthlySalary <= 50000&& input.creditScore <= 500 && input.requestedLoanAmount < 2000000&& $(bank.target_done) == false Action:output.setApprovalStatus(true);output.setSanctionedPercentage(60);output.setProcessingFees(2000); 说明: 1、其中的$(bank.target_done) 是特定于域的关键字,这里将解决并返回有关贷款的银行状态,今年的住房贷款目标是否完成(真/假); 2、这里的 input 和 output 关键字代表两个 java 对象,输入对象作为输入数据传递给规则引擎,并根据该数据执行所有贷款规则。而最后,它会以输出对象的形式返回结果。UserDetails 是一个输入对象,LoanDetails 是一个输出结果对象 #### 安装教程 1. git clone https://gitee.com/tangkaihua/rule-engine.git 2. 导入IDEA 运行项目 3. 数据库脚本见rule.sql文件 #### 使用说明 1. 已实现单元测试,单元测试验证规则 2. 通过postman接口调试测 --测试数据 /loan 接口参数 { "creditScore": 900, "firstName": "Mark", "lastName": "K", "age": "25", "accountNumber": 123456789, "bank": "ABC BANK", "requestedLoanAmount": 3500000.0, "monthlySalary": 70000.0 } 返回: { "accountNumber": null, "approvalStatus": true, "interestRate": null, "sanctionedPercentage":90.0, "processingFees": 8000.0 } #### 参与贡献 #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)