Как сделать проверку времени окна continues slide с помощью Drools?

#drools #rule-engine

#drools #механизм правил

Вопрос:

Мой случай таков: если сумма снятия с моего банковского счета превышает 1000 долларов в течение любых продолжающихся 10 минут, например, 0-10 минут, а затем 0-1-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);
  

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

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

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

Спасибо,

Ответ №1:

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

 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
  

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

Комментарии:

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

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

3. Итак, вы имеете в виду, что мне нужно запускать правило при поступлении нового отзыва, верно? А как насчет сеанса? Должен ли я использовать тот же сеанс для его запуска?

4. В этих сценариях вам обычно требуется один сеанс, который выполняется непрерывно. Но вам может не понадобиться выполнять обнаружение мошенничества в режиме реального времени — вы все равно не сможете отправить группу к банкомату. Если вы периодически запускаете это приложение, вам нужно убедиться, что прерывания обрабатываются правильно, т. Е. без пропуска избыточного овердрафта.