我定义了一个充当规则引擎事件的类
它有以下成员 电话号码 纬度 经度
我如何制定一条规则 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
答案 0 :(得分: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代码中开发一个accumulate函数,实现org.drools.core.runtime.rule.TypedAccumulateFunction
并使用简单的语法运行它。