Drools Fusion规则语言:计步器规则

时间:2016-02-29 20:22:13

标签: java drools complex-event-processing drools-fusion

我是Drools(版本6.3)的新手,我在制定特定规则时遇到了一些麻烦。我有一个名为Steps的类,只有一个简单的字段AccountDescription。每个步骤事件代表自上一个事件以来所采取的步骤 我有一个工作规则,说当你不这样做时你需要动起来 最后一小时50步:

double steps;

现在相反,每个事件都是自上一个事件以来所采取的步骤,我希望它们代表累积步骤。因此,如果一个事件有50个步骤,你需要20个步骤,那么我希望下一个事件有70个步骤。问题是我怎么能 改变我的规则,以便它仍然可以工作?

1 个答案:

答案 0 :(得分:1)

对于计步器,您需要另一个课程,与您的活动课程不同。更新计步器的规则很简单。

rule "create pedometer"
when
    Steps( $s: steps )
    not Pedometer()
then
    insert( new Pedometer( $s ) );
end

rule "update pedometer"
no-loop
when
    Steps( $s: steps )
    $p: Pedometer( $r: readout )
then
    modify( $p ){
        setReadout( $r + $s )
    }
end

编辑如果步骤已包含累计值,则会更复杂一些,因为您需要计算窗口中第一个和最后一个计步器读数之间的差异。

rule "ACC STEPS RULE"
when
    accumulate( Steps( $s : steps )
                over window:time( 1h ) from entry-point "entrySteps"; 
        $fst: min( $s ), $lst: max( $s );
        $lst - $fst < 50 )
then
    System.out.println("STEPS RULE: get moving!");
end

每小时应该至少有一个读数或另一个检测到这种情况的规则。