Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
algorithmes-de-parcoursup
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
4
Issues
4
List
Boards
Labels
Service Desk
Milestones
Merge Requests
2
Merge Requests
2
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Parcoursup
algorithmes-de-parcoursup
Commits
1fbf5356
Commit
1fbf5356
authored
Jun 01, 2018
by
Loïc
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix
#10
: System.out -> JUL
parent
7febb178
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
136 additions
and
140 deletions
+136
-140
java/parcoursup/ordreappel/donnees/ConnecteurDonneesAppelOracle.java
...rsup/ordreappel/donnees/ConnecteurDonneesAppelOracle.java
+31
-31
java/parcoursup/propositions/EnvoiPropositions.java
java/parcoursup/propositions/EnvoiPropositions.java
+8
-10
java/parcoursup/propositions/algo/AlgoPropositions.java
java/parcoursup/propositions/algo/AlgoPropositions.java
+22
-24
java/parcoursup/propositions/donnees/ConnecteurDonneesPropositionsOracle.java
...ositions/donnees/ConnecteurDonneesPropositionsOracle.java
+36
-38
java/parcoursup/propositions/exemples/ExempleAleatoire.java
java/parcoursup/propositions/exemples/ExempleAleatoire.java
+15
-17
java/parcoursup/propositions/test/VerificationsResultats.java
.../parcoursup/propositions/test/VerificationsResultats.java
+24
-20
No files found.
java/parcoursup/ordreappel/donnees/ConnecteurDonneesAppelOracle.java
View file @
1fbf5356
/* Copyright 2018, 2018 Hugo Gimbert (hugo.gimbert@enseignementsup.gouv.fr)
/* Copyright 2018, 2018 Hugo Gimbert (hugo.gimbert@enseignementsup.gouv.fr)
This file is part of Algorithmes-de-parcoursup.
...
...
@@ -19,18 +19,21 @@
*/
package
parcoursup.ordreappel.donnees
;
import
static
java
.
util
.
stream
.
Collectors
.
joining
;
import
parcoursup.ordreappel.algo.AlgoOrdreAppelEntree
;
import
java.sql.Connection
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.time.LocalDateTime
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
oracle.jdbc.OracleDriver
;
import
oracle.jdbc.pool.OracleDataSource
;
import
parcoursup.ordreappel.algo.AlgoOrdreAppelSortie
;
...
...
@@ -40,8 +43,10 @@ import parcoursup.ordreappel.algo.VoeuClasse;
public
class
ConnecteurDonneesAppelOracle
implements
ConnecteurDonneesAppel
{
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ConnecteurDonneesAppelOracle
.
class
.
getName
());
/* connexion à la base de données */
Connection
conn
=
null
;
private
final
Connection
conn
;
public
ConnecteurDonneesAppelOracle
(
String
url
,
String
user
,
String
password
)
throws
SQLException
{
if
(
url
==
null
||
url
.
isEmpty
())
{
...
...
@@ -65,9 +70,9 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
try
(
Statement
stmt
=
conn
.
createStatement
())
{
/* récupère la liste des groupes et les taux minimum de boursiers
/* récupère la liste des groupes et les taux minimum de boursiers
et de résidents depuis la base de données */
log
(
"Récupération des groupes"
);
LOGGER
.
info
(
"Récupération des groupes"
);
stmt
.
setFetchSize
(
1000000
);
String
sql
...
...
@@ -99,7 +104,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
+
" AND ti.g_ti_eta_cla=2 "
+
" AND NVL(g.c_gp_flg_pas_cla, 0)!=1"
;
log
(
sql
);
LOGGER
.
info
(
sql
);
try
(
ResultSet
result
=
stmt
.
executeQuery
(
sql
))
{
...
...
@@ -140,7 +145,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
Set
<
Integer
>
groupesManquants
=
new
HashSet
<>();
/* récupère la liste des voeux depuis la base de données */
log
(
"Récupération des voeux"
);
LOGGER
.
info
(
"Récupération des voeux"
);
stmt
.
setFetchSize
(
1000000
);
String
sql
=
"SELECT "
//id du groupe de classement
...
...
@@ -151,7 +156,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
+
"NVL(C_CG_RAN,0), "
//le candidat a-t'il déclaré être boursier? non 0 lycée 1 dusup 2
+
"g_cn_brs, "
//cette déclaration a-t'elle été confirmée
//cette déclaration a-t'elle été confirmée
//via les remontées de base SIECLE (1)
//ou directement par le chef d'établissement (2)
+
"g_cn_flg_brs_cer,"
...
...
@@ -176,11 +181,11 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
//seulement les formations qui classent
+
" AND NVL(gp.c_gp_flg_pas_cla, 0)!=1"
;
log
(
sql
);
LOGGER
.
info
(
sql
);
try
(
ResultSet
result
=
stmt
.
executeQuery
(
sql
))
{
/* Remarque: le rang est à null / 0 pour celles des formations
/* Remarque: le rang est à null / 0 pour celles des formations
non-sélectives qui ne réalisent pas de classement. */
while
(
result
.
next
())
{
...
...
@@ -215,12 +220,11 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
stmt
.
close
();
if
(!
groupesManquants
.
isEmpty
())
{
log
(
groupesManquants
.
size
()
+
" groupes manquants."
);
System
.
out
.
print
(
"("
);
for
(
int
c_gp_cod
:
groupesManquants
)
{
System
.
out
.
print
(
c_gp_cod
+
","
);
}
System
.
out
.
println
(
")"
);
LOGGER
.
log
(
Level
.
SEVERE
,
"{0} groupes manquants."
,
groupesManquants
.
size
());
String
list
=
groupesManquants
.
stream
()
.
map
(
String:
:
valueOf
)
.
collect
(
joining
(
","
,
"("
,
")"
));
LOGGER
.
severe
(
list
);
//throw new RuntimeException(groupesManquants.size() + " groupes manquants.");
}
...
...
@@ -241,7 +245,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
try
{
log
(
"Début de l'exportation"
);
LOGGER
.
info
(
"Début de l'exportation"
);
preparerExport
();
...
...
@@ -264,10 +268,10 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
ps
.
setInt
(
3
,
rang
++);
ps
.
addBatch
();
if
(++
count
%
500000
==
0
)
{
log
(
"Exportation des ordres d'appel des voeux "
+
(
count
-
499999
)
+
" a "
+
count
);
LOGGER
.
log
(
Level
.
INFO
,
"Exportation des ordres d''appel des voeux {0} a {1}"
,
new
Object
[]{
count
-
499999
,
count
}
);
ps
.
executeBatch
();
ps
.
clearBatch
();
log
(
"Fait"
);
LOGGER
.
info
(
"Fait"
);
}
}
...
...
@@ -276,16 +280,16 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
}
conn
.
commit
();
log
(
"Mise à jour de la table C_CAN_GRP"
);
LOGGER
.
info
(
"Mise à jour de la table C_CAN_GRP"
);
conn
.
createStatement
().
execute
(
"UPDATE "
+
"(SELECT a.C_CG_ORD_APP cible, b.C_CG_ORD_APP source FROM C_CAN_GRP a,"
+
"J_ORD_APPEL_TMP b WHERE a.G_CN_COD=b.G_CN_COD AND a.C_GP_COD=b.C_GP_COD)"
+
"SET cible=source"
);
/* exportation des statistiques mesurant l'écart entre l'ordre d'appel
et le classement initial.
et le classement initial.
*/
log
(
"Exportation des coefficients de divergence"
);
LOGGER
.
info
(
"Exportation des coefficients de divergence"
);
try
(
PreparedStatement
ps
=
conn
.
prepareStatement
(
"INSERT INTO C_CAN_ORD_APPEL_DIV (C_GP_COD,COEF_DIV) VALUES (?,?)"
))
{
for
(
Entry
<
Integer
,
OrdreAppel
>
paire
...
...
@@ -298,13 +302,13 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
ps
.
executeBatch
();
}
log
(
"Application des changements"
);
LOGGER
.
info
(
"Application des changements"
);
conn
.
commit
();
log
(
"Fin de l'exportation"
);
LOGGER
.
info
(
"Fin de l'exportation"
);
}
catch
(
SQLException
ex
)
{
log
(
"Erreur d'exportation des données"
);
LOGGER
.
severe
(
"Erreur d'exportation des données"
);
throw
new
RuntimeException
(
"Erreur d'exportation des données"
,
ex
);
}
}
...
...
@@ -321,7 +325,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
conn
.
createStatement
().
execute
(
"DROP TABLE J_ORD_APPEL_TMP"
);
}
catch
(
SQLException
e
)
{
/* peut arriver si la table n'existait pas */
}
;
}
conn
.
createStatement
().
execute
(
"CREATE GLOBAL TEMPORARY TABLE J_ORD_APPEL_TMP ("
...
...
@@ -337,7 +341,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
conn
.
createStatement
().
execute
(
"DROP TABLE C_CAN_ORD_APPEL_DIV"
);
}
catch
(
SQLException
e
)
{
/* peut arriver si la table n'existait pas */
}
;
}
conn
.
createStatement
().
execute
(
"CREATE TABLE C_CAN_ORD_APPEL_DIV ("
...
...
@@ -349,8 +353,4 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
}
private
void
log
(
String
message
)
{
System
.
out
.
println
(
LocalDateTime
.
now
().
toLocalTime
()
+
": "
+
message
);
}
}
java/parcoursup/propositions/EnvoiPropositions.java
View file @
1fbf5356
...
...
@@ -18,7 +18,7 @@
*/
package
parcoursup.propositions
;
import
java.
time.LocalDateTime
;
import
java.
util.logging.Logger
;
import
parcoursup.propositions.algo.AlgoPropositions
;
import
parcoursup.propositions.algo.AlgoPropositionsEntree
;
...
...
@@ -30,6 +30,8 @@ Ce code est exécuté de manière quotidienne.
*/
public
class
EnvoiPropositions
{
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
EnvoiPropositions
.
class
.
getName
());
private
final
ConnecteurDonneesPropositions
acces
;
public
EnvoiPropositions
(
ConnecteurDonneesPropositions
acces
)
{
...
...
@@ -38,24 +40,20 @@ public class EnvoiPropositions {
public
void
execute
()
throws
Exception
{
log
(
"Récupération des données"
);
LOGGER
.
info
(
"Récupération des données"
);
AlgoPropositionsEntree
entree
=
acces
.
recupererDonnees
();
log
(
"Sauvegarde locale de l'entrée"
);
LOGGER
.
info
(
"Sauvegarde locale de l'entrée"
);
entree
.
serialiser
(
null
);
log
(
"Calcul des propositions"
);
LOGGER
.
info
(
"Calcul des propositions"
);
AlgoPropositionsSortie
sortie
=
AlgoPropositions
.
calculePropositions
(
entree
);
log
(
"Sauvegarde locale de la sortie"
);
LOGGER
.
info
(
"Sauvegarde locale de la sortie"
);
sortie
.
serialiser
(
null
);
log
(
"Export des données"
);
LOGGER
.
info
(
"Export des données"
);
acces
.
exporterDonnees
(
sortie
);
}
static
void
log
(
String
msg
)
{
System
.
out
.
println
(
LocalDateTime
.
now
().
toLocalTime
()
+
": "
+
msg
);
}
}
java/parcoursup/propositions/algo/AlgoPropositions.java
View file @
1fbf5356
/* Copyright 2018, 2018 Hugo Gimbert (hugo.gimbert@enseignementsup.gouv.fr)
/* Copyright 2018, 2018 Hugo Gimbert (hugo.gimbert@enseignementsup.gouv.fr)
This file is part of Algorithmes-de-parcoursup.
...
...
@@ -19,21 +19,24 @@
*/
package
parcoursup.propositions.algo
;
import
java.time.LocalDateTime
;
import
java.util.HashMap
;
import
parcoursup.propositions.test.VerificationsResultats
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
public
class
AlgoPropositions
{
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
AlgoPropositions
.
class
.
getName
());
/* la boucle principale du calcul des propositions à envoyer */
public
static
AlgoPropositionsSortie
calculePropositions
(
AlgoPropositionsEntree
entree
)
{
entree
.
verifierIntegrite
();
log
(
"Début calcul propositions"
);
LOGGER
.
info
(
"Début calcul propositions"
);
/* groupes à mettre à jour */
Set
<
GroupeAffectation
>
groupesAMettreAJour
...
...
@@ -48,42 +51,42 @@ public class AlgoPropositions {
int
compteurBoucle
=
0
;
while
(
groupesAMettreAJour
.
size
()
>
0
)
{
/* calcul des propositions à effectuer,
/* calcul des propositions à effectuer,
étant données les positions actuelles d'admissions aux internats */
for
(
GroupeAffectation
gc
:
groupesAMettreAJour
)
{
gc
.
mettreAJourPropositions
();
}
/* Test de surcapacité des internats, avec
/* Test de surcapacité des internats, avec
mise à jour de la position d'admission si nécessaire.
Baisser la position d'admission d'un internat ne diminue
pas le nombre de candidats dans les autres internats, voire augmente ces nombres,
car les formations devront potentiellement descendre plus bas dans l'ordre d'appel.
Par conséquent, on peut mettre à jour toutes les positions d'admission
de tous les internats sans mettre à jour systématiquement les propositions:
si un internat est détecté en surcapacité avant la mise
à jour des propositions, il l'aurait été également après la mise à jour des propositions.
(Mais la réciproque est fausse en général).
De cette manière, on reste bien dans l'ensemble E des vecteurs de positions
d'admission supérieurs sur chaque composante au vecteur de positions d'admission
le plus permissif possible parmi tous ceux respectant les contraintes
de capacité des internats et situés en deçà des positions maximales
d'admission.
Ce vecteur est égal, sur chaque composante, à la valeur minimum de cette
composante parmi les éléments de E.
La boucle termine quand les contraintes de capacité des internats
sont satisfaites, c'est-à-dire quand ce minimum global est atteint.
Une propriété de symétrie i.e. d'équité intéressante:
le résultat ne dépend pas de l'ordre dans lequel on itère sur les internats et
les formations.
*/
groupesAMettreAJour
.
clear
();
for
(
GroupeInternat
internat
:
entree
.
internats
)
{
...
...
@@ -95,11 +98,10 @@ public class AlgoPropositions {
compteurBoucle
++;
}
log
(
"Calcul terminé après "
+
compteurBoucle
+
" itération(s)."
);
LOGGER
.
log
(
Level
.
INFO
,
"Calcul terminé après {0} itération(s)."
,
compteurBoucle
);
log
(
"Vérification des propriétés attendues des propositions pour un des "
+
entree
.
groupesAffectations
.
size
()
+
" groupes d'affectation"
);
LOGGER
.
log
(
Level
.
INFO
,
"Vérification des propriétés attendues des propositions pour un des {0} groupes d''affectation"
,
entree
.
groupesAffectations
.
size
());
int
step
=
Integer
.
max
(
1
,
entree
.
groupesAffectations
.
size
()
/
100
);
int
count
=
0
;
...
...
@@ -119,8 +121,8 @@ public class AlgoPropositions {
}
System
.
out
.
println
();
log
(
"Vérification des propriétés attendues des propositions d'un des "
+
entree
.
internats
.
size
()
+
" internats"
);
LOGGER
.
log
(
Level
.
INFO
,
"Vérification des propriétés attendues des propositions d''un des {0} internats"
,
entree
.
internats
.
size
()
);
step
=
Integer
.
max
(
1
,
entree
.
internats
.
size
()
/
100
);
count
=
0
;
...
...
@@ -153,9 +155,9 @@ public class AlgoPropositions {
}
System
.
out
.
println
();
log
(
"Vérification ok"
);
LOGGER
.
info
(
"Vérification ok"
);
log
(
"Préparation données de sortie"
);
LOGGER
.
info
(
"Préparation données de sortie"
);
AlgoPropositionsSortie
sortie
=
new
AlgoPropositionsSortie
();
...
...
@@ -175,10 +177,6 @@ public class AlgoPropositions {
}
private
static
void
log
(
String
msg
)
{
System
.
out
.
println
(
LocalDateTime
.
now
().
toLocalTime
()
+
": "
+
msg
);
}
private
static
void
afficherJauge
()
{
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
System
.
out
.
print
(
"-"
);
...
...
java/parcoursup/propositions/donnees/ConnecteurDonneesPropositionsOracle.java
View file @
1fbf5356
/* Copyright 2018, 2018 Hugo Gimbert (hugo.gimbert@enseignementsup.gouv.fr)
/* Copyright 2018, 2018 Hugo Gimbert (hugo.gimbert@enseignementsup.gouv.fr)
This file is part of Algorithmes-de-parcoursup.
...
...
@@ -23,11 +23,12 @@ import java.sql.PreparedStatement;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.time.LocalDateTime
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
oracle.jdbc.OracleDriver
;
import
oracle.jdbc.pool.OracleDataSource
;
import
parcoursup.propositions.algo.AlgoPropositionsEntree
;
...
...
@@ -40,11 +41,11 @@ import parcoursup.propositions.algo.VoeuEnAttente;
import
parcoursup.propositions.algo.VoeuUID
;
/*
/*
Récupération et injection des données depuis et vers la base Oracle
La base identifie:
* chaque candidat par un G_CN_COD
* chaque formation d'inscription par un G_TI_COD
* chaque formation d'affectation par un G_TA_COD
...
...
@@ -55,8 +56,10 @@ import parcoursup.propositions.algo.VoeuUID;
*/
public
class
ConnecteurDonneesPropositionsOracle
implements
ConnecteurDonneesPropositions
{
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ConnecteurDonneesPropositionsOracle
.
class
.
getName
());
/* connexion a la base de données */
Connection
conn
=
null
;
private
final
Connection
conn
;
public
ConnecteurDonneesPropositionsOracle
(
String
url
,
String
user
,
String
password
)
throws
SQLException
{
if
(
url
==
null
||
url
.
isEmpty
())
{
...
...
@@ -74,8 +77,8 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
@Override
public
AlgoPropositionsEntree
recupererDonnees
()
throws
SQLException
{
log
(
"Vérification de l'interruption du flux de données entrantes."
);
/*Si = 1 indique si le programme d'admission est en train de tourner
LOGGER
.
info
(
"Vérification de l'interruption du flux de données entrantes."
);
/*Si = 1 indique si le programme d'admission est en train de tourner
pour faire des propositions. Si c'est le cas, tout est bloqué*/
try
(
ResultSet
result
=
conn
.
createStatement
().
executeQuery
(
...
...
@@ -101,14 +104,14 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
recupererVoeuxSansInternatAClassementPropre
();
if
(!
groupesManquants
.
isEmpty
())
{
System
.
out
.
println
(
groupesManquants
.
size
()
+
" groupes manquants."
);
LOGGER
.
log
(
Level
.
SEVERE
,
"{0} groupes manquants."
,
groupesManquants
.
size
()
);
}
if
(!
internatsManquants
.
isEmpty
())
{
System
.
out
.
println
(
internatsManquants
.
size
()
+
" internats manquants."
);
LOGGER
.
log
(
Level
.
SEVERE
,
"{0} internats manquants."
,
internatsManquants
.
size
()
);
}
log
(
"Fin de la récupération des données depuis la base Oracle"
);
LOGGER
.
info
(
"Fin de la récupération des données depuis la base Oracle"
);
AlgoPropositionsEntree
entree
=
new
AlgoPropositionsEntree
();
...
...
@@ -118,20 +121,20 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
/* exportation des résultats du calcul: propositions à faire
/* exportation des résultats du calcul: propositions à faire
et barres internats */
@Override
public
void
exporterDonnees
(
AlgoPropositionsSortie
sortie
)
throws
SQLException
{
conn
.
setAutoCommit
(
false
);
log
(
"Préparation des tables avant export"
);
LOGGER
.
info
(
"Préparation des tables avant export"
);
conn
.
createStatement
().
executeQuery
(
"DELETE FROM A_ADM_PROP WHERE NB_JRS="
+
GroupeInternat
.
nbJoursCampagne
);
conn
.
createStatement
().
executeQuery
(
"DELETE FROM A_ADM_POSITIONS_INT WHERE NB_JRS="
+
GroupeInternat
.
nbJoursCampagne
);
log
(
"Exportation des propositions d'admission"
);
LOGGER
.
info
(
"Exportation des propositions d'admission"
);
try
(
PreparedStatement
ps
=
conn
.
prepareStatement
(
"INSERT INTO A_ADM_PROP "
...
...
@@ -142,7 +145,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
for
(
VoeuEnAttente
voe
:
sortie
.
propositions
)
{
GroupeAffectationUID
groupe
=
voe
.
groupe
.
id
;
GroupeInternatUID
internat
=
voe
.
internatID
();
assert
voe
.
id
.
G_TA_COD
==
groupe
.
G_TA_COD
;
ps
.
setInt
(
1
,
voe
.
id
.
G_CN_COD
);
...
...
@@ -158,21 +161,21 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
ps
.
addBatch
();
if
(++
count
%
500000
==
0
)
{
log
(
"Exportation des propositions "
+
(
count
-
499999
)
+
" a "
+
count
);
LOGGER
.
log
(
Level
.
INFO
,
"Exportation des propositions {0} a {1}"
,
new
Object
[]{
count
-
499999
,
count
}
);
ps
.
executeBatch
();
ps
.
clearBatch
();
log
(
"Fait"
);
LOGGER
.
info
(
"Fait"
);
}
}
ps
.
executeBatch
();
log
(
count
+
" propositions exportées."
);
LOGGER
.
log
(
Level
.
INFO
,
"{0} propositions exportées."
,
count
);
}
conn
.
commit
();
log
(
"Exportation des positions d'admission aux internats"
);
LOGGER
.
info
(
"Exportation des positions d'admission aux internats"
);
try
(
PreparedStatement
ps
=
conn
.
prepareStatement
(
"INSERT INTO A_ADM_POSITIONS_INT "
...
...
@@ -206,14 +209,13 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
=
new
HashSet
<>();
/* permet de comptabiliser les groupes manquants, avant le début de campagne */
Set
<
GroupeAffectationUID
>
groupesManquants
=
new
HashSet
<>();
private
final
Set
<
GroupeAffectationUID
>
groupesManquants
=
new
HashSet
<>();
private
void
recupererGroupesEtInternats
()
throws
SQLException
{
internats
.
clear
();
groupesAffectations
.
clear
();
log
(
"Récupération des groupes d'affectation"
);
LOGGER
.
info
(
"Récupération des groupes d'affectation"
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
setFetchSize
(
1000000
);
try
(
ResultSet
result
=
stmt
.
executeQuery
(
...
...
@@ -243,7 +245,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
}
log
(
"Récupération des internats"
);
LOGGER
.
info
(
"Récupération des internats"
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
setFetchSize
(
1000000
);
...
...
@@ -274,7 +276,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
}
log
(
"Récupération du nombre de jours écoulés depuis l'ouverture de la campagne"
);
LOGGER
.
info
(
"Récupération du nombre de jours écoulés depuis l'ouverture de la campagne"
);
try
(
ResultSet
result
=
conn
.
createStatement
().
executeQuery
(
"SELECT TRUNC(SYSDATE) - TRUNC(TO_DATE(g_pr_val, 'DD/MM/YYYY:HH24'))+1"
...
...
@@ -293,7 +295,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
int
compteur
=
0
;
log
(
"Récupération des voeux avec demande internat dans un internat à classement propre"
);
LOGGER
.
info
(
"Récupération des voeux avec demande internat dans un internat à classement propre"
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
setFetchSize
(
1000000
);
String
requete
...
...
@@ -302,7 +304,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
+
"v.g_ta_cod,"
//id affectation
+
"ti.g_ti_cod,"
//id inscription
+
"cg.c_gp_cod,"
//groupe de classement pédagogique
+
"cg.c_cg_ord_app,"
//ordre d'appel
+
"cg.c_cg_ord_app,"
//ordre d'appel
+
"cgi.c_gi_cod,"
//id internat
+
"cgi.c_ci_ran,"
//rang de classement internat
...
...
@@ -342,7 +344,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
+
"AND ti.g_ti_cla_int_uni IN (0,1)"
//restriction aux internats à classement propre
;
log
(
requete
);
LOGGER
.
info
(
requete
);
try
(
ResultSet
result
=
stmt
.
executeQuery
(
requete
))
{
while
(
result
.
next
())
{
...
...
@@ -359,7 +361,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
g_ti_cla_int_uni = 2 : internat sans élection
g_ti_cla_int_uni = -1 : pas d'internat
g_ti_cla_int_uni = 0 : l'internat est par formation
g_ti_cla_int_uni = 1 : l'internat est commun
g_ti_cla_int_uni = 1 : l'internat est commun
à plusieurs formations de l'établissement
*/
boolean
estAffecte
=
result
.
getBoolean
(
9
);
...
...
@@ -412,12 +414,12 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
}
}
log
(
compteur
+
" voeux en attente avec internat à classement propre"
);
LOGGER
.
log
(
Level
.
INFO
,
"{0} voeux en attente avec internat à classement propre"
,
compteur
);
}
private
void
recupererVoeuxSansInternatAClassementPropre
()
throws
SQLException
{
int
compteur
=
0
;
log
(
"Récupération des voeux sans internat, ou dans un internat sans classement propre"
);
LOGGER
.
info
(
"Récupération des voeux sans internat, ou dans un internat sans classement propre"
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
setFetchSize
(
1000000
);
String
requete
...
...
@@ -452,7 +454,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
//exclut les formations d'inscriptions avec internat à classement propre
+
" AND (v.i_rh_cod =0 or ti.g_ti_cla_int_uni NOT IN (0,1))"
;
log
(
requete
);
LOGGER
.
info
(
requete
);
try
(
ResultSet
result
=
stmt
.
executeQuery
(
requete
))
{
while
(
result
.
next
())
{
...
...
@@ -491,11 +493,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
}
}
log
(
compteur
+
" voeux en attente sans internat a classement propre"
);
}
private
void
log
(
String
message
)
{
System
.
out
.
println
(
LocalDateTime
.
now
().
toLocalTime
()
+
": "
+
message
);
LOGGER
.
log
(
Level
.
INFO
,
"{0} voeux en attente sans internat a classement propre"
,
compteur
);
}
}
java/parcoursup/propositions/exemples/ExempleAleatoire.java
View file @
1fbf5356
/* Copyright 2018, 2018 Hugo Gimbert (hugo.gimbert@enseignementsup.gouv.fr)
/* Copyright 2018, 2018 Hugo Gimbert (hugo.gimbert@enseignementsup.gouv.fr)
This file is part of Algorithmes-de-parcoursup.
...
...
@@ -28,6 +28,8 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Random
;
import
java.util.Set
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
javax.xml.bind.JAXBContext
;
import
javax.xml.bind.Marshaller
;