关于累积事实的 Drools 复杂规则建议
Drools Complex Rule Advice on Accumulating Facts
我需要一些关于如何为以下情况编写规则的建议。首先,这是我的事实:
SessionClock($now : new Date(getCurrentTime()))
ClickEvent( $userId : userId, $productId : productId, $event : "FAVORITE" / "REMOVE_FAVORITE" )
Product($id : id, $endDate : endDate)
Purchase ( $userId : userId, $purchasedProducts : purchasedProducts )
其中 purchasedProducts
是 List
的:
PurchasedProduct( $id : id, $price : price)
现在我想每次在特定时间发送通知:
- 今天是产品的结束日期
- 用户已收藏但未取消收藏产品(来自
ClickEvent
)和
- 用户还没有购买产品(来自
Purchase
)并且
- 在一个通知中包含所有此类产品(基本上我需要
collect
个产品)
感谢您对此提供的任何帮助。
提前致谢!
分步执行此操作可能是个好主意
rule "interesting user/product"
when
SessionClock( $now: time )
Purchase( $uid: userId, $purchases: purchasedProducts )
ClickEvent( userId == $uid, $pid: productId,
event == "FAVORITE" )
not ClickEvent( userId == $uid, productId == $pid,
event == "REMOVE_FAVORITE" )
Product( id == $pid, $endDate: endDate )
eval( endDateIsToday( $now, $endDate ) )
then
end
rule "make Collection" extends "interesting user/product"
when
not Collection( userId == $uid )
then
insert( new Collection( $uid ) )
end
rule "fill Collection" extends "interesting user/product"
when
$coll: Collection( userId == $uid, products not contains $pid )
then
modify( $coll ){ addProduct( $pid ) }
end
第三条规则,运行降低显着性,可以做通知。
Edit 澄清一下,endDateIsToday
是 (DRL) 函数或静态方法。集合是一个 class,您需要使用几个字段来定义:userId 和一组产品 ID。
我需要一些关于如何为以下情况编写规则的建议。首先,这是我的事实:
SessionClock($now : new Date(getCurrentTime()))
ClickEvent( $userId : userId, $productId : productId, $event : "FAVORITE" / "REMOVE_FAVORITE" )
Product($id : id, $endDate : endDate)
Purchase ( $userId : userId, $purchasedProducts : purchasedProducts )
其中 purchasedProducts
是 List
的:
PurchasedProduct( $id : id, $price : price)
现在我想每次在特定时间发送通知:
- 今天是产品的结束日期
- 用户已收藏但未取消收藏产品(来自
ClickEvent
)和 - 用户还没有购买产品(来自
Purchase
)并且 - 在一个通知中包含所有此类产品(基本上我需要
collect
个产品)
感谢您对此提供的任何帮助。
提前致谢!
分步执行此操作可能是个好主意
rule "interesting user/product"
when
SessionClock( $now: time )
Purchase( $uid: userId, $purchases: purchasedProducts )
ClickEvent( userId == $uid, $pid: productId,
event == "FAVORITE" )
not ClickEvent( userId == $uid, productId == $pid,
event == "REMOVE_FAVORITE" )
Product( id == $pid, $endDate: endDate )
eval( endDateIsToday( $now, $endDate ) )
then
end
rule "make Collection" extends "interesting user/product"
when
not Collection( userId == $uid )
then
insert( new Collection( $uid ) )
end
rule "fill Collection" extends "interesting user/product"
when
$coll: Collection( userId == $uid, products not contains $pid )
then
modify( $coll ){ addProduct( $pid ) }
end
第三条规则,运行降低显着性,可以做通知。
Edit 澄清一下,endDateIsToday
是 (DRL) 函数或静态方法。集合是一个 class,您需要使用几个字段来定义:userId 和一组产品 ID。