Как реализовать циклы в двигателях правил? - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в механизмах правил, в настоящее время изучаю основы.

Я хочу предложить своим пользователям возможность определить некоторые правила для изменения своих данных.Так что я играю с идеей реализации механизма правил для этого.Данные создаются системой и выглядят более или менее следующим образом:

Destination, Dispatcher, NumberOfEvents, Price
Germany,     D1,         15,             150.0
Germany,     D5,         20,             200.0
Germany,     DWrong,     20,             200.0
Spain,       D1,          5,             50.0
Spain,       D4,         15,             150.0

Так, например, для предоставления 10% скидки всем Диспетчеру, когда пунктом назначения является «Испания», пользователь может добавить следующее правило:

Rule1:
When 
    (country == Spain) 
Then 
    Price * 0.9

Теперь, если есть запись с Dispatcher, равной DWrong, пользователь также хотел бы создать еще одну запись с Dispatcher, равную «Ошибка» (и другие значения, такие же, как «DWrong»«).Например:

Germany,     Error,      20,             200.0

Но запись должна создаваться только в том случае, если NumberOfEvents в «DWrong» больше 1% от общего числа NumberOfEvents для того же пункта назначения.

Псевдокод будетчто-то вроде этого:

loop (Destination) // Germany, Spain
{
    loop () {    
        TotalNumberOfEvents += NumberOfEvents;
    }

    loop () {
        if (Dispatcher == "DWrong") {
            if (NumberOfEvents > (TotalNumberOfEvents * 0.01) ) {
                createRow(Destinaction, "Error", NumberOfEvents, Price);
            }
        }
    }    
}

Я до сих пор придумал:

Rule1:
When 
    (Destination == "Germany") 
Then 
    global_GermanyTotalNumberOfEvents += NumberOfEvents

Rule2:
When 
    (Destination == "Germany" && Dispatcher == "DWrong" && NumberOfEvents > (global_GermanyTotalNumberOfEvents * 0.01)) 
Then 
    createRow(Destination, "Error", NumberOfEvents, Price)

// Repeat for spain

Это выглядит не очень дружелюбно для пользователя, но это нормально.Но я не уверен, как запустить rule2 после того, как rule1 закончил цикл?Я думаю, что я не понимаю концепцию правильно.

Примечание. На данный момент нет определенного механизма правил, сейчас я просто заново исследую и проверяю, является ли механизм правил правильным способом для таких ситуаций.мои пользователи ..

...