这是一项贷款业务,当用户来借钱时,应按drools
执行批量规则以产生最终决定:拒绝/手动审核/通过。
例如,有以下规则:
- rule1 count(userId, refuse) > 1 ? Manually Review : Pass
- rule2 count(userId, manuallyReview) > 2 ? Manually Review : Pass
- rule3 count(userId, distinct institution between 1 year) > 5 ? Manually Review : Pass
- rule4 count(userId,distinct institution count between 1 month) > 3 ? Manually Review : Pass
- rule5 count(userId,distinct institution count between 7 days) > 1 ? Manually Review : Pass
- rule6 count(userId) > 0 ? Manually Review : Pass
- rule7 sum(notYetSettledAmount) > 0 ? Refuse : Pass
等等。
每条规则对应一个服务接口。因为不同的场景具有不同的执行规则,例如场景1应该执行规则:1 3 5,场景2应该执行规则:2 4 6。
在启动规则引擎之前应获取所需的所有数据。例如,在场景1中,一个用户来借钱,这个场景应该执行规则1 3 5,所以首先我应该获得所有数据。现在我有以下方法来实现它 - 即调用方法on demand
List<RuleData> getRuleDataList(String userId,List<String> ruleNoList){
List<RuleData> result = ...
if(ruleNoList.contains("RN001")){
result.add(getRule1Data(userId)); //get data of rule 1 e.g. count(userId, refuse)
}
else if(ruleNoList.contains("RN002")){
result.add(getRule2Data(userId)); // get data of rule 2 e.g. count(userId, manuallyReview)
}
...
return result;
}
显然这种方式不是很聪明,所以我想知道如何更优雅地实现它。