Dies ist ein Kreditgeschäft, wenn ein Benutzer kommen, um Geld zu leihen, sollte eine Batch-Regel von drools
ausführen, um eine endgültige Entscheidung zu generieren: Refuse/Manual Review/Pass.So rufen Sie eine Methode auf Anfrage auf
Zum Beispiel gibt es diese Regeln:
- 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
und so weiter.
Oberhalb jeder Regel entspricht eine Service-Schnittstelle. Weil ein anderes Szenario unterschiedliche Regeln zur Ausführung hat, z. Szene 1 sollte Regel ausführen: 1 3 5, Szene 2 sollte Regel ausführen: 2 4 6.
Bevor Brand Regel-Engine sollte alle Daten erhalten, die sie benötigen. Zum Beispiel in Szene 1 kommt ein Benutzer, um Geld zu leihen, und diese Szene sollte Regel 1 3 5 ausführen, also sollte ich zuerst alle Daten bekommen. Jetzt habe ich unten Methode, dies zu realisieren - das ist Call-Methode 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;
}
Offensichtlich ist diese Art und Weise nicht sehr klug ist, so möchte ich wissen, wie es elegant zu implementieren.