これは、私が 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
。
次に、次のコードを持つPricingDetails
function を呼び出すことによって 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 ルールから分離するにはどうすればよいですか?
ありがとうございました。