Поиск самой последней даты из всех дат в объекте Drools - PullRequest
0 голосов
/ 27 марта 2019

Как найти самую последнюю дату среди всех дат присоединения в объекте Drools?

Мое правило примерно такое:

declare RecentDate
      dates : java.util.Date
end

rule "insert_dates"
      when
       //reading dates from back end
       Employee($date : dateOfJoining, $name : name, salary > 10000)
       then
       insert(new RecentDate($date))
end

Теперь я хотел бы найти самого последнего сотрудника, основанного на dateOfJoining. Любая помощь приветствуется. Спасибо.

1 Ответ

0 голосов
/ 28 марта 2019

Один из способов сделать это состоит в том, чтобы, учитывая сотрудника, убедиться, что нет другого человека с более высокой датой:

declare RecentDate
      dates : java.util.Date
end

rule "insert_dates"
when
  //reading dates from back end
  Employee( $date : dateOfJoining, $name : name, salary > 10000)
  not Employee (dateOfJoining > $date)
then
  insert(new RecentDate($date))
end

Приведенное выше правило работает только в том случае, если у вас есть все ваши Employee факты в вашем сеансе до выполнения fireAllRules(). Если это не так, вы можете сначала попытаться вставить RecentDate с нулевой датой, а затем сравнить каждую Employee с ней и соответственно обновить ее:

rule "Init RecentDate"
when
  not RecentDate()
then
  insert new RecentDate(null);
end

rule "update_dates"
when
  Employee( $date : dateOfJoining, $name : name, salary > 10000)
  $d: RecentDate ( date == null || date < $date)
then
  modify ($d){
    setDate($date)
  }
end

Надеюсь, это поможет,

...