这是我在 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 规则分开?
谢谢你。