如何在规则引擎中实现循环?

时间:2019-02-21 16:19:25

标签: algorithm rule-engine

我是规则引擎的新手,目前正在学习基础知识。

我想让我的用户可以定义一些规则来修改他们的数据。因此,我正在考虑为此实现规则引擎的想法。数据是由系统创建的,看起来或多或少如下:

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等于“ Error”的条目(其他值与“ DWrong”相同)。例如:

Germany,     Error,      20,             200.0

但是仅当“ DWrong”中的NumberOfEvents大于同一目的地的NumberOfEvents总数的1%时,才应创建条目。

伪代码将如下所示:

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

这对用户来说不太友好,但是可以。但是我不确定在rule1完成循环之后如何运行rule2?我认为我的概念不正确。

注意:目前还没有特定的规则引擎,目前我只是在研究并检查规则引擎是否适合用户使用这种情况。

0 个答案:

没有答案