Я новичок в механизмах правил, в настоящее время изучаю основы.
Я хочу предложить своим пользователям возможность определить некоторые правила для изменения своих данных.Так что я играю с идеей реализации механизма правил для этого.Данные создаются системой и выглядят более или менее следующим образом:
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 закончил цикл?Я думаю, что я не понимаю концепцию правильно.
Примечание. На данный момент нет определенного механизма правил, сейчас я просто заново исследую и проверяю, является ли механизм правил правильным способом для таких ситуаций.мои пользователи ..