Написание drl в общем виде

Мое требование состоит в том, что мне нужно подсчитывать запросы заказов от одного и того же клиента без жесткого кодирования идентификатора клиента в правиле. Причина в том, что если у меня есть 1000 клиентов, мне нужно написать 1000 правил для одного и того же. Чтобы избежать этого, мне нужен общий способ обработки всех объектов клиента.

например, есть четыре объекта запроса заказа от клиента A и клиента B. Мое правило должно определять количество запросов от отдельного клиента, а также мне нужно хранить эти объекты.

В основном мне нужна группа sql эквивалентным методом в drools.

Пожалуйста, предоставьте указатели


person user1668653    schedule 20.02.2013    source источник


Ответы (1)


Вы пробовали что-то подобное?:

rule 'Count Order Requests'
when
    $c: Customer()
    $n: Number() from accumulate( 
        $o: OrderRequest(customer == $c),
        count($o)
    )
then
    //use $n
end

Это правило будет срабатывать даже для клиентов без запроса OrderRequest. Если это не то, что вы ищете, вы должны добавить ограничение на intValue $n:

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

Надеюсь, поможет,

person Esteban Aliverti    schedule 20.02.2013
comment
Мне нужны конкретные заказы клиентов. - person user1668653; 20.02.2013
comment
Вместо числа вам нужны заказы? Затем вы можете изменить count($o) с помощью collectSet($o) и изменить Number() на Set(). В правой части вашего правила у вас будет набор всех заказов, принадлежащих покупателю. Затем вы можете сохранить это в Map‹customerId, Set‹OrderRequest›› или сделать все, что вам нужно. - person Esteban Aliverti; 20.02.2013