【问题标题】:How to check null date condition in drools?如何检查流口水中的空日期条件?
【发布时间】:2013-09-30 06:28:14
【问题描述】:

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

第一个实体:

1. id
2. name
3. date

第二个实体;

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

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

例如

(t1.date>= t2.Start Date and t1.date

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

我的尝试

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

但是,我无法确认它是否有效....

请帮忙。

【问题讨论】:

    标签: jboss drools rule-engine


    【解决方案1】:

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

    选项 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 2016-06-15
      • 2016-04-16
      • 2023-04-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      相关资源
      最近更新 更多