在 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

中定义了所有可重用函数