import org.lilie.services.eliot.notes.scolarite.NotesSousServiceService
import org.hibernate.SessionFactory
import org.lilie.services.eliot.scolarite.Etablissement
+import org.lilie.services.eliot.utils.ListeUtilsService
/**
* Service pour marquer que les données source d'une moyenne ont chagé.
NotesHibernateSessionService notesHibernateSessionService
LocalStructureEnseignementService localStructureEnseignementService
+ ListeUtilsService listeUtilsService
SessionFactory sessionFactory
*/
void marqueChangementEtablissement(Etablissement etablissement) {
- List<DirtyMoyenne> dms = DirtyMoyenne.createCriteria().list {
+ notesHibernateSessionService.prepareExecuteUpdate()
+ List<Long> dirtyMoyenneIds = DirtyMoyenne.createCriteria().list {
or {
+
classe {
eq('etablissement', etablissement)
}
eq('etablissement', etablissement)
}
}
+
+ projections {
+ property('id')
+ }
+
}
+ }
+ if (dirtyMoyenneIds.isEmpty()) {
+ return
}
- dms*.dateChangement = new Date()
+ Date now = GregorianCalendar.getInstance(Locale.FRANCE).getTime()
+
+ // On avait des problemes quand on faisait des suppressions de plus que
+ // 4000 items dans un coup. Donc la on split la liste aux lots plus petits.
+ listeUtilsService.splitParLot(dirtyMoyenneIds, 3000).
+ each { List<Long> lotDirtyMoyenneIds ->
+
+ // Met à jour les date des DMs
+ DirtyMoyenne.withSession { session ->
+ session.createQuery(
+ "update DirtyMoyenne d \
+ set dateChangement = :date \
+ where d.id in (:dirtyMoyenneIds)"
+ )
+ .setParameter('date', now)
+ .setParameterList('dirtyMoyenneIds', lotDirtyMoyenneIds)
+ .executeUpdate()
+ }
- dms*.save(failOnError: true)
+ }
- sessionFactory.currentSession.flush()
}
}