我需要在我的应用程序中计算员工的工作/休假时间。
假期有一个startDate和一个endDate。用户可以提供一段时间,并且必须为该时段内的用户生成工作和休假时段的报告。
E.g。一位用户已经从3.02.2013 - 4.02.2013度假,而且搜索时间是1.02.2013 - 28.02.2013。
报告应如下所示:
1-2.02.2013 - 工作
3-4.02.2013 - 假期
我不确定如何以有效的方式做到这一点。我在这期间获得假期的DAO方法如下:
public List<VacationRequest> getVacationsInPeriodForUser(Long userId,
Date startDate, Date endDate) {
List<VacationRequest> requests = getSessionFactory()
.getCurrentSession()
.createQuery(
"select req from VacationRequest req left join fetch req.vacationType where req.requestState.description = 'APPROVED' and req.user.id= ? and req.startDate >= ? and req.endDate <= ?")
.setParameter(0, userId).setParameter(1, startDate)
.setParameter(2, endDate).list();
return requests;
}
但是,如果用户在整个供应期间休假,则这不起作用。例如,如果上例中的搜索周期为3.02.2013 - 4.02.2013。
有人能建议如何以有效的方式计算这些位置吗?
答案 0 :(得分:0)
你想测试: req.startDate&lt; endDate&amp;&amp; req.endDate&gt;的startDate
您正在测试req.startDate&gt; startdate&amp;&amp; req.endDate&lt; endDate,它消除了在请求绑定之前和之后开始的时间段。
编辑:假设你检查startDates总是在endDates之前
您的代码变为
public List<VacationRequest> getVacationsInPeriodForUser(Long userId,
Date startDate, Date endDate) {
List<VacationRequest> requests = getSessionFactory()
.getCurrentSession()
.createQuery(
"select req from VacationRequest req left join fetch req.vacationType where req.requestState.description = 'APPROVED' and req.user.id= ? and req.startDate <= ? and req.endDate >= ?")
.setParameter(0, userId).setParameter(1, enDate)
.setParameter(2, startDate).list();
return requests;
}