簡體   English   中英

流口水僅對插入事件觸發規則

[英]Drools rule fire only for inserted event

我每個發送計步器數據的傳感器都有多種用途。 我有一個基於macAddress的規則文件,將觸發該規則:

declare Steps
    @role(event)
end

declare User
    @role(fact)
end

rule "MAC"
when
  User( $mac: macAddress ) from entry-point "entrySteps"
then end

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

我的用戶只有一個macAddress字段,而Steps事件具有以下字段:

double steps;
Date timeStamp;
String macAddress;

現在,當我為每個 macAddress插入一個事件時,如果具有該macAddress的用戶在過去一小時內的步數少於50,則該規則將觸發。因此,如果滿足此條件,則將為每個macAddress觸發該規則。 但我希望該規則只能針對插入的Step事件的macAddress觸發。 如何調整規則?

奇怪的是,當只有一個用戶並且沒有該用戶的任何步驟時,也會觸發,即窗口為空。 輸出包含最小和最大double值-不確定這是否是Drools中的錯誤。

解決方法是添加一個對累積計數的測試,可能大於0或大於1。

accumulate( Steps( $s : steps , macAddress == $mac )
        over window:time( 1h ) from entry-point "entrySteps";
    $fst: min( $s ), $lst: max( $s ), $cnt: count( $s );
    $cnt > 0, $lst - $fst < 50 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM