当前位置: 首页 > 知识库问答 >
问题:

针对不同用户的Drools规则

卫才哲
2023-03-14
import hellodrools.Steps
import hellodrools.HeartRate
import hellodrools.AppInfo

declare AppInfo
    @role(event)
end

declare Steps
    @role(event)
end

declare HeartRate
    @role(event)    
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!");
    System.out.println($lst + "   " + $fst);

end

rule "HEARTRATE RULE 1"
when
    $heartrate : HeartRate(heartRate >= 150) from entry-point "entryHeartRate"
then
    System.out.println("Heartrate is to high!");
end

rule "HEARTRATE RULE 2"
when
    $heartrate : HeartRate(heartRate <= 50 && heartRate >= 35) from entry-            point "entryHeartRate"
then
    System.out.println("Heartrate is to low!");
end

rule "HEARTRATE RULE 3"
when
    $heartrate : HeartRate(heartRate < 35 && heartRate >= 25) from entry-point "entryHeartRate"
then
    System.out.println("Heartrate is critical low!");
end

rule "HEARTRATE RULE 4"
when
    $max : Double() from accumulate(
        HeartRate( $heartrates : heartRate ) over window:time( 10s ) from entry-point "entryHeartRate",
        max( $heartrates ) )&&
    $min : Double() from accumulate(
        HeartRate( $heartrates : heartRate ) over window:time( 10s ) from entry-point "entryHeartRate",
        min( $heartrates ) )&&
    eval( ($max - $min) >= 50 )
then
    System.out.println("Heartrate to much difference in to little time!");
end
int heartRate;
Date timeStamp;
String macAddress;

我的步骤事件有以下字段:

double steps;
Date timeStamp;
String macAddress;

共有1个答案

宋弘壮
2023-03-14

这很简单:您需要定义一个事实,用字符串Macaddress将其称为Walker,用规则应该处理的MAC地址创建它,然后

rule "ACC STEPS RULE"
when
  Walker( $mac: macAddress )
  accumulate( Steps( $s : steps, macAddress == $mac )
              over window:time( 1h ) from entry-point "entrySteps"; 
      $fst: min( $s ), $lst: max( $s );
      $lst - $fst < 50 )
  then ... end

与其他规则类似。-您可以通过定义一个基本规则来(稍微)简化这一点

rule "MAC"
when
  Walker( $mac: macAddress )
then end

并将其他规则编写为扩展:

rule "ACC STEPS RULE" extends "MAC" ...
 类似资料:
  • 我最近开始使用Esper编程,我有一个智能可穿戴设备,可以将计步器数据发送到我的笔记本电脑。然后,我使用esper处理这些数据。但假设我有多个智能穿戴设备,每个都有一个唯一的MAC地址。我使用时间窗口,我的问题是如何更改规则文件,使规则仅对具有相同MAC地址的事件触发,并基于此MAC地址采取适当的操作。我的初始化和规则是: “我的步骤”类具有以下字段: 以下是我插入事件的方式: 这是我的输出: 为

  • 在drool引擎中,如何在THEN部分中将新对象作为响应填充?我希望用另一个专用对象返回答案,而不是LiabilityRequestDto。谢谢你的帮助

  • 环境:Drools版本-5.1.1,dicult=mvel 注意:该类属于第三方库,因此我不能更改“IsValid”字段的名称

  • 我对流口水还很陌生,可能正在做一些非常愚蠢的事情。问题是,出于某种原因,我的口水规则没有被解雇。使用的drools版本为5.4 如果有帮助,当我转换回并使用执行方法来触发规则时,规则会触发。但是,我需要使用来过滤规则,并且我了解还不支持议程过滤器。作为第一步,我只是将会话翻转到,插入事实并触发所有规则。 不得不谦恭地说,在过去几天里,我在这件事上伤了头。太糟糕了,文档对drools来说不是那么友好

  • 我有两个事实,分别命名为OptionalCover和OptionalPremiumComponent,其中有OptionalPremiumComponent的参考。这就是我在工作记忆中插入的内容。 我在drools中创建了以下规则 问题是,插入父对象时没有触发上述规则。我还需要做些什么来实现这种行为吗?是否支持? 谢谢你。

  • 我是规则引擎新手,我的应用程序需要从文件系统动态加载xml文件中的规则,因为管理员可以在运行时创建规则。(Java) 我的问题是:有没有可能流口水?如果是,那么请分享知识,如果不是,那么还有其他选择吗?