我最近在drools中遇到了以下场景。我想知道如何继续进行规则设计。
Class Emp{
beingDate:Date
endDate:Date
}
根据给定日期确定员工年收入的规则:
可能存在开始日期在2003年3月5日之前且结束日期在3/5/2003之后的情况。
为此方案设计规则的最佳方法是什么。
更新:添加了例如为了更清晰 如果对象是
empObj={
beginDate=10/8/2001,
endDate=5/10/2005
}
规则应该给出以下总和:
答案 0 :(得分:0)
这样做的一种方法是每年制定一条规则。所以它看起来像这样
rule "2001"
when:
e : Emp( beginDate < "01-Jan-2002" )
then:
// 1. Get the number of days worked in 2001, probably easiest to do with some Java helper method
// 2. Calculate the sum
// 3. Add the sum to some Fact, could be the same Emp fact even
end
rule "2002"
when:
e : Emp( beginDate < "01-Jan-2003" )
then:
// As with 2001
end
其余规则非常相似,只是相应地更改年度乘数。如果您决定使用Emp对象来保存总和,请添加类似
的方法class Emp {
long sum = 0
void addToSum( long value ) { sum += value }
}
在你的RHS方面调用方法并更新每个规则上的对象。
希望这有帮助。