2016-11-24 4 views
1

Я недавно слюни и смутился в сравнении даты в файлах drl. Я получил условие, чтобы сравнить два факта типа даты. Drl выглядит следующим образом:Как сделать расчет даты в слюни?

rule "TimeComparison" 
    when 
     $person:Person(date1 >= date2) 
    then 
     // 
end 

Внутри, date1 через три дня после известной даты. Как достичь (три дня/недели/месяцев после определенной даты) в файлах правил drl?

+0

Вы можете попробовать временные операторы. Но я думаю, что ваша проблема может быть проще обрабатывать с помощью функции isLaterThanDays (Date d1, Date d2, int days) и использовать ее в ваших ограничениях. (Примечание: «n месяцев» не определен.) – laune

ответ

0

Предполагая, что ваша дата - java.util.Date, оператор Date.before (date) использует оператор Date.before (date), а оператор> Date.after (date).

я предлагаю использовать Date.compareTo(), например:

rule "TimeComparison" 
    when 
     $date 
     $person:Person(date1.compareTo(date2) >= 0) 
    then 
     // 
end 

Если date2 не то, что вы хотите, для сравнения, то подставляется нужный для него рядный, например, это для «date1 после" Теперь ":

$person : Person(date1.compareTo(new Date()) >= 0) 

Использование классов java.time гораздо проще, например, с LocalDate:

$person : Person(date1.plusDays(3).compareTo(date2)) 

Если датой сопоставления является система «известная», может потребоваться вывести расчетную дату как новый факт (здесь я просто составил концепцию «PersonEffectiveDate») и использовать ее там, где это необходимо (изменить подход/дизайн/понятие, как необходимо для вашей ситуации):

rule "Determine person effective date" 
    when 
     $person : Person($date1 : date1) 
    then 
     // do the desired calculation 
     Date $effectiveDate = $date1.plusDays(3); 
     PersonEffectiveDate ped = new PersonEffectiveDate($person, $effectiveDate); 
     insert(ped); 
end 

rule "TimeComparison" 
    when 
     PersonEffectiveDate($person : person, $effectiveDate : effectiveDate >= date2) 
    then 
     // 
end 

или что-то другое, например:

$person.date1.compareTo($effectiveDate) >= 0)