Как проверить состояние нулевой даты в слюнях?

Я должен проверить условие на дату, находится ли поле даты объекта в диапазоне еще двух наборов дат от другого объекта

Первая сущность:

1. id
2. name
3. date

Вторая сущность;

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

Я должен проверить, находится ли поле даты первого объекта в диапазоне Дата начала и Дата окончания второго объекта.

например

(t1.date> = t2.Start Date и t1.date <= t2.End Date)

Проблема в том, что есть некоторая строка, где t2 равно нулю. Если оно равно нулю, то второе условие возвращает true.

Моя попытка

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

Но я не могу подтвердить, работает ли он....

Пожалуйста помоги.

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
Другие вопросы по тегам