在 Drools 中计算 2 个日期之间的 days/months/years
Calculating days/months/years between 2 dates in Drools
我正在尝试使用 Guided Rules Editor 比较来自 2 个不同实体(假设 Entity1 和 Entity2)的 2 个日期(假设 Date1 和 Date 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 <= Date2 + 6 个月时,执行一些操作。
我正在使用 Drools Workbench 7.2.0 Final
能否请您提出相同的解决方案。
在我的例子中,我创建了一个可以重用它的函数,所以它在一个单独的 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
中定义了所有可重用函数
我正在尝试使用 Guided Rules Editor 比较来自 2 个不同实体(假设 Entity1 和 Entity2)的 2 个日期(假设 Date1 和 Date 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 <= Date2 + 6 个月时,执行一些操作。
我正在使用 Drools Workbench 7.2.0 Final
能否请您提出相同的解决方案。
在我的例子中,我创建了一个可以重用它的函数,所以它在一个单独的 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
中定义了所有可重用函数