首页 > 解决方案 > Drools 5 - 日期比较

问题描述

我正在尝试将 Java 类函数日期与当前日期进行比较。我需要验证 Java 类日期(CreationDate 函数)应该比当前日期早 [3 个月]。

爪哇 -

public class PersonPer 

  ....
 public Date getCreationDate() {
    return creationDate == null ? null : new Date(creationDate.getTime());
}

public void setCreationDate(Date creationDate) {
    this.creationDate = creationDate == null ? null : new Date(creationDate.getTime());
}

.... 用于测试的 Junit -

  PersonPer personPer=new PersonPer();

    String personCdate="15/12/1998";
    Date personCreationDate = null;

    try {
        personCreationDate=new SimpleDateFormat("dd/MM/yyy").parse(personCdate);
        System.out.println("Junit Test personCreationDate : "+ personCreationDate);
    } catch (ParseException e) {
        System.err.println("Date parsing exception");
        e.printStackTrace();
    }
    personPer.setCreationDate(personCreationDate);

    session.insert(personPer);

DRL - 规则“人员检查”

pp: PersonPer(pCreationDate:CreationDate)
....
when: 
...
(
...

 Date($now : time) from Calendar.getInstance().getTime()
 pp: PersonPer(pCreationDate:CreationDate after[90] $now) <--- This    doesn't work

...

 Then: 
  System.out.println("Person date : " + pCreationDate); 
   drools.addError(...);
   END

 12:32:55 ERROR Error: [ERR 102] Line 141:5 mismatched input 'pp' in rule   "Representative Checks"
  12:32:55 ERROR Error: Parser returned a null Package

1) 人员创建日期和当前日期之间的比较不起作用。请指教。2)此外,任何建议如何使 90 天 - 可配置 - 以便它可以通过业务/配置文件传递 - 使用微服务。

标签: javadatedrools

解决方案


我通过为日期计算创建一个流口水文件函数来解决这个问题。将月份值作为参数传递给函数,该参数是从 Java 程序作为插入 state(ful) 会话的对象传递的事实变量。


推荐阅读