我试图使用引导规则编辑器比较来自2个不同实体的2个日期(让我们说日期1和日期2)(让我们说实体1和实体2)。
Date1是Entity1和的变量 Date2是Entity2的变量
我想要执行的规则是 -
Package com.rules.xyz;
import com.rules.xyz.Entity1;
import com.rules.xyz.Entity2;
When
{
Entity1.Date1 <= Entity2. Date2 + 7 Days
}
then <perform some action>
我想在数月和数年内应用相同的规则,即 当Date1&lt; = Date2 + 6 Months时,然后执行一些操作。
我正在使用Drools Workbench 7.2.0 Final
请你为此提出一个解决方案。
答案 0 :(得分:0)
在我的情况下,我创建了一个能够重用它的函数,因此它在一个单独的DRL文件中定义:
function Date workWithDates(Date date, String operator, int entity, int number) {
if (date != null) {
java.util.Calendar newCal = java.util.Calendar.getInstance();
newCal.setTime(date);
if (operator.equals("-")) { //normally we would add, except if we want to subtract
number = -number;
}
if (entity == 1) { //years
newCal.add(java.util.Calendar.YEAR, number);
} else if (entity== 2) { //months
newCal.add(java.util.Calendar.MONTH, number);
} else if (entity== 3) { //days
newCal.add(java.util.Calendar.DATE, number);
} else if (entity== 4) { //hours
newCal.add(java.util.Calendar.HOUR, number);
} else if (entity== 5) { //minutes
newCal.add(java.util.Calendar.MINUTE, number);
} else if (entity== 6) { //seconds
newCal.add(java.util.Calendar.SECOND, number);
}
return newCal.getTime();
} else {
return date;
}
}
在您调用此函数的DRL文件中,您可以像这样使用它:
when
Entity2 ( $date2 : Date2 != null )
Entity1 ( Date1 != null, Date1 <= (workWithDates($date2, "+", 3, 7)) )
如果您也选择将功能分开到其他文件中,请确保它位于同一个包中。例如,我在000 FUNCTION.drl
中定义了所有可重用的函数