这就是我在Drools所做的事情。
有一个Java对象 - PricingDetails
,包含代表服务的对象列表(ServiceDrools
)。
每个ServiceDrools
都有以下字段:
我需要做的是根据每个ServiceDrools
的信息,更改每个{1}的费率,例如:
如果ServiceDrools
有服务112和类型9,或服务159和类型4,则对ServiceDrools
应用5%的折扣。
我正在做的方式是:
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
来修改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规则分开?
谢谢。