3

これは、私が Drools で行っていることのシナリオです。

サービスを表すPricingDetailsオブジェクト ( ) のリストを含むJava オブジェクト - があります。ServiceDrools

それぞれServiceDroolsに次のフィールドがあります。

  • サービス(番号)
  • サービスの種類 (番号)
  • レート

私がする必要があるのは、各の情報に従って、それぞれServiceDroolsのレートを変更することです。たとえば、次のようになります。

ServiceDroolsサービス 112 とタイプ 9、またはサービス 159 とタイプ 4 がある場合、 に 5% 割引を適用しますServiceDrools

私がやっている方法は次のとおりです。

rule "Test- service type 9, service 112 + service type 4, service 159"
   lock-on-active
when
    $detail : PricingDetails()
    $services : ArrayList( size > 1 ) from collect(
        ServiceDrools( (serviceType == 9 && service == 112) || 
                           (serviceType == 4 && service == 159) )
        from $detail.getServices()
    )
then
    modify( $detail ){
        setCostServices($services, .05);
    }
end 

最初の部分では、オブジェクトPricingDetailsは含まれるサービスのリストを取得し、リストされたサービスを見つけるために循環します。条件を満たすサービスが変数に格納されます$services

次に、次のコードを持つPricingDetailsfunction を呼び出すことによって object が変更されます。setCostServices($services, .05)

public void setCostServices(ArrayList<ServiceDrools> serviciosProcesar, 
                            Double porcentajeDescuento){
    Double suma = 0D;       
    for (ServicioDrools s: serviciosProcesar)
        suma += s.getTarifa();      
    Double nuevaTarifa = suma - (suma * porcentajeDescuento);       
    for (ServicioDrools s: serviciosProcesar)
        s.setTarifa( nuevaTarifa );     
}

コードを改善するにはどうすればよいですか? Java コードを Drools ルールから分離するにはどうすればよいですか?

ありがとうございました。

4

0 に答える 0