2013-09-30 2 views
0

я должен проверить состояние на сегодняшний день, является ли поле даты из объекта в пределах еще два наборов даты от другого лицаКак проверить нулевое состояние даты в drools?

Первого Entity:

1. id 
2. name 
3. date 

Второго Entity;

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

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

например.

(t1.date> = t2.Start Дата и t1.date < = t2.End Дата)

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

Моя попытка

PriorAuthorizationLogVO (CardID == $ paidClaimVO.cardholderId, 'ВКЛ' RuleType ==, $ paidClaimVO.time> = etime (TTIME == NULL || (TTIME! = NULL & & $ paidClaimVO.time < = TTIME))

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

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

ответ

2

Вы можете добавить эту проверку для даты между диапазоном дат в статическом вспомогательном методе или внутри одного из ваших объектов. По-моему, это сделает ваши правила более читабельными, и вы можете легко написать модульные тесты для метода проверки даты.

Вариант 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 
Смежные вопросы