これは、私が 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 ルールから分離するにはどうすればよいですか?
ありがとうございました。