Drools Fusion规则语言:计步器规则
Drools Fusion rule language: pedometer rule
我是 Drools(6.3 版)的新手,我在想出特定规则时遇到了一些麻烦。我有一个名为 Steps 的 class,只有一个简单的字段 double steps;
。每个步骤事件代表自上一个事件以来采取的步骤,并且
我有一个工作规则,规定当你不做的时候你需要移动
最后一小时 50 步:
declare Steps
@role(event)
end
rule "STEPS RULE"
when
$totalSteps : Number( doubleValue < 50 ) from accumulate(
Steps( stepsCount : steps ) over window:time( 1h ) from entry-point
"entrySteps", sum( stepsCount ) )
then
System.out.println("STEPS RULE: get moving!");
end
现在每个事件都是自上次事件以来采取的步数,我希望它们代表累积步数。所以如果一个事件有 50 步,而你走了 20 步,那么我希望下一个事件有 70 步。问题是我怎样才能
更改我的规则以使其仍然有效?
对于计步器,您需要另一个 class,不同于 Steps,您的活动 class。更新计步器的规则很简单。
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
编辑 如果 Steps 已经包含累加值,它会稍微复杂一些,因为您需要计算 window 中第一个和最后一个计步器读数之间的差异.
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
每小时应该至少有一个读数或检测到这种情况的另一规则。
我是 Drools(6.3 版)的新手,我在想出特定规则时遇到了一些麻烦。我有一个名为 Steps 的 class,只有一个简单的字段 double steps;
。每个步骤事件代表自上一个事件以来采取的步骤,并且
我有一个工作规则,规定当你不做的时候你需要移动
最后一小时 50 步:
declare Steps
@role(event)
end
rule "STEPS RULE"
when
$totalSteps : Number( doubleValue < 50 ) from accumulate(
Steps( stepsCount : steps ) over window:time( 1h ) from entry-point
"entrySteps", sum( stepsCount ) )
then
System.out.println("STEPS RULE: get moving!");
end
现在每个事件都是自上次事件以来采取的步数,我希望它们代表累积步数。所以如果一个事件有 50 步,而你走了 20 步,那么我希望下一个事件有 70 步。问题是我怎样才能 更改我的规则以使其仍然有效?
对于计步器,您需要另一个 class,不同于 Steps,您的活动 class。更新计步器的规则很简单。
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
编辑 如果 Steps 已经包含累加值,它会稍微复杂一些,因为您需要计算 window 中第一个和最后一个计步器读数之间的差异.
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
每小时应该至少有一个读数或检测到这种情况的另一规则。