计算工作和休假时间 - Java&过冬

时间:2013-02-06 14:18:15

标签: java algorithm spring hibernate

我需要在我的应用程序中计算员工的工作/休假时间。

假期有一个startDate和一个endDate。用户可以提供一段时间,并且必须为该时段内的用户生成工作和休假时段的报告。

E.g。一位用户已经从3.02.2013 - 4.02.2013度假,而且搜索时间是1.02.2013 - 28.02.2013。

报告应如下所示:

  • 1-2.02.2013 - 工作

  • 3-4.02.2013 - 假期

  • 5-28.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。

有人能建议如何以有效的方式计算这些位置吗?

1 个答案:

答案 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;
}