我必须在日期检查实体的日期字段是否在另一个实体的另外两组日期的范围内
第一实体:
1. id
2. name
3. date
第二实体;
1. id
.
.
.
.
17 : Start Date
18 : End Date
我必须检查第一个实体的日期字段是否在第二个实体的开始日期和结束日期范围内。
e.g。
(t1.date> = t2.Start Date and t1.date< = t2.End Date)
问题是,有一些行,其中t2为null ..如果它为null,则第二个条件返回true。
我的尝试
PriorAuthorizationLogVO(cardid == $ paidClaimVO.cardholderId,ruleType =='INCL',$ paidClaimVO.time> = etime,( ttime == null ||(ttime!= null&& $ paidClaimVO。时间&LT = TTIME))
但是,我无法确认它是否正常工作......
请帮忙。
答案 0 :(得分:2)
您可以在静态帮助程序方法或其中一个实体中添加该日期范围之间的日期检查。在我看来,这将使您的规则更具可读性,您可以轻松地为日期检查方法编写单元测试。
创建一个具有静态辅助方法的类,类似这样的
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
在您的一个事实中创建检查方法。放在哪个实体取决于您的用例,您提供的信息尚未指定。我想你可以自己找出最好的地方。无论如何,代码将是这样的
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