2013-10-08 57 views
-1

我最近在drools中遇到以下情況。我想知道如何繼續這個規則設計。在jboss drools中計算

Class Emp{ 
beingDate:Date 
endDate:Date 
} 

規則來確定基於給定日期的員工年收入:

  • 對於日期2003年3月5日之前的時薪爲$ 3.5,每年的乘數爲2100
  • 對於日期在2003年5月3日之後,小時費率每年(給定數據)和年度乘數變化爲2092.

可能存在開始日期早於3/5/2003且結束日期是af三3/5/2003。

什麼是爲這種情況設計規則的最佳方式。

更新:增加了一個例如,爲了更清楚 如果對象是

empObj={ 
    beginDate=10/8/2001, 
    endDate=5/10/2005 
} 

規則應該給下面的總和:

  1. 3.5 *(沒有在2001年的天開始2001年10月8日。)/(總無2001年的天數)* 2100
  2. 3.5 * 2100 ==>這是2002年的
  3. 3.5 *(2003年3月5日前的天數)/(2003年的天數)* 2100
  4. (2003年小時費率)*(2003年的天數af ter 3/5/2003)/(總數no。 2003年天)*的 ==>注意5/10之前每年倍增的變化..
  5. (2004小時計算)* 2092
  6. (2005小時率)*(沒有在2005年,天/ 2005)/(2005年的總天數)* 2092
+0

你嘗試過什麼嗎? –

+0

在第二種情況下,以何種格式提供的數據會影響小時費率?這可能會對最佳解決方案產生影響。 – kaskelotti

+0

@JAndy其基本上以word文檔的形式作爲表格。我想這應該在決策表中。但是無法達成具體的方法。 – Srik

回答

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端調用該方法,並更新每個規則的對象。

希望這會有所幫助。

+0

謝謝。足夠接近的答案... – Srik