这是我在 Drools 中所做的场景。
有一个 Java 对象 - ,其中包含代表服务PricingDetails的对象列表 ( )。ServiceDrools
每个ServiceDrools都有以下字段:
- 服务号)
- 服务类型(数量)
- 速度
我需要做的是根据 each 的信息ServiceDrools,更改每个的 rate,例如:
如果 aServiceDrools具有服务 112 和类型 9,或服务 159 和类型 4,则对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调用函数修改对象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 规则分开?
谢谢你。