在这种情况下,如何将Java代码与Drools规则分开?

时间:2013-06-24 17:59:24

标签: java drools

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

谢谢。

0 个答案:

没有答案