2016-10-24 4 views
1

Мое дело: если сумма снятия моего банковского счета превышает 1000 $ в течение любых 10 минут, например, 0m-10m, а затем 0m1s-10m1s, то 0m2s-10m2s, что является скользящим временным окном, банковская система должна отправить мне предупреждение.Как сделать проверку продолжительности окна слайдов продолжением Drools?

Итак, может ли кто-нибудь помочь мне написать правило Дролом?

Моя первоначальная идея ниже:

when 
       Number($total : intValue, intValue >= 1000) 
       from accumulate (Withdraw ($money : money) 
       over window:time(10m) 
       from entry-point ATMEntry, 
       sum($money)) 
then 
    System.out.println("Warning! too more withdraw:"+$total); 

Однако, это будет просто проверить предстоящих 10м за один раз. После первых 10 м, независимо от того, сколько единиц объектов, которые я вставляю в ATMEntry, я не получу предупреждающее сообщение.

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

Итак, возможно ли использовать Drools в моем случае?

Спасибо,

ответ

1

Вы должны вызвать оценку другим Withdraw события:

when 
      Withdraw() 
      Number($total : intValue >= 1000) 
       from accumulate (Withdraw ($money : money) 
        over window:time(10m) 
        from entry-point ATMEntry, 
        sum($money)) 
then 
    System.out.println("Warning! " + $total); 
end 

Если вам нужны отдельные события, которые могли бы быть лучше, чтобы собрать их в список. Это также может помочь закрыть один интервал с избытком вывода и открыть другой. Это зависит от деталей спецификации: когда поднимать аларам, а когда поднимать - или поднимать - следующий сигнал тревоги.

+0

Спасибо за ваш ответ. На самом деле, я не знаю, когда придет следующее событие. Поэтому я не смог собрать их в список. Итак, каждые 10 минут мне нужны слюни для наблюдения. Например, 0m-10m, а затем 0m1s-10m1s, затем 0m2s-10m2s, что является скользящим окном. И я просто кормлю каждое событие за один сеанс одним ATMEntry в режиме реального времени. Может ли Drools поддерживать эту функцию? – capcom923

+0

Вы можете написать правило, которое срабатывает при выходе Withdraw. Затем вы можете искать других за последние 10 минут. - Если вы посмотрите на фиксированные времена, вы можете что-то пропустить. – laune

+0

Итак, вы имеете в виду, что мне нужно уволить правило, когда приходит новый Снятие, верно? А как насчет сеанса? Если я должен использовать тот же сеанс, чтобы его запустить? – capcom923

 Смежные вопросы

  • Нет связанных вопросов^_^