基本问题(通常如此)是需求的 真正 含义。“上周发生”事件可能是7 * 24 * 60 *60秒前发生的任何事情;从20151228星期一到现在,或者从20151227星期日到现在,这可能是发生的事情,或者可能只是日期很重要,而不是一天中的时间。
询问其真正含义,然后相应地改写您的问题。
如果确实需要一个滑动窗口,请从“现在”返回,即恰好是这一刻,在一定的时间间隔( w 秒)内,您仍然需要定义必须执行此检查的速度和准确性。
从绝对意义上讲,Drools并没有不断更新“现在”的概念。 使用计时器(可能比使用侦听器更好)可以创建和维护代表“现在” 近似值
的事实。事实必须每 d 秒定期更新一次。如果您在最后一次更新Now 之后 插入带有时间戳的新事件,则最多 d
秒将无法识别该事件。(如果您插入的新事件的时间戳为 __过去的 w 和 w + d 秒,则有可能触发规则。)
由于您尚未指出如何插入事件以及如何实现事件的时间戳,因此我无法提供规则说明我所概述的内容。请参阅Drools文档中有关“计时器和日历”的信息。
编辑
问题中没有说的是事件的 时间 (即事件在现实世界中真正发生的 时间 )与其 时间戳 (即事件被输入到工作记忆中)之间的关系。检查事件
时间戳记 在上周,上个月或第二秒的规则是徒劳的:这将始终是正确的。
如果您反复调用fireAllRules,则在调用之前回溯1周(月,…)的时间戳来更新时间范围是一种简单的方法。或在每次通话前立即更新。两者都不是“hacky”。



