0

我定义了一个作为规则引擎事件的类

它有以下成员 1. 电话号码 2. 纬度 3. 经度

我如何制定一个规则,其中 1. 该规则计算同一位置的不同人数 2. 如果同一个人在 1 分钟间隔内多次穿过同一位置,则应仅计为一个,不应重复

我制定了以下规则,但它似乎不起作用

import locationbasedservices.LocationEvent;

declare LocationEvent
  @role(event)
  @expires(1m)
end

rule "footfallcount"
when
  LocationEvent ( $msisdn : msisdn )
  $footfallcnt : Number(intValue > 0)
    from accumulate( LocationEvent(latitude=="77.77", longitude=="77.77",
                                   age>31 && <40, arpu>40.00, gender=="MALE")
                       from entry-point LocationSvc,
  not ArrayList( size >= 2 )
    from collect( LocationEvent( msisdn == $msisdn )
                    from entry-point LocationSvc),
          count(1))
then
  System.out.println("Footfall: " + $footfallcnt);
end

有人可以帮忙吗?

问候 Subbu

4

1 回答 1

0

这就是我的想法:

$m2e: Map( $size: size )
        from accumulate ( $le: LocationEvent ( latitude == "77.77", longitude == "77.77",
                                               age > 31 && < 40, arpu > 40.00,
                                               gender == "MALE", $msisdn : msisdn )
                                 over window:time( 1m ),
                          init( Map m2e = new HashMap(); ),
                          action( m2e.put( $msisdn, $le ); ),
                          result( m2e ) )

请仔细注意 Drools 手册中有关累积的部分所说的内容:最好在 Java 代码中开发累积函数,org.drools.core.runtime.rule.TypedAccumulateFunction使用简单的语法实现和运行它。

于 2014-02-24T10:02:47.357 回答