Как проверить состояние нулевой даты в слюнях?
Я должен проверить условие на дату, находится ли поле даты объекта в диапазоне еще двух наборов дат от другого объекта
Первая сущность:
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