Мое дело: если сумма снятия моего банковского счета превышает 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 в моем случае?
Спасибо,
Спасибо за ваш ответ. На самом деле, я не знаю, когда придет следующее событие. Поэтому я не смог собрать их в список. Итак, каждые 10 минут мне нужны слюни для наблюдения. Например, 0m-10m, а затем 0m1s-10m1s, затем 0m2s-10m2s, что является скользящим окном. И я просто кормлю каждое событие за один сеанс одним ATMEntry в режиме реального времени. Может ли Drools поддерживать эту функцию? – capcom923
Вы можете написать правило, которое срабатывает при выходе Withdraw. Затем вы можете искать других за последние 10 минут. - Если вы посмотрите на фиксированные времена, вы можете что-то пропустить. – laune
Итак, вы имеете в виду, что мне нужно уволить правило, когда приходит новый Снятие, верно? А как насчет сеанса? Если я должен использовать тот же сеанс, чтобы его запустить? – capcom923