rule "rule24" when $w:Event( $channel : getChannelid() == "transfer", $card : getCard_no(), $time : getOper_time().getTime() ) Number( intValue >= 30 ) from accumulate ( $e:Event( getChannelid() == $channel, $histime : getTransactionTime().getTime() < $time, getTransactionTime().getTime() > $time - 30 * 24 * 60 * 60 * 1000L, getCard_no() == $card, ) from $w.getEventList(), init(int num = 1;) , action(num++;), reverse() , result(num) ) then $w.addCardRuleList(24); end这个有语法错误么
时间: 2024-01-24 10:01:41 浏览: 75
getcard-1.0.rar_linux 多线程
这段规则的语法有些问题。以下是修正后的规则:
```
rule "rule24"
when
$w : Event(
$channel : getChannelid() == "transfer",
$card : getCard_no(),
$time : getOper_time().getTime()
)
accumulate(
$e : Event(
getChannelid() == $channel,
getTransactionTime().getTime() < $time,
getTransactionTime().getTime() > $time - 30 * 24 * 60 * 60 * 1000L,
getCard_no() == $card
);
$count : count($e);
$count >= 30
)
then
$w.addCardRuleList(24);
end
```
这个规则会匹配所有渠道为"transfer"的事件,并在滑动窗口内累加与该事件卡号相同且时间在最近30天内发生的交易记录。如果交易数量大于等于30,则会触发规则,将规则编号24添加到该事件的卡号规则列表中。
需要注意的是,这里的Event是一个自定义的类,包含了getChannelid、getCard_no、getOper_time和getTransactionTime等方法。在规则中使用了模式(pattern)来匹配满足条件的事件和交易记录,并使用累加器(accumulator)来对交易记录进行聚合计算。为了方便起见,这个累加器使用了Drools内置的count函数来计算交易数量,但也可以使用其他自定义的函数来实现更加复杂的计算逻辑。
阅读全文