2017-03-22 14 views
0

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.

Antwort

Verwandte Themen