Calculez les emplacements de travail et de vacances-Java & Hibernate


J'ai l'obligation de calculer les créneaux de travail/vacances pour les employés dans ma demande.

Une Vacation a une date de début et une date de fin. L'utilisateur peut fournir une période de temps et un rapport doit être généré avec le travail et les vacances fentes pour un utilisateur de cette période.

Par exemple, un utilisateur a des vacances du 3.02.2013 au 4.02.2013 et la période avec laquelle rechercher est du 1.02.2013 au 28.02.2013.

Le rapport devrait ressembler à ceci:

  • 1-2.02.2013 - Travail

  • 3-4.02.2013 - Vacances

  • 5-28.02.2013 - Travail

Je ne sais pas comment le faire de manière efficace. Ma méthode DAO pour obtenir les vacances dans la période est la suivante:

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

, Mais cela ne fonctionne pas dans le cas où l'utilisateur est en vacances ensemble fourni période. Par exemple, si la période de recherche est 3.02.2013 - 4.02.2013 dans l'exemple ci-dessus.

Quelqu'un Peut-il suggérer comment calculer ces fentes efficace de la sorte?

Author: AndaP, 2013-02-06

1 answers

Vous voulez tester : req.startDate Date de début

Vous testez req.startDate > startdate & & req.endDate

EDIT: en supposant que vous vérifiez que les dates de début sont toujours avant les dates de fin

Votre code devient

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;
}
 0
Author: autra, 2013-02-06 16:02:40