如何在drools中检查null日期条件?

时间:2013-09-30 06:28:15

标签: jboss drools rule-engine

我必须在日期检查实体的日期字段是否在另一个实体的另外两组日期的范围内

第一实体:

1. id
2. name
3. date

第二实体;

1. id
.
.
.
.
17 : Start Date
18 : End Date

我必须检查第一个实体的日期字段是否在第二个实体的开始日期和结束日期范围内。

e.g。

(t1.date> = t2.Start Date and t1.date< = t2.End Date)

问题是,有一些行,其中t2为null ..如果它为null,则第二个条件返回true。

我的尝试

PriorAuthorizationLogVO(cardid == $ paidClaimVO.cardholderId,ruleType =='INCL',$ paidClaimVO.time> = etime,( ttime == null ||(ttime!= null&& $ paidClaimVO。时间&LT = TTIME)

但是,我无法确认它是否正常工作......

请帮忙。

1 个答案:

答案 0 :(得分:2)

您可以在静态帮助程序方法或其中一个实体中添加该日期范围之间的日期检查。在我看来,这将使您的规则更具可读性,您可以轻松地为日期检查方法编写单元测试。

选项1 - 静态辅助方法

创建一个具有静态辅助方法的类,类似这样的

public class DateUtils {
  private DateUtils() {}  // Cannot be initialized

  public static boolean dateInRange( Date toCheck, Date min, Date max ) {
    // Add null checks here
    // Use Date#before(Date) and Date#after(Date) for checking
    return true|false
  }
}

您的规则就像

import static DateUtils.*

rule "date in range"
when:
   dateInRange( e1.date, e2.start, e2.end )
then:
   // logic
end

选项2 - 事实/实体中的方法

在您的一个事实中创建检查方法。放在哪个实体取决于您的用例,您提供的信息尚未指定。我想你可以自己找出最好的地方。无论如何,代码将是这样的

public class Entity1 {
  Date date
}

public class Entity2 {
  Date start
  Date end

 public boolean entity1InRange( Entity1 e ) {
  // null checks
  // Use the Date#before() and Date#after() as above
 }

}

规则

rule "date in range"
when:
  e2.entity1InRange( e1 )
then:
  // Logic
end