Drools 以通用方式编写drl

Drools 以通用方式编写drl,drools,drools-guvnor,drools-fusion,Drools,Drools Guvnor,Drools Fusion,我的要求是,我需要计算来自同一客户的订单请求,而无需在规则中硬编码customerid。 原因是如果我有1000个客户,那么我需要为同样的客户编写1000条规则。 为了避免这种情况,我需要一种处理所有客户对象的通用方法 例如,customerA和customerB有四个order resquest对象。我的规则应该能够计算出单个客户的请求数量,并且我需要存储这些对象 基本上,我需要drools中sql的等价分组方法 请提供指针您尝试过类似的方法吗 rule 'Count Order Reques

我的要求是,我需要计算来自同一客户的订单请求,而无需在规则中硬编码customerid。 原因是如果我有1000个客户,那么我需要为同样的客户编写1000条规则。 为了避免这种情况,我需要一种处理所有客户对象的通用方法

例如,customerA和customerB有四个order resquest对象。我的规则应该能够计算出单个客户的请求数量,并且我需要存储这些对象

基本上,我需要drools中sql的等价分组方法


请提供指针

您尝试过类似的方法吗

rule 'Count Order Requests'
when
    $c: Customer()
    $n: Number() from accumulate( 
        $o: OrderRequest(customer == $c),
        count($o)
    )
then
    //use $n
end
即使对于没有任何订单请求的客户,此规则也会触发。如果这不是您想要的,那么您必须在intValue$n上添加一个约束:

$n: Number(intValue > 0) from accumulate (....)

希望能有所帮助,

我需要的是特定于客户的订单。而不是您需要的订单号?然后可以使用collectSet($o)更改计数($o),并将Number()更改为Set()。在规则的RHS中,您将拥有属于客户的所有订单集。然后,您可以将其保存在地图中,或者执行任何需要的操作。