Слюни -Dyanmic Дата сравнения с манипулированием текущей датой - PullRequest
0 голосов
/ 10 июня 2018

У меня есть класс Java, в котором есть поле даты создания пользователя.

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());
}

Мне нужно сравнить эту дату создания, которая должна быть меньше, чем сокращение X месяцев от текущей даты (я хочу передать значение X месяцев,скажем 3 месяца, из файла конфигурации / файла Java) в Drools.т.е. текущая дата - 10 июня 2018 года, X месяц (3 месяца) - 10 апреля 2018 года, дата создания должна быть до 10 апреля 2018 года.

Но это не работает.

1) Как передать значение dyanmic (из Java) в 'function in drools'?

JAVA (пока Junit) ->

    `int RepresentativeAppointmentMonth=3
    session.insert(personPer);
    session.insert(RepresentativeAppointmentMonth);`

DRL ->

 declare Facts
 ...
 repMonth:RepMonth

 ..
 end
 declare RepMonth
     month: int
 end

 function Date workWithDates(int m)
 {

 ..

 return NewDateWithMmonthsubtractedFromCurrentDate;
 }

rule "Date check"
when
    RepMonth(m : month)`    //<- But if I add this line, the next line doesn't trigger, if I comment this line, it works, with static value of Months(hardcoding 3 months-> which I dont want.
    PersonPer(CreationDate > workWithDates(m))
then 
    System.out.println("Rep");
end

2) Есть еще какие-нибудь предложения, чтобы справиться с этим?Я перепробовал много способов, но чего-то не хватает.Я новичок в Drools.

1 Ответ

0 голосов
/ 11 июня 2018

Как сказал @Esteban, вам нужно добавить объект RepMonth в ваш сеанс.Сделайте это в своем коде Java

    int RepresentativeAppointmentMonth=3
    RepMonth repMonth = new RepMonth(RepresentativeAppointmentMonth);
    session.insert(personPer);
    session.insert(repMonth);
    session.insert(RepresentativeAppointmentMonth);
...