我是Drools(版本6.3)的新手,我在制定特定规则时遇到了一些麻烦。我有一个名为Steps的类,只有一个简单的字段AccountDescription
。每个步骤事件代表自上一个事件以来所采取的步骤
我有一个工作规则,说当你不这样做时你需要动起来
最后一小时50步:
double steps;
现在相反,每个事件都是自上一个事件以来所采取的步骤,我希望它们代表累积步骤。因此,如果一个事件有50个步骤,你需要20个步骤,那么我希望下一个事件有70个步骤。问题是我怎么能 改变我的规则,以便它仍然可以工作?
答案 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
每小时应该至少有一个读数或另一个检测到这种情况的规则。