3

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

谢谢你。

4

0 回答 0