diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml
index 6e5b4ac7..aa2ff32a 100644
--- a/.github/workflows/create-release.yml
+++ b/.github/workflows/create-release.yml
@@ -13,6 +13,9 @@ jobs:
runs-on: ubuntu-latest
steps:
+ - name: "debug info"
+ run: |
+ echo ${{github}}
- name: "Calculate versions"
id: calculate-version
run: |
diff --git a/Dockerfile b/Dockerfile
index c74c9cd6..e65856f1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -65,6 +65,7 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# systeme pour les crontab
# cronie: remplacant de crond qui support le CTRL+C dans docker (sans ce système c'est compliqué de stopper le conteneur)
# gettext: pour avoir envsubst qui permet de gérer le template tasks.tmpl
+RUN yum install -y procps
RUN dnf install -y cronie gettext && \
crond -V && rm -rf /etc/cron.*/*
COPY ./docker/batch/tasks.tmpl /etc/cron.d/tasks.tmpl
@@ -89,6 +90,8 @@ COPY ./docker/batch/itemBatchTraiterLigneFichierModif.sh /scripts/itemBatchTrait
RUN chmod +x /scripts/itemBatchTraiterLigneFichierModif.sh
COPY ./docker/batch/itemBatchTraiterLigneFichierRecouv.sh /scripts/itemBatchTraiterLigneFichierRecouv.sh
RUN chmod +x /scripts/itemBatchTraiterLigneFichierRecouv.sh
+COPY ./docker/batch/itemBatchTraiterLigneFichierSupp.sh /scripts/itemBatchTraiterLigneFichierSupp.sh
+RUN chmod +x /scripts/itemBatchTraiterLigneFichierSupp.sh
COPY --from=build-image /build/batch/target/*.jar /scripts/item-batch.jar
RUN chmod +x /scripts/item-batch.jar
diff --git a/batch/pom.xml b/batch/pom.xml
index 8bca1dac..6a160ad8 100644
--- a/batch/pom.xml
+++ b/batch/pom.xml
@@ -3,7 +3,7 @@
itembackoffice
fr.abes.item
- 2.4.11
+ 2.4.12-SNAPSHOT
4.0.0
jar
@@ -46,6 +46,12 @@
org.apache.httpcomponents
httpclient
4.5.14
+
+
+ commons-logging
+ commons-logging
+
+
org.apache.httpcomponents
diff --git a/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java b/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java
index 3a8790e0..62f6f3c3 100644
--- a/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java
+++ b/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java
@@ -82,7 +82,7 @@ public ExecutionContextSerializer configureSerializer() {
// ----- CHUNK ------
@Bean
public LignesFichierReader reader() {
- return new LignesFichierReader(proxyRetry);
+ return new LignesFichierReader();
}
@Bean
public LignesFichierProcessor processor() {
@@ -101,6 +101,8 @@ public LignesFichierWriter writer() {
@Bean
public Tasklet getNextDemandeRecouvTasklet() { return new GetNextDemandeRecouvTasklet(strategyFactory, minHour, maxHour); }
@Bean
+ public Tasklet getNextDemandeSuppTasklet() { return new GetNextDemandeSuppTasklet(strategyFactory, minHour, maxHour); }
+ @Bean
public Tasklet lireLigneFichierTasklet() { return new LireLigneFichierTasklet(strategyFactory, mailAdmin); }
@Bean
public Tasklet authentifierSurSudocTasklet()
@@ -179,6 +181,12 @@ public Step stepRecupererNextDemandeRecouv(JobRepository jobRepository, @Qualifi
.tasklet(tasklet, transactionManager)
.build();
}
+ @Bean
+ public Step stepRecupererNextDemandeSupp(JobRepository jobRepository, @Qualifier("getNextDemandeSuppTasklet") Tasklet tasklet, PlatformTransactionManager transactionManager) {
+ return new StepBuilder("stepRecupererNextDemandeSupp", jobRepository).allowStartIfComplete(true)
+ .tasklet(tasklet, transactionManager)
+ .build();
+ }
// Steps pour lancement d'un traitement de modification de masse
@Bean
public Step stepLireLigneFichier(JobRepository jobRepository, @Qualifier("lireLigneFichierTasklet") Tasklet tasklet, PlatformTransactionManager transactionManager) {
@@ -334,6 +342,21 @@ public Job jobTraiterLigneFichierRecouv(JobRepository jobRepository, @Qualifier(
.build().build();
}
+ //job de lancement d'une demande de suppression
+ @Bean
+ public Job jobTraiterLigneFichierSupp(JobRepository jobRepository, @Qualifier("stepRecupererNextDemandeSupp") Step step1, @Qualifier("stepLireLigneFichier") Step step2, @Qualifier("stepAuthentifierSurSudoc") Step step3, @Qualifier("stepTraiterLigneFichier") Step step4, @Qualifier("stepGenererFichier") Step step5) {
+ return new JobBuilder("traiterLigneFichierSupp", jobRepository).incrementer(incrementer())
+ .start(step1).on(Constant.FAILED).end()
+ .from(step1).on(Constant.AUCUNE_DEMANDE).end()
+ .from(step1).on(Constant.COMPLETED).to(step2)
+ .from(step2).on(Constant.FAILED).end()
+ .from(step2).on(Constant.COMPLETED).to(step3)
+ .from(step3).on(Constant.FAILED).end()
+ .from(step3).on(Constant.COMPLETED).to(step4)
+ .from(step4).on(Constant.FAILED).end()
+ .from(step4).on(Constant.COMPLETED).to(step5)
+ .build().build();
+ }
// Job d'export des statistiques mensuelles
@Bean
diff --git a/batch/src/main/java/fr/abes/item/batch/mail/impl/Mailer.java b/batch/src/main/java/fr/abes/item/batch/mail/impl/Mailer.java
index 51706248..f8ed2128 100644
--- a/batch/src/main/java/fr/abes/item/batch/mail/impl/Mailer.java
+++ b/batch/src/main/java/fr/abes/item/batch/mail/impl/Mailer.java
@@ -12,6 +12,7 @@
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.env.Environment;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
@@ -25,6 +26,7 @@
@Slf4j
public class Mailer {
+ private final Environment env;
@Value("${mail.ws.url}")
protected String url;
@@ -32,6 +34,10 @@ public class Mailer {
@Value("${mail.admin}")
protected String mailAdmin;
+ public Mailer(Environment env) {
+ this.env = env;
+ }
+
public void sendMail(String requestJson) {
RestTemplate restTemplate = new RestTemplate(); //appel ws qui envoie le mail
@@ -93,4 +99,14 @@ protected String mailToJSON(String to, String subject, String text) {
}
return json;
}
+
+ protected String getEnvironnementExecution() {
+ if (env.getActiveProfiles().length>0)
+ if (!"prod".equalsIgnoreCase(env.getActiveProfiles()[0])) {
+ return env.getActiveProfiles()[0];
+ }
+ else
+ return "";
+ return "Local";
+ }
}
diff --git a/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerExemp.java b/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerExemp.java
index 258a941e..44bcca29 100644
--- a/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerExemp.java
+++ b/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerExemp.java
@@ -18,12 +18,11 @@
@Service
@Strategy(type = IMailer.class, typeDemande = TYPE_DEMANDE.EXEMP)
public class MailerExemp extends Mailer implements IMailer {
- private final Environment env;
private final LigneFichierExempService service;
public MailerExemp(Environment env, LigneFichierExempService service) {
- this.env = env;
+ super(env);
this.service = service;
}
@@ -35,7 +34,7 @@ public MailerExemp(Environment env, LigneFichierExempService service) {
@Override
public void mailDebutTraitement(String mailDestinataire, Demande demande){
DemandeExemp demandeExemp = (DemandeExemp) demande;
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_EXEMPLARISATION_START + ((DemandeExemp) demande).getTypeExemp().getLibelle() + " N°" + demande.getId() + Constant.DEMANDE_MAIL_DEBUT + " - ILN " + demande.getIln()
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_EXEMPLARISATION_START + ((DemandeExemp) demande).getTypeExemp().getLibelle() + " N°" + demande.getId() + Constant.DEMANDE_MAIL_DEBUT + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution()
, "Bonjour,
Votre exemplarisation - " + demandeExemp.getTypeExemp().getLibelle() + " N° " + demande.getId() + " - est en cours de traitement.
"
+ "Pour toute information complémentaire, merci de bien vouloir déposer une demande sur le guichet d'assistance : https://stp.abes.fr/
"
+ "
Cordialement,
L'équipe ITEM.");
@@ -48,7 +47,7 @@ public void mailFinTraitement(String mailDestinataire, Demande demande, File f,
DemandeExemp demandeExemp = (DemandeExemp) demande;
int nbExempCree = service.getNbLigneFichierSuccessByDemande(demandeExemp);
int nbRechercheTotal = service.getNbLigneFichierTotalByDemande(demandeExemp);
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_EXEMPLARISATION_END + demandeExemp.getTypeExemp().getLibelle() + " N°" + demandeExemp.getId() + " - ILN " + demande.getIln(),
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_EXEMPLARISATION_END + demandeExemp.getTypeExemp().getLibelle() + " N°" + demandeExemp.getId() + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution(),
"Bonjour,
Votre exemplarisation - " + demandeExemp.getTypeExemp().getLibelle() + " N°" + demandeExemp.getId() + " - est terminée." + Constant.HTML_BALISE_BR +
"Bilan :" + Constant.HTML_BALISE_BR +
"Exemplarisation démarrée le : " + Constant.formatDate.format(dateDebut) + Constant.HTML_BALISE_BR +
@@ -76,7 +75,7 @@ public void mailFinTraitement(String mailDestinataire, Demande demande, File f,
@Override
public void mailEchecTraitement(String mailDestinataire, Demande demande, LocalDateTime dateDebut){
DemandeExemp demandeExemp = (DemandeExemp) demande;
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_EXEMPLARISATION_START + demandeExemp.getTypeExemp().getLibelle() + " N°" + demandeExemp.getId() + "-" + Constant.DEMANDE_MAIL_ECHEC + " - ILN " + demande.getIln(),
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_EXEMPLARISATION_START + demandeExemp.getTypeExemp().getLibelle() + " N°" + demandeExemp.getId() + "-" + Constant.DEMANDE_MAIL_ECHEC + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution(),
"Bonjour,
" +
"votre exemplarisation - " + demandeExemp.getTypeExemp().getLibelle() +" N°" + demandeExemp.getId() + " lancée le " + dateDebut + "n'a pas pu être traitée.
" +
"Il convient de ne pas relancer l’exemplarisation. Le traitement reprendra à l’endroit où l’erreur s’est produite : c’est-à-dire que le programme se relancera automatiquement dès que le dysfonctionnement sera résolu, sans intervention manuelle de votre part." +
@@ -88,7 +87,7 @@ public void mailEchecTraitement(String mailDestinataire, Demande demande, LocalD
@Override
public void mailAlertAdmin(String mailDestinataire, Demande demande) {
- String requestJson = mailToJSON(mailDestinataire+";"+mailAdmin, "Erreur dans Item / Exemplarisation" + " - ILN " + demande.getIln() + " / " + ((env.getActiveProfiles().length>0)?env.getActiveProfiles()[0]:"Local"), "Une erreur vient de se produire sur Item sur la demande" + demande.getId());
+ String requestJson = mailToJSON(mailDestinataire+";"+mailAdmin, "Erreur dans Item / Exemplarisation" + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution(), "Une erreur vient de se produire sur Item sur la demande" + demande.getId());
sendMail(requestJson);
}
}
diff --git a/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerModif.java b/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerModif.java
index c9895428..c853fe71 100644
--- a/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerModif.java
+++ b/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerModif.java
@@ -17,11 +17,9 @@
@Service
@Strategy(type = IMailer.class, typeDemande = TYPE_DEMANDE.MODIF)
public class MailerModif extends Mailer implements IMailer {
- private final Environment env;
-
private final LigneFichierModifService service;
public MailerModif(Environment env, LigneFichierModifService service) {
- this.env = env;
+ super(env);
this.service = service;
}
@@ -33,8 +31,8 @@ public MailerModif(Environment env, LigneFichierModifService service) {
@Override
public void mailDebutTraitement(String mailDestinataire, Demande demande){
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_MODIFICATION_START + demande.getId() + " lancée - ILN " + demande.getIln()
- + " lancée.", "Bonjour,
Votre demande de modification d'exemplaire n° " + demande.getId() + " a été lancée.
"+
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_MODIFICATION_START + demande.getId() + " lancée - ILN " + demande.getIln() + " / " + getEnvironnementExecution()
+ + " lancée.", "Bonjour,
Votre demande de modification d'exemplaires n° " + demande.getId() + " a été lancée.
"+
"
Cordialement.
L'équipe ITEM'.");
sendMail(requestJson);
}
@@ -42,12 +40,12 @@ public void mailDebutTraitement(String mailDestinataire, Demande demande){
@Override
public void mailFinTraitement(String mailDestinataire, Demande demande, File f, LocalDateTime dateDebut, LocalDateTime dateFin) {
int numDemande = demande.getId();
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_MODIFICATION_START + numDemande + " terminée - ILN " + demande.getIln(),
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_MODIFICATION_START + numDemande + " terminée - ILN " + demande.getIln() + " / " + getEnvironnementExecution(),
"Bonjour,
Votre demande " + numDemande + " de modification d'exemplaires a bien été traitée.
" +
"Nombre d'exemplaires traités : " + service.getNbLigneFichierTraiteeByDemande(demande) + Constant.HTML_BALISE_BR +
"Nombre de traitements effectués avec succès : " + service.getNbLigneFichierSuccessByDemande(demande) + Constant.HTML_BALISE_BR +
"Nombre de traitements échoués : " + service.getNbLigneFichierErrorByDemande(demande) + Constant.HTML_BALISE_BR +
- "Vous pouvez retrouver le résultat de votre demande depuis le tableau de bord de l'application.
" +
+ "Vous pouvez retrouver le résultat de votre demande depuis le tableau de bord de l'application.
" +
"Cordialement.
Les services de l'Abes.");
sendMailWithAttachment(requestJson, f);
}
@@ -60,7 +58,7 @@ public void mailFinTraitement(String mailDestinataire, Demande demande, File f,
*/
@Override
public void mailEchecTraitement(String mailDestinataire, Demande demande, LocalDateTime dateDebut){
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_MODIFICATION_START + demande.getId() + Constant.DEMANDE_MAIL_ECHEC + " - ILN " + demande.getIln(),
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_MODIFICATION_START + demande.getId() + Constant.DEMANDE_MAIL_ECHEC + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution(),
"Bonjour,
Votre modification d'exemplaires - N°" + demande.getId() + "n'a pas pu être exécutée. Une erreur vient de se produire sur ITEM. Dès que l'incident sera résolu vous recevrez un message vous indiquant la reprise du traitement. Cela ne nécessite aucune intervention de votre part." +
"Pour toute information complémentaire, merci de bien vouloir déposer une demande sur le guichet d'assistance : https://stp.abes.fr"+
"
Cordialement.
L'équipe ITEM.");
@@ -69,7 +67,7 @@ public void mailEchecTraitement(String mailDestinataire, Demande demande, LocalD
@Override
public void mailAlertAdmin(String mailUtilisateur, Demande demande) {
- String requestJson = mailToJSON(mailAdmin, "Erreur dans Item / Modification" + " - ILN " + demande.getIln() + " / " + ((env.getActiveProfiles().length>0)?env.getActiveProfiles()[0]:"Local"), "Une erreur vient de se produire sur Item / Modification sur la demande" + demande.getId());
+ String requestJson = mailToJSON(mailAdmin, "Erreur dans Item / Modification" + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution(), "Une erreur vient de se produire sur Item / Demande de Modification " + demande.getId());
sendMail(requestJson);
}
diff --git a/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerRecouv.java b/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerRecouv.java
index 66fba7cd..927d6753 100644
--- a/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerRecouv.java
+++ b/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerRecouv.java
@@ -16,12 +16,10 @@
@Slf4j
@Strategy(type = IMailer.class, typeDemande = TYPE_DEMANDE.RECOUV)
public class MailerRecouv extends Mailer implements IMailer {
-
- private final Environment env;
private final LigneFichierRecouvService service;
public MailerRecouv(Environment env, LigneFichierRecouvService service) {
- this.env = env;
+ super(env);
this.service = service;
}
@@ -32,7 +30,7 @@ public MailerRecouv(Environment env, LigneFichierRecouvService service) {
*/
@Override
public void mailDebutTraitement(String mailDestinataire, Demande demande) {
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_RECOUVREMENT_START + demande.getId() + Constant.DEMANDE_MAIL_DEBUT + " - ILN " + demande.getIln()
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_RECOUVREMENT_START + demande.getId() + Constant.DEMANDE_MAIL_DEBUT + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution()
, "Bonjour,
votre taux de recouvrement - Recouvrement N°" + demande.getId() + " est en cours de traitement.
" +
"Pour toute information complémentaire, merci de bien vouloir déposer une demande sur le guichet d'assistance : https://stp.abes.fr/" +
"
Cordialement,
L'équipe ITEM");
@@ -50,7 +48,7 @@ public void mailFinTraitement(String mailDestinataire, Demande demande, File f,
double tauxRecouv = ((double)nbNoticesTrouvees / (double)nbRechercheTotal) * 100;
double tauxExemp = ((double)nbUneReponse / (double)nbRechercheTotal) * 100;
DecimalFormat df = new DecimalFormat("0.00");
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_RECOUVREMENT_END + numDemande + " - ILN " + demande.getIln(),
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_RECOUVREMENT_END + numDemande + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution(),
"Bonjour," + Constant.HTML_BALISE_BR +
"Votre taux de recouvrement N°" + numDemande + " est terminé." + Constant.HTML_BALISE_BR +
"Bilan : " + Constant.HTML_BALISE_BR +
@@ -72,7 +70,7 @@ public void mailFinTraitement(String mailDestinataire, Demande demande, File f,
@Override
public void mailEchecTraitement(String mailDestinataire, Demande demande, LocalDateTime dateDebut) {
- String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_RECOUVREMENT_START + demande.getId() + " - " + Constant.DEMANDE_MAIL_ECHEC + " - ILN " + demande.getIln(),
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_RECOUVREMENT_START + demande.getId() + " - " + Constant.DEMANDE_MAIL_ECHEC + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution(),
"Votre taux de recouvrement - N°" + demande.getId() + " - n'a pas pu être exécuté. Une erreur vient de se produire sur ITEM. Dès que l'incident sera résolu vous recevrez un message vous indiquant la reprise du traitement. Cela ne nécessite aucune intervention de votre part.
" +
"Pour toute information complémentaire, merci de bien vouloir déposer une demande sur le guichet d'assistance : https://stp.abes.fr
" +
"
Cordialement,
L'équipe ITEM");
@@ -81,7 +79,7 @@ public void mailEchecTraitement(String mailDestinataire, Demande demande, LocalD
@Override
public void mailAlertAdmin(String mailUtilisateur, Demande demande) {
- String requestJson = mailToJSON(mailAdmin, "Erreur dans Item / Recouvrement " + " - ILN " + demande.getIln() + " / " + ((env.getActiveProfiles().length>0)?env.getActiveProfiles()[0]:"Local"), "Une erreur vient de se produire sur Item sur la demande" + demande.getId());
+ String requestJson = mailToJSON(mailAdmin, "Erreur dans Item / Recouvrement - ILN " + demande.getIln() + " / " + getEnvironnementExecution(), "Une erreur vient de se produire sur Item sur la demande " + demande.getId());
sendMail(requestJson);
}
diff --git a/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerSupp.java b/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerSupp.java
new file mode 100644
index 00000000..3217bf0f
--- /dev/null
+++ b/batch/src/main/java/fr/abes/item/batch/mail/impl/MailerSupp.java
@@ -0,0 +1,72 @@
+package fr.abes.item.batch.mail.impl;
+
+import fr.abes.item.batch.mail.IMailer;
+import fr.abes.item.core.configuration.factory.Strategy;
+import fr.abes.item.core.constant.Constant;
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.entities.item.Demande;
+import fr.abes.item.core.service.impl.LigneFichierSuppService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.time.LocalDateTime;
+
+@Slf4j
+@Service
+@Strategy(type = IMailer.class, typeDemande = TYPE_DEMANDE.SUPP)
+public class MailerSupp extends Mailer implements IMailer {
+ private final LigneFichierSuppService service;
+ public MailerSupp(Environment env, LigneFichierSuppService service) {
+ super(env);
+ this.service = service;
+ }
+
+ /**
+ * Mail indiquant le début du traitement
+ * @param mailDestinataire mail de l'utilisateur qui a lancé le trraitement (la demandeModif)
+ * @param demande Demande concernée par le message
+ */
+ @Override
+ public void mailDebutTraitement(String mailDestinataire, Demande demande){
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_SUPPRESSION_START + demande.getId() + " lancée - ILN " + demande.getIln() + " / " + getEnvironnementExecution()
+ + " lancée.", "Bonjour,
Votre demande de suppression d'exemplaires n° " + demande.getId() + " a été lancée.
"+
+ "
Cordialement.
L'équipe ITEM'.");
+ sendMail(requestJson);
+ }
+
+ @Override
+ public void mailFinTraitement(String mailDestinataire, Demande demande, File f, LocalDateTime dateDebut, LocalDateTime dateFin) {
+ int numDemande = demande.getId();
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_SUPPRESSION_START + numDemande + " terminée - ILN " + demande.getIln() + " / " + getEnvironnementExecution(),
+ "Bonjour,
Votre demande " + numDemande + " de suppression d'exemplaires a bien été traitée.
" +
+ "Nombre d'exemplaires traités : " + service.getNbLigneFichierTraiteeByDemande(demande) + Constant.HTML_BALISE_BR +
+ "Nombre de traitements effectués avec succès : " + service.getNbLigneFichierSuccessByDemande(demande) + Constant.HTML_BALISE_BR +
+ "Nombre de traitements échoués : " + service.getNbLigneFichierErrorByDemande(demande) + Constant.HTML_BALISE_BR +
+ "Vous pouvez retrouver le résultat de votre demande depuis le tableau de bord de l'application.
" +
+ "Cordialement.
Les services de l'Abes.");
+ sendMailWithAttachment(requestJson, f);
+ }
+
+ /**
+ * Mail indiquant l'echec du traitement
+ * @param mailDestinataire mail de l'utilisateur qui a lancé le traitement
+ * @param demande numéro de la demandeSupp
+ * @param dateDebut date de début de traitement
+ */
+ @Override
+ public void mailEchecTraitement(String mailDestinataire, Demande demande, LocalDateTime dateDebut){
+ String requestJson = mailToJSON(mailDestinataire, Constant.DEMANDE_SUPPRESSION_START + demande.getId() + "-" + Constant.DEMANDE_MAIL_ECHEC + " - ILN " + demande.getIln() + " / " + getEnvironnementExecution(),
+ "Bonjour,
Votre demande de suppression d'exemplaires - N°" + demande.getId() + " n'a pas pu être exécutée. Une erreur vient de se produire sur ITEM. Dès que l'incident sera résolu vous recevrez un message vous indiquant la reprise du traitement. Cela ne nécessite aucune intervention de votre part." +
+ "Pour toute information complémentaire, merci de bien vouloir déposer une demande sur le guichet d'assistance : https://stp.abes.fr"+
+ "
Cordialement.
L'équipe ITEM.");
+ sendMail(requestJson);
+ }
+
+ @Override
+ public void mailAlertAdmin(String mailUtilisateur, Demande demande) {
+ String requestJson = mailToJSON(mailAdmin, "Erreur dans Item / Suppression - ILN " + demande.getIln() + " / " + getEnvironnementExecution(), "Une erreur vient de se produire sur Item / Demande de suppression " + demande.getId());
+ sendMail(requestJson);
+ }
+}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesExempTakslet.java b/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesExempTakslet.java
index cb5caa16..1e85cda3 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesExempTakslet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesExempTakslet.java
@@ -40,7 +40,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.EXEMP);
this.demandes = (List) service.getIdNextDemandeToArchive();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesModifTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesModifTasklet.java
index 6fbc7a3d..5b4756ca 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesModifTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesModifTasklet.java
@@ -37,7 +37,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.MODIF);
this.demandes = (List) service.getIdNextDemandeToArchive();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesRecouvTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesRecouvTasklet.java
index ad8dfac8..5c9d33e4 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesRecouvTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/ArchiveDemandesRecouvTasklet.java
@@ -37,7 +37,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.RECOUV);
this.demandes = (List) service.getIdNextDemandeToArchive();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesExempTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesExempTasklet.java
index ee8e7c97..48e5e706 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesExempTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesExempTasklet.java
@@ -44,7 +44,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.EXEMP);
this.demandes = (List) service.getIdNextDemandeToDelete();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesModifTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesModifTasklet.java
index 944256e0..08f0bffc 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesModifTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesModifTasklet.java
@@ -42,7 +42,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.MODIF);
this.demandes = (List) service.getIdNextDemandeToDelete();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesRecouvTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesRecouvTasklet.java
index 4614c8c2..e1ecb7b6 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesRecouvTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteDemandesRecouvTasklet.java
@@ -41,7 +41,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.RECOUV);
this.demandes = (List) service.getIdNextDemandeToDelete();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesExempTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesExempTasklet.java
index 1d2c12f9..44427f43 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesExempTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesExempTasklet.java
@@ -40,7 +40,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.EXEMP);
this.demandes = (List) service.getIdNextDemandeToPlaceInDeletedStatus();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesModifTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesModifTasklet.java
index f089d0e3..f0052e4a 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesModifTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesModifTasklet.java
@@ -38,7 +38,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.MODIF);
this.demandes = (List) service.getIdNextDemandeToPlaceInDeletedStatus();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesRecouvTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesRecouvTasklet.java
index 5ed2ef8f..348bcd3b 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesRecouvTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/DeleteStatusDemandesRecouvTasklet.java
@@ -38,7 +38,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.RECOUV);
this.demandes = (List) service.getIdNextDemandeToPlaceInDeletedStatus();
if (this.demandes == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/GenererFichierTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/GenererFichierTasklet.java
index f8afc390..665dd23d 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/GenererFichierTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/GenererFichierTasklet.java
@@ -5,7 +5,8 @@
import fr.abes.item.batch.traitement.model.LigneFichierDtoExemp;
import fr.abes.item.batch.traitement.model.LigneFichierDtoModif;
import fr.abes.item.batch.traitement.model.LigneFichierDtoRecouv;
-import fr.abes.item.core.components.FichierResultat;
+import fr.abes.item.batch.traitement.model.LigneFichierDtoSupp;
+import fr.abes.item.core.components.FichierResultatModif;
import fr.abes.item.core.configuration.factory.FichierFactory;
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.Constant;
@@ -80,7 +81,7 @@ public void beforeStep(StepExecution stepExecution) {
*/
@Override
public RepeatStatus execute(@NonNull StepContribution contribution, @NonNull ChunkContext chunkContext) throws Exception {
- log.warn(Constant.ENTER_EXECUTE_FROM_GENEREFICHIER);
+ log.info(Constant.ENTER_EXECUTE_FROM_GENEREFICHIER);
try {
String nomFichier = this.genererFichier(); //NOM FICHIER DEMANDE GENERE
@@ -111,40 +112,44 @@ public RepeatStatus execute(@NonNull StepContribution contribution, @NonNull Chu
* @throws FileTypeException : erreur de type de fichier
*/
private String genererFichier() throws IOException, FileTypeException, QueryToSudocException {
- FichierResultat fichierResultat;
+ FichierResultatModif fichierResultatModif;
- fichierResultat = (FichierResultat) FichierFactory.getFichier(Constant.ETATDEM_ENCOURS, demande.getTypeDemande());
- fichierResultat.generateFileName(demande.getId());
- fichierResultat.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId()));
+ fichierResultatModif = (FichierResultatModif) FichierFactory.getFichier(Constant.ETATDEM_ENCOURS, demande.getTypeDemande());
+ fichierResultatModif.generateFileName(demande.getId());
+ fichierResultatModif.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId()));
- try (FileWriter fw = new FileWriter(fichierResultat.getPath().resolve(fichierResultat.getFilename()).toString(), false);
+ try (FileWriter fw = new FileWriter(fichierResultatModif.getPath().resolve(fichierResultatModif.getFilename()).toString(), false);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
// en tête du fichier
out.println(demandeService.getInfoHeaderFichierResultat(demande, dateDebut));
for (LigneFichier ligne : this.ligneFichierService.getLigneFichierTraiteeByDemande(demande)) {
switch (demande.getTypeDemande()) {
- case EXEMP:
+ case EXEMP -> {
DemandeExemp demandeExemp = (DemandeExemp) demande;
LigneFichierDtoExemp ligneFichierDtoExemp = new LigneFichierDtoExemp((LigneFichierExemp) ligne);
log.warn(ligneFichierDtoExemp.getIndexRecherche());
ligneFichierDtoExemp.setRequete(demandeService.getQueryToSudoc(demandeExemp.getIndexRecherche().getCode(), demandeExemp.getTypeExemp().getLibelle(), ligneFichierDtoExemp.getIndexRecherche().split(";")));
out.println(ligneFichierDtoExemp.getValeurToWriteInFichierResultat(demande, nbPpnInFileResult));
- break;
- case MODIF:
+ }
+ case MODIF -> {
LigneFichierDtoModif ligneFichierDtoModif = new LigneFichierDtoModif((LigneFichierModif) ligne);
out.println(ligneFichierDtoModif.getValeurToWriteInFichierResultat(demande, nbPpnInFileResult));
- break;
- default:
- DemandeRecouv demandeRecouv = (DemandeRecouv)demande;
+ }
+ case SUPP -> {
+ LigneFichierDtoSupp ligneFichierDtoSupp = new LigneFichierDtoSupp((LigneFichierSupp) ligne);
+ out.println(ligneFichierDtoSupp.getValeurToWriteInFichierResultat(demande,nbPpnInFileResult));
+ }
+ default -> {
+ DemandeRecouv demandeRecouv = (DemandeRecouv) demande;
LigneFichierDtoRecouv ligneFichierDtoRecouv = new LigneFichierDtoRecouv((LigneFichierRecouv) ligne);
ligneFichierDtoRecouv.setRequete(demandeService.getQueryToSudoc(demandeRecouv.getIndexRecherche().getCode(), null, ligneFichierDtoRecouv.getIndexRecherche().split(";")));
out.println(ligneFichierDtoRecouv.getValeurToWriteInFichierResultat(demande, nbPpnInFileResult));
- break;
+ }
}
//ligne correspondant au résultat du traitement de chaque ligne du fichier d'origine
}
- return fichierResultat.getFilename();
+ return fichierResultatModif.getFilename();
} catch (IOException | QueryToSudocException | DataAccessException ex) {
log.error(Constant.ERROR_WHILE_CREATING_RESULT_FILE_IN_EXECUTE + ex);
throw ex;
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeExempTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeExempTasklet.java
index 04456abb..198775a8 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeExempTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeExempTasklet.java
@@ -55,7 +55,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = factory.getStrategy(IDemandeService.class, TYPE_DEMANDE.EXEMP);
this.demande = (DemandeExemp) service.getIdNextDemandeToProceed(this.minHour, this.maxHour);
if (this.demande == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeModifTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeModifTasklet.java
index 508724cc..d2dda1bc 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeModifTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeModifTasklet.java
@@ -55,7 +55,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.MODIF);
this.demande = (DemandeModif) service.getIdNextDemandeToProceed(this.minHour, this.maxHour);
if (this.demande == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeRecouvTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeRecouvTasklet.java
index 427157e8..c4167ecd 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeRecouvTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeRecouvTasklet.java
@@ -55,7 +55,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.RECOUV);
this.demande = (DemandeRecouv) service.getIdNextDemandeToProceed(this.minHour, this.maxHour);
if (this.demande == null) {
- log.warn(Constant.NO_DEMANDE_TO_PROCESS);
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
return RepeatStatus.FINISHED;
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeSuppTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeSuppTasklet.java
new file mode 100644
index 00000000..6d1f5e91
--- /dev/null
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/GetNextDemandeSuppTasklet.java
@@ -0,0 +1,74 @@
+package fr.abes.item.batch.traitement;
+
+import fr.abes.item.core.configuration.factory.StrategyFactory;
+import fr.abes.item.core.constant.Constant;
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.entities.item.DemandeSupp;
+import fr.abes.item.core.service.IDemandeService;
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.exception.ConstraintViolationException;
+import org.hibernate.exception.JDBCConnectionException;
+import org.springframework.batch.core.ExitStatus;
+import org.springframework.batch.core.StepContribution;
+import org.springframework.batch.core.StepExecution;
+import org.springframework.batch.core.StepExecutionListener;
+import org.springframework.batch.core.scope.context.ChunkContext;
+import org.springframework.batch.core.step.tasklet.Tasklet;
+import org.springframework.batch.repeat.RepeatStatus;
+import org.springframework.dao.DataAccessException;
+
+import java.sql.SQLException;
+
+@Slf4j
+public class GetNextDemandeSuppTasklet implements Tasklet, StepExecutionListener {
+ private final StrategyFactory strategyFactory;
+ private DemandeSupp demande;
+ private final int minHour;
+ private final int maxHour;
+
+ public GetNextDemandeSuppTasklet(StrategyFactory strategyFactory, int minHour, int maxHour) {
+ this.strategyFactory = strategyFactory;
+ this.minHour = minHour;
+ this.maxHour = maxHour;
+ }
+
+ @Override
+ public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
+ log.info(Constant.ENTER_EXECUTE_FROM_GETNEXTDEMANDESUPPTASKLET);
+ try {
+ IDemandeService service = strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP);
+ this.demande = (DemandeSupp) service.getIdNextDemandeToProceed(minHour, maxHour);
+ if (this.demande == null) {
+ log.info(Constant.NO_DEMANDE_TO_PROCESS);
+ stepContribution.setExitStatus(new ExitStatus("AUCUNE DEMANDE"));
+ return RepeatStatus.FINISHED;
+ }
+ service.changeState(this.demande, Constant.ETATDEM_ENCOURS);
+ } catch (JDBCConnectionException | ConstraintViolationException j){
+ log.error("Erreur hibernate JDBC");
+ log.error(j.toString());
+ } catch (DataAccessException d){
+ log.error("GetNextDemandeSuppTasklet : Erreur d'accès à la base de donnée");
+ if(d.getRootCause() instanceof SQLException sqlEx){
+ log.error("Erreur SQL : " + sqlEx.getErrorCode());
+ log.error(sqlEx.getSQLState() + "|" + sqlEx.getMessage() + "|" + sqlEx.getLocalizedMessage());
+ }
+ }
+ return RepeatStatus.FINISHED;
+ }
+
+ @Override
+ public void beforeStep(@NonNull StepExecution stepExecution) {
+ log.info(Constant.JOB_TRAITER_LIGNE_FICHIER_START_SUPP);
+ }
+
+ @Override
+ public ExitStatus afterStep(StepExecution stepExecution) {
+ if (stepExecution.getExitStatus().equals(ExitStatus.COMPLETED)) {
+ stepExecution.getJobExecution().getExecutionContext().put("demandeId", this.demande.getId());
+ stepExecution.getJobExecution().getExecutionContext().put("typeDemande", this.demande.getTypeDemande().toString());
+ }
+ return stepExecution.getExitStatus();
+ }
+}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/LireLigneFichierTasklet.java b/batch/src/main/java/fr/abes/item/batch/traitement/LireLigneFichierTasklet.java
index fbb6617b..634ab725 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/LireLigneFichierTasklet.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/LireLigneFichierTasklet.java
@@ -2,10 +2,7 @@
import fr.abes.item.batch.LogTime;
import fr.abes.item.batch.mail.IMailer;
-import fr.abes.item.batch.traitement.model.LigneFichierDto;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoExemp;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoModif;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoRecouv;
+import fr.abes.item.batch.traitement.model.*;
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.constant.TYPE_DEMANDE;
@@ -49,7 +46,7 @@ public class LireLigneFichierTasklet implements Tasklet, StepExecutionListener {
public LireLigneFichierTasklet(StrategyFactory factory, String mailAdmin) {
this.factory = factory;
this.mailAdmin = mailAdmin;
- lignesFichier = new ArrayList<>();
+ this.lignesFichier = new ArrayList<>();
}
@Override
@@ -60,31 +57,26 @@ public void beforeStep(@NonNull StepExecution stepExecution) {
.getExecutionContext();
this.typeDemande = TYPE_DEMANDE.valueOf((String) executionContext.get("typeDemande"));
this.demandeId = (Integer) executionContext.get("demandeId");
- demandeService = factory.getStrategy(IDemandeService.class, this.typeDemande);
+ this.demandeService = factory.getStrategy(IDemandeService.class, this.typeDemande);
this.demande = demandeService.findById(demandeId);
- ligneFichierService = factory.getStrategy(ILigneFichierService.class, demande.getTypeDemande());
+ this.ligneFichierService = factory.getStrategy(ILigneFichierService.class, demande.getTypeDemande());
this.email = demande.getUtilisateur().getEmail() + ";" + mailAdmin;
- mailer = factory.getStrategy(IMailer.class, demande.getTypeDemande());
+ this.mailer = factory.getStrategy(IMailer.class, demande.getTypeDemande());
this.dateDebut = stepExecution.getJobExecution().getCreateTime();
}
@Override
public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull ChunkContext chunkContext) throws Exception{
- log.warn(Constant.ENTER_EXECUTE_FROM_LIRELIGNEFICHIERTASKLET);
+ log.info(Constant.ENTER_EXECUTE_FROM_LIRELIGNEFICHIERTASKLET);
try {
for (LigneFichier localLigne : ligneFichierService.getLigneFichierbyDemande(demande)) {
if (localLigne.getTraitee().equals(0)) {
- switch (demande.getTypeDemande()){
- case EXEMP:
- this.lignesFichier.add(new LigneFichierDtoExemp((LigneFichierExemp) localLigne));
- break;
- case MODIF:
- this.lignesFichier.add(new LigneFichierDtoModif((LigneFichierModif) localLigne));
- break;
- case RECOUV:
- this.lignesFichier.add(new LigneFichierDtoRecouv((LigneFichierRecouv) localLigne));
- break;
- default:
+ switch (demande.getTypeDemande()) {
+ case EXEMP -> this.lignesFichier.add(new LigneFichierDtoExemp((LigneFichierExemp) localLigne));
+ case MODIF -> this.lignesFichier.add(new LigneFichierDtoModif((LigneFichierModif) localLigne));
+ case RECOUV -> this.lignesFichier.add(new LigneFichierDtoRecouv((LigneFichierRecouv) localLigne));
+ case SUPP -> this.lignesFichier.add(new LigneFichierDtoSupp((LigneFichierSupp) localLigne));
+ default -> {}
}
}
}
@@ -103,6 +95,7 @@ public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull
this.demande,
this.dateDebut);
mailer.mailAlertAdmin(this.mailAdmin, demande);
+ //todo Voir si le changement d'etat est vraiment nescessaire (on peut pas modifier l'etat vu que c'est dans la bdd justement)
demandeService.changeState(demande, Constant.ETATDEM_ERREUR);
stepContribution.setExitStatus(ExitStatus.FAILED);
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java b/batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java
index e57f9ed7..27dc7423 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java
@@ -5,16 +5,14 @@
import fr.abes.cbs.notices.DonneeLocale;
import fr.abes.cbs.notices.Exemplaire;
import fr.abes.cbs.notices.Zone;
-import fr.abes.item.batch.traitement.model.ILigneFichierDtoMapper;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoExemp;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoModif;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoRecouv;
+import fr.abes.item.batch.traitement.model.*;
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.constant.TYPE_DEMANDE;
import fr.abes.item.core.entities.item.DemandeExemp;
import fr.abes.item.core.entities.item.DemandeModif;
import fr.abes.item.core.entities.item.DemandeRecouv;
+import fr.abes.item.core.entities.item.DemandeSupp;
import fr.abes.item.core.exception.QueryToSudocException;
import fr.abes.item.core.service.TraitementService;
import fr.abes.item.core.service.impl.DemandeExempService;
@@ -172,14 +170,10 @@ public void recouvExemplaire(DemandeRecouv demande, LigneFichierDtoRecouv ligneF
try {
ligneFichierDtoRecouv.setNbReponses(demandeRecouvService.launchQueryToSudoc(demande.getIndexRecherche().getCode(), ligneFichierDtoRecouv.getIndexRecherche()));
switch (ligneFichierDtoRecouv.getNbReponses()) {
- case 0:
- ligneFichierDtoRecouv.setListePpn("");
- break;
- case 1:
- ligneFichierDtoRecouv.setListePpn(traitementService.getCbs().getPpnEncours());
- break;
- default:
- ligneFichierDtoRecouv.setListePpn(traitementService.getCbs().getListePpn().toString().replace(';', ','));
+ case 0 -> ligneFichierDtoRecouv.setListePpn("");
+ case 1 -> ligneFichierDtoRecouv.setListePpn(traitementService.getCbs().getPpnEncours());
+ default ->
+ ligneFichierDtoRecouv.setListePpn(traitementService.getCbs().getListePpn().toString().replace(';', ','));
}
} catch (IOException ex) {
log.error("Erreur de communication avec le CBS sur demande recouv " + demande.getId() + " / ligne fichier n°" + ligneFichierDtoRecouv.getNumLigneFichier());
@@ -189,5 +183,16 @@ public void recouvExemplaire(DemandeRecouv demande, LigneFichierDtoRecouv ligneF
throw ex;
}
}
-
+ @Retryable(maxAttempts = 4, retryFor = IOException.class,
+ noRetryFor = {CBSException.class}, backoff = @Backoff(delay = 1000, multiplier = 2) )
+ public void deleteExemplaire(DemandeSupp demandeSupp, LigneFichierDtoSupp ligneFichierDtoSupp) throws IOException, CBSException {
+ try {
+ traitementService.deleteExemplaire(ligneFichierDtoSupp.getEpn());
+ } catch (IOException e) {
+ log.error("Erreur de communication avec le CBS sur demande de suppression " + demandeSupp.getId() + " / ligne fichier n°" + ligneFichierDtoSupp.getNumLigneFichier() + " / epn : " + ligneFichierDtoSupp.getEpn());
+ this.disconnect();
+ this.authenticate("M"+ demandeSupp.getRcr());
+ throw e;
+ }
+ }
}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/model/LigneFichierDtoSupp.java b/batch/src/main/java/fr/abes/item/batch/traitement/model/LigneFichierDtoSupp.java
new file mode 100644
index 00000000..473578c2
--- /dev/null
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/model/LigneFichierDtoSupp.java
@@ -0,0 +1,36 @@
+package fr.abes.item.batch.traitement.model;
+
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.entities.item.Demande;
+import fr.abes.item.core.entities.item.LigneFichierSupp;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@NoArgsConstructor
+@Getter @Setter
+public class LigneFichierDtoSupp extends LigneFichierDto implements ILigneFichierDtoService{
+ private String ppn;
+ private String rcr;
+ private String epn;
+
+ public LigneFichierDtoSupp(LigneFichierSupp ligneFichierSupp) {
+ super(ligneFichierSupp.getNumLigneFichier(), ligneFichierSupp.getTraitee(), ligneFichierSupp.getPosition(), ligneFichierSupp.getId(), ligneFichierSupp.getRetourSudoc(), ligneFichierSupp.getValeurZone());
+ this.ppn = ligneFichierSupp.getPpn();
+ this.rcr = ligneFichierSupp.getRcr();
+ this.epn = ligneFichierSupp.getEpn();
+ }
+
+ @Override
+ public String getValeurToWriteInFichierResultat(Demande demande, Integer nbPpnInFileResult) {
+ return this.getPpn() + ";" + this.getRcr() + ";"
+ + this.getEpn() + ";" + this.getRetourSudoc();
+ }
+
+
+ public TYPE_DEMANDE getTypeDemande() {
+ return TYPE_DEMANDE.SUPP;
+ }
+
+
+}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/model/LigneFichierDtoSuppMapper.java b/batch/src/main/java/fr/abes/item/batch/traitement/model/LigneFichierDtoSuppMapper.java
new file mode 100644
index 00000000..13f80ce1
--- /dev/null
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/model/LigneFichierDtoSuppMapper.java
@@ -0,0 +1,29 @@
+package fr.abes.item.batch.traitement.model;
+
+import fr.abes.item.core.configuration.factory.Strategy;
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.entities.item.*;
+
+@Strategy(type = ILigneFichierDtoMapper.class, typeDemande = TYPE_DEMANDE.SUPP)
+public class LigneFichierDtoSuppMapper implements ILigneFichierDtoMapper {
+
+ @Override
+ public LigneFichier getLigneFichierEntity(LigneFichierDto lfd)
+ {
+ LigneFichierDtoSupp lfdSupp = (LigneFichierDtoSupp) lfd;
+ LigneFichierSupp lf = new LigneFichierSupp();
+ lf.setNumLigneFichier(lfdSupp.getNumLigneFichier());
+ lf.setPpn(lfdSupp.getPpn());
+ lf.setEpn(lfdSupp.getEpn());
+ lf.setRcr(lfdSupp.getRcr());
+ lf.setValeurZone(lfdSupp.getValeurZone());
+ lf.setTraitee(lfdSupp.getTraitee());
+ lf.setPosition(lfdSupp.getPosition());
+ lf.setRetourSudoc(lfdSupp.getRetourSudoc());
+ lf.setDemandeSupp(new DemandeSupp(lfdSupp.getRefDemande()));
+ return lf;
+ }
+
+ private LigneFichierDtoSuppMapper(){}
+
+}
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java
index ad0b6960..a4de9220 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java
@@ -5,17 +5,11 @@
import fr.abes.cbs.notices.DonneeLocale;
import fr.abes.cbs.notices.Zone;
import fr.abes.item.batch.traitement.ProxyRetry;
-import fr.abes.item.batch.traitement.model.LigneFichierDto;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoExemp;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoModif;
-import fr.abes.item.batch.traitement.model.LigneFichierDtoRecouv;
+import fr.abes.item.batch.traitement.model.*;
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.constant.TYPE_DEMANDE;
-import fr.abes.item.core.entities.item.Demande;
-import fr.abes.item.core.entities.item.DemandeExemp;
-import fr.abes.item.core.entities.item.DemandeModif;
-import fr.abes.item.core.entities.item.DemandeRecouv;
+import fr.abes.item.core.entities.item.*;
import fr.abes.item.core.exception.QueryToSudocException;
import fr.abes.item.core.service.IDemandeService;
import lombok.NonNull;
@@ -69,6 +63,7 @@ public LigneFichierDto process(@NonNull LigneFichierDto ligneFichierDto) {
return switch (ligneFichierDto.getTypeDemande()) {
case MODIF -> processDemandeModif(ligneFichierDto);
case EXEMP -> processDemandeExemp(ligneFichierDto);
+ case SUPP -> processDemandeSupp(ligneFichierDto);
default -> processDemandeRecouv(ligneFichierDto);
};
} catch (CBSException | ZoneException | QueryToSudocException | IOException e) {
@@ -123,6 +118,24 @@ private LigneFichierDtoExemp processDemandeExemp(LigneFichierDto ligneFichierDto
return ligneFichierDtoExemp;
}
+
+ /**
+ * Méthode permettant de lancer la suppression sur une ligne du fichier
+ *
+ * @param ligneFichierDto ligne du fichier sur laquelle lancer le traitement de suppression
+ * @return la DTO de la ligne fichier modifiée en fonction du résultat du traitement
+ * @throws CBSException : erreur CBS
+ * @throws IOException : erreur de communication avec le CBS
+ */
+ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto) throws CBSException, IOException {
+ DemandeSupp demandeSupp = (DemandeSupp) demande;
+ LigneFichierDtoSupp ligneFichierDtoSupp = (LigneFichierDtoSupp) ligneFichierDto;
+ //sauvegarde la notice modifiée
+ this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp);
+ ligneFichierDtoSupp.setRetourSudoc(Constant.EXEMPLAIRE_SUPPRIME);
+ return ligneFichierDtoSupp;
+ }
+
private String getL035fromDonneesLocales(String donneeLocale) throws ZoneException {
DonneeLocale donneeLocale1 = new DonneeLocale(donneeLocale);
List listeL035 = donneeLocale1.findZones("L035");
diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierReader.java b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierReader.java
index 0802dbfe..3b045f28 100644
--- a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierReader.java
+++ b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierReader.java
@@ -1,7 +1,7 @@
package fr.abes.item.batch.traitement.traiterlignesfichierchunk;
-import fr.abes.item.batch.traitement.ProxyRetry;
import fr.abes.item.batch.traitement.model.LigneFichierDto;
+import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
@@ -13,15 +13,11 @@
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
+@NoArgsConstructor
public class LignesFichierReader implements ItemReader, StepExecutionListener {
private List lignesFichier;
AtomicInteger i = new AtomicInteger();
- private final ProxyRetry proxyRetry;
-
- public LignesFichierReader(ProxyRetry proxyRetry) {
- this.proxyRetry = proxyRetry;
- }
@Override
public void beforeStep(StepExecution stepExecution) {
diff --git a/batch/src/main/resources/application.properties b/batch/src/main/resources/application.properties
index 0a322dc6..9fc02968 100644
--- a/batch/src/main/resources/application.properties
+++ b/batch/src/main/resources/application.properties
@@ -11,4 +11,6 @@ files.upload.statistiques.path=/stat/
# Configuration des logs
logging.config=classpath:log4j2.xml
-spring.main.banner-mode=off
\ No newline at end of file
+spring.main.banner-mode=off
+
+logging.level.org.springframework.context.support=ERROR
\ No newline at end of file
diff --git a/core/pom.xml b/core/pom.xml
index 1c0d4743..fe177713 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -3,7 +3,7 @@
itembackoffice
fr.abes.item
- 2.4.11
+ 2.4.12-SNAPSHOT
4.0.0
jar
diff --git a/core/src/main/java/fr/abes/item/core/components/Epntoppn.java b/core/src/main/java/fr/abes/item/core/components/Epntoppn.java
new file mode 100644
index 00000000..9927b555
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/components/Epntoppn.java
@@ -0,0 +1,18 @@
+package fr.abes.item.core.components;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Epntoppn {
+ private final JdbcTemplate baseXmlJdbcTemplate;
+
+ public Epntoppn(@Qualifier("baseXmlJdbcTemplate") JdbcTemplate baseXmlJdbcTemplate) {
+ this.baseXmlJdbcTemplate = baseXmlJdbcTemplate;
+ }
+
+ public String callFunction(String lesepns, String lercr) {
+ return baseXmlJdbcTemplate.queryForObject("SELECT AUTORITES.EPNTOPPN_JSON('" + lesepns + "', '" + lercr + "') from DUAL", String.class);
+ }
+}
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java
new file mode 100644
index 00000000..75e3d715
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java
@@ -0,0 +1,32 @@
+package fr.abes.item.core.components;
+
+import fr.abes.item.core.constant.Constant;
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.entities.item.Demande;
+import fr.abes.item.core.exception.FileCheckingException;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+@Component
+public class FichierEnrichiSupp extends AbstractFichier implements Fichier {
+ @Override
+ public int getType() {
+ return Constant.ETATDEM_ACOMPLETER;
+ }
+
+ @Override
+ public TYPE_DEMANDE getDemandeType() {
+ return TYPE_DEMANDE.SUPP;
+ }
+
+ @Override
+ public void generateFileName(Integer numDemande) {
+ this.filename = Constant.FIC_ENRICHI_NAME + numDemande + Constant.EXTENSIONCSV;
+ }
+
+ @Override
+ public void checkFileContent(Demande d) throws FileCheckingException, IOException {
+
+ }
+}
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierInitial.java b/core/src/main/java/fr/abes/item/core/components/FichierInitial.java
index 6db09776..08e83f02 100644
--- a/core/src/main/java/fr/abes/item/core/components/FichierInitial.java
+++ b/core/src/main/java/fr/abes/item/core/components/FichierInitial.java
@@ -26,12 +26,12 @@ public int getType() {
return Constant.ETATDEM_PREPARATION;
}
-
@Override
public TYPE_DEMANDE getDemandeType() {
return TYPE_DEMANDE.MODIF;
}
+
@Override
public void checkFileContent(Demande demandeModif) throws FileCheckingException, IOException {
try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString());
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierInitialSupp.java b/core/src/main/java/fr/abes/item/core/components/FichierInitialSupp.java
new file mode 100644
index 00000000..435e60c0
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/components/FichierInitialSupp.java
@@ -0,0 +1,18 @@
+package fr.abes.item.core.components;
+
+
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FichierInitialSupp extends FichierInitial implements Fichier {
+ public FichierInitialSupp(@Value("") final String filename) {
+ super(filename);
+ }
+
+ @Override
+ public TYPE_DEMANDE getDemandeType() {
+ return TYPE_DEMANDE.SUPP;
+ }
+}
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierPrepare.java b/core/src/main/java/fr/abes/item/core/components/FichierPrepare.java
index d4ec7cd4..2d8951cd 100644
--- a/core/src/main/java/fr/abes/item/core/components/FichierPrepare.java
+++ b/core/src/main/java/fr/abes/item/core/components/FichierPrepare.java
@@ -69,16 +69,16 @@ public void ecrireEnTete() {
}
/**
- * Méthode permetant d'alimenter le fichier à partir d'une chaine correspondant à un appel de la fonction Oracle
+ * Méthode permetant d'alimenter le fichier à partir d'une chaine correspondant à une liste d'epn
* @param input résultat de l'appel à la fonction Oracle
* @param rcr rcr de la demandeModif à insérer dans le second champ du fichier
*/
- public void alimenter(String input, String listeppn, String rcr) {
+ public void alimenterEpn(String input, String listeppn, String rcr) {
try (FileWriter fw = new FileWriter(path.resolve(filename).toString(), true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
String[] tabppn = listeppn.split(",");
- Multimap resJson = Utilitaires.parseJson(input);
+ Multimap resJson = Utilitaires.parseJson(input, false);
for (String ppn : tabppn) {
if (resJson.containsKey(ppn)) {
for (String epn : resJson.get(ppn)) {
@@ -92,7 +92,31 @@ public void alimenter(String input, String listeppn, String rcr) {
}
}
-
+
+ /**
+ * Méthode permetant d'alimenter le fichier à partir d'une chaine correspondant à une liste de PPN
+ * @param input résultat de l'appel à la fonction Oracle
+ * @param rcr rcr de la demandeModif à insérer dans le second champ du fichier
+ */
+ public void alimenterPpn(String input, String listeEpn, String rcr) {
+ try (FileWriter fw = new FileWriter(path.resolve(filename).toString(), true);
+ BufferedWriter bw = new BufferedWriter(fw);
+ PrintWriter out = new PrintWriter(bw)) {
+ String[] tabEpn = listeEpn.split(",");
+ Multimap resJson = Utilitaires.parseJson(input, true);
+ for (String epn : tabEpn) {
+ if (resJson.containsKey(epn)) {
+ for (String ppn : resJson.get(epn)) {
+ out.println(ppn + ";" + rcr + ";" + epn + ";");
+ }
+ } else
+ out.println(";" + rcr + ";" + epn + ";");
+ }
+ } catch (IOException ex) {
+ log.error(Constant.ERROR_UNABLE_TO_CREATE_FILE);
+ }
+
+ }
}
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierPrepareSupp.java b/core/src/main/java/fr/abes/item/core/components/FichierPrepareSupp.java
new file mode 100644
index 00000000..c43bffd6
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/components/FichierPrepareSupp.java
@@ -0,0 +1,16 @@
+package fr.abes.item.core.components;
+
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FichierPrepareSupp extends FichierPrepare implements Fichier {
+
+ public FichierPrepareSupp(@Value("") final String filename) {
+ super(filename);
+ }
+
+ @Override
+ public TYPE_DEMANDE getDemandeType() {return TYPE_DEMANDE.SUPP; }
+}
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierResultatExemp.java b/core/src/main/java/fr/abes/item/core/components/FichierResultatExemp.java
index 4d2cadb0..5e7f06e1 100644
--- a/core/src/main/java/fr/abes/item/core/components/FichierResultatExemp.java
+++ b/core/src/main/java/fr/abes/item/core/components/FichierResultatExemp.java
@@ -6,7 +6,7 @@
import org.springframework.stereotype.Component;
@Component
-public class FichierResultatExemp extends FichierResultat implements Fichier {
+public class FichierResultatExemp extends FichierResultatModif implements Fichier {
@Autowired
public FichierResultatExemp(@Value("") final String filename){
this.filename = filename;
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierResultat.java b/core/src/main/java/fr/abes/item/core/components/FichierResultatModif.java
similarity index 85%
rename from core/src/main/java/fr/abes/item/core/components/FichierResultat.java
rename to core/src/main/java/fr/abes/item/core/components/FichierResultatModif.java
index 66f252f8..092d6417 100644
--- a/core/src/main/java/fr/abes/item/core/components/FichierResultat.java
+++ b/core/src/main/java/fr/abes/item/core/components/FichierResultatModif.java
@@ -11,13 +11,13 @@
@Component
@NoArgsConstructor
-public class FichierResultat extends AbstractFichier implements Fichier {
-
+public class FichierResultatModif extends AbstractFichier implements Fichier {
+
@Autowired
- public FichierResultat(@Value("") final String filename){
+ public FichierResultatModif(@Value("") final String filename){
this.filename = filename;
}
-
+
@Override
public int getType() {
return Constant.ETATDEM_ENCOURS;
@@ -34,7 +34,7 @@ public void checkFileContent(Demande demande) {
@Override
public void generateFileName(Integer numDemande) {
this.filename = Constant.FIC_RESULTAT_NAME + numDemande + Constant.EXTENSIONCSV;
-
+
}
}
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierResultatRecouv.java b/core/src/main/java/fr/abes/item/core/components/FichierResultatRecouv.java
index eaa6e598..dd8393c1 100644
--- a/core/src/main/java/fr/abes/item/core/components/FichierResultatRecouv.java
+++ b/core/src/main/java/fr/abes/item/core/components/FichierResultatRecouv.java
@@ -6,7 +6,7 @@
import org.springframework.stereotype.Component;
@Component
-public class FichierResultatRecouv extends FichierResultat implements Fichier {
+public class FichierResultatRecouv extends FichierResultatModif implements Fichier {
@Autowired
public FichierResultatRecouv(@Value("") final String filename){
this.filename = filename;
diff --git a/core/src/main/java/fr/abes/item/core/components/FichierResultatSupp.java b/core/src/main/java/fr/abes/item/core/components/FichierResultatSupp.java
new file mode 100644
index 00000000..7bc257f2
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/components/FichierResultatSupp.java
@@ -0,0 +1,17 @@
+package fr.abes.item.core.components;
+
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FichierResultatSupp extends FichierResultatModif implements Fichier {
+ @Autowired
+ public FichierResultatSupp(@Value("") final String filename){
+ this.filename = filename;
+ }
+
+ @Override
+ public TYPE_DEMANDE getDemandeType() {return TYPE_DEMANDE.SUPP; }
+}
diff --git a/core/src/main/java/fr/abes/item/core/configuration/factory/FichierFactory.java b/core/src/main/java/fr/abes/item/core/configuration/factory/FichierFactory.java
index cda1e211..7d6b82b9 100644
--- a/core/src/main/java/fr/abes/item/core/configuration/factory/FichierFactory.java
+++ b/core/src/main/java/fr/abes/item/core/configuration/factory/FichierFactory.java
@@ -13,59 +13,69 @@
@Service
public class FichierFactory {
- private final List fichiers;
-
- private static final Map fichierCacheModif = new HashMap<>();
- private static final Map fichierCacheExemp = new HashMap<>();
- private static final Map fichierCacheRecouv = new HashMap<>();
+ private final List fichiers;
- public FichierFactory(List fichiers) {
- this.fichiers = fichiers;
- }
+ private static final Map fichierCacheModif = new HashMap<>();
+ private static final Map fichierCacheExemp = new HashMap<>();
+ private static final Map fichierCacheRecouv = new HashMap<>();
+ private static final Map fichierCacheSupp = new HashMap<>();
- @PostConstruct
- public void initFichierCache() {
- for (Fichier fichier : fichiers) {
- switch (fichier.getDemandeType()) {
- case MODIF:
- fichierCacheModif.put(fichier.getType(), fichier);
- break;
- case EXEMP:
- fichierCacheExemp.put(fichier.getType(), fichier);
- break;
- default:
- fichierCacheRecouv.put(fichier.getType(), fichier);
- }
- }
- }
-
- /**
- * Méthode récuperant le type de fichier à créer en fonction du type
- * @param type etat d'avancement de la demande dans le traitement, trouvable dans la base de donnée sur la table ETAT_DEMANDE
- * @param typeDemande enum qui spécifie si la demande est une demande de modification ou une demande d'exemplarisation
- * @return un fichier qui contient le nom du fichier, le repertoire du fichier, le type de fichier, le type de demande
- * (MODIF, EXEMP) associée au fichier, le nom du fichier généré par une méthode avec un préfixe et suffixe
- * @throws FileTypeException le type de fichier est incorrect, non supporté pour le traitement
- */
- public static Fichier getFichier(Integer type, TYPE_DEMANDE typeDemande) throws FileTypeException{
- switch (typeDemande) {
- case MODIF:
- Fichier fichierModif = fichierCacheModif.get(type);
- if (fichierModif == null)
- throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + type + Constant.ERR_FILE_TYPEDEMANDE + typeDemande.name());
- return fichierModif;
- case EXEMP:
- Fichier fichierExemp = fichierCacheExemp.get(type);
- if (fichierExemp == null)
- throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + type + Constant.ERR_FILE_TYPEDEMANDE + typeDemande.name());
- return fichierExemp;
- case RECOUV:
- Fichier fichierRecouv = fichierCacheRecouv.get(type);
- if (fichierRecouv == null)
- throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + type + Constant.ERR_FILE_TYPEDEMANDE + typeDemande.name());
- return fichierRecouv;
- default:
- throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + "Type demande inconnu");
- }
- }
+ public FichierFactory(List fichiers) {
+ this.fichiers = fichiers;
+ }
+
+ @PostConstruct
+ public void initFichierCache() {
+ for (Fichier fichier : fichiers) {
+ switch (fichier.getDemandeType()) {
+ case MODIF:
+ fichierCacheModif.put(fichier.getType(), fichier);
+ break;
+ case EXEMP:
+ fichierCacheExemp.put(fichier.getType(), fichier);
+ break;
+ case SUPP:
+ fichierCacheSupp.put(fichier.getType(), fichier);
+ break;
+ default:
+ fichierCacheRecouv.put(fichier.getType(), fichier);
+ }
+ }
+ }
+
+ /**
+ * Méthode récuperant le type de fichier à créer en fonction du type
+ *
+ * @param type etat d'avancement de la demande dans le traitement, trouvable dans la base de donnée sur la table ETAT_DEMANDE
+ * @param typeDemande enum qui spécifie si la demande est une demande de modification ou une demande d'exemplarisation
+ * @return un fichier qui contient le nom du fichier, le repertoire du fichier, le type de fichier, le type de demande
+ * (MODIF, EXEMP) associée au fichier, le nom du fichier généré par une méthode avec un préfixe et suffixe
+ * @throws FileTypeException le type de fichier est incorrect, non supporté pour le traitement
+ */
+ public static Fichier getFichier(Integer type, TYPE_DEMANDE typeDemande) throws FileTypeException {
+ switch (typeDemande) {
+ case MODIF:
+ Fichier fichierModif = fichierCacheModif.get(type);
+ if (fichierModif == null)
+ throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + type + Constant.ERR_FILE_TYPEDEMANDE + typeDemande.name());
+ return fichierModif;
+ case EXEMP:
+ Fichier fichierExemp = fichierCacheExemp.get(type);
+ if (fichierExemp == null)
+ throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + type + Constant.ERR_FILE_TYPEDEMANDE + typeDemande.name());
+ return fichierExemp;
+ case SUPP:
+ Fichier fichierSupp = fichierCacheSupp.get(type);
+ if (fichierSupp == null)
+ throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + type + Constant.ERR_FILE_TYPEDEMANDE + typeDemande.name());
+ return fichierSupp;
+ case RECOUV:
+ Fichier fichierRecouv = fichierCacheRecouv.get(type);
+ if (fichierRecouv == null)
+ throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + type + Constant.ERR_FILE_TYPEDEMANDE + typeDemande.name());
+ return fichierRecouv;
+ default:
+ throw new FileTypeException(Constant.ERR_FILE_TYPEFILE + "Type demande inconnu");
+ }
+ }
}
diff --git a/core/src/main/java/fr/abes/item/core/constant/Constant.java b/core/src/main/java/fr/abes/item/core/constant/Constant.java
index a54ba81c..4dcebec5 100644
--- a/core/src/main/java/fr/abes/item/core/constant/Constant.java
+++ b/core/src/main/java/fr/abes/item/core/constant/Constant.java
@@ -37,6 +37,7 @@ public class Constant implements Serializable {
public static final String BLOCKED = "blocked";
public static final String EXEMPLAIRE_CREE = "exemplaire créé";
public static final String EXEMPLAIRE_MODIFIE = "Le traitement a été effectué.";
+ public static final String EXEMPLAIRE_SUPPRIME = "exemplaire supprimé";
public static final String MSG = "message : ";
public static final String FILE_END = "Fin du fichier.";
public static final String TEXTE_991_MODIF = "Exemplaire modifié automatiquement";
@@ -115,6 +116,8 @@ public class Constant implements Serializable {
public static final String ERR_FILE_SEARCH_INDEX_NOT_COMPLIANT = "Impossible de générer la requête, l'index de recherche n'est pas conforme";
public static final String ERR_FILE_SEARCH_INDEX_NOT_RECOGNIZED_FOR_DEMANDE = "Index non reconnu pour ce type de demande";
public static final String ERR_FILE_SEARCH_INDEX_CODE_NOT_COMPLIANT = "Le codeIndex de recherche n'est pas valide";
+ public static final String WARN_NOTICE_EPN_INEXISTANT = "Exemplaire inexistant";
+
/**Specific errors on storage file*/
public static final String ERR_FILE_STORAGE_EMPTY_FILE = "Echec de stockage du fichier car fichier vide : ";
@@ -144,7 +147,8 @@ public class Constant implements Serializable {
/**Specific messages on mails sents and stats*/
public static final String STAT_NBDEMANDESTRAITEES_FILENAME = "demandesTraiteesRCR";
public static final String STAT_NBEXEMPLAIRESTRAITES_FILENAME = "exemplairesTraitesTraitementRCR";
- public static final String DEMANDE_MODIFICATION_START = "Demande de modification d'exemplaire ";
+ public static final String DEMANDE_MODIFICATION_START = "Demande de modification d'exemplaires ";
+ public static final String DEMANDE_SUPPRESSION_START = "Demande de suppression d'exemplaires ";
public static final String DEMANDE_EXEMPLARISATION_START = "Votre exemplarisation - ";
public static final String DEMANDE_EXEMPLARISATION_END = "Résultat de votre exemplarisation - ";
public static final String DEMANDE_RECOUVREMENT_START = "Votre taux de recouvrement - N°";
@@ -187,6 +191,7 @@ public class Constant implements Serializable {
public static final String JOB_TRAITER_LIGNE_FICHIER_START_MODIF = "debut du job jobTraiterLigneFichier pour demandes de modification...";
public static final String JOB_TRAITER_LIGNE_FICHIER_START_EXEMP = "debut du job jobTraiterLigneFichier pour demandes d'exemplarisation...";
public static final String JOB_TRAITER_LIGNE_FICHIER_START_RECOU = "debut du job jobTraiterLigneFichier pour demandes de recouvrement...";
+ public static final String JOB_TRAITER_LIGNE_FICHIER_START_SUPP = "debut du job jobTraiterLigneFichier pour demandes de suppression...";
public static final String JOB_EXPORT_STATISTIQUES_START = "debut du job jobExportStatistiques...";
public static final String SPRING_BATCH_TOTAL_TIME_EXECUTION_MILLISECONDS = "temps total execution (ms) = ";
public static final String SPRING_BATCH_TOTAL_TIME_EXECUTION_MINUTES = "temps total execution (minutes) = ";
@@ -205,6 +210,7 @@ public class Constant implements Serializable {
public static final String ERROR_PASSERENCOURS_FROM_GETNEXTDEMANDEMODIFTASKLET = "erreur lors du passerEnCours de GetNextDemandeModifTasklets = ";
public static final String ERROR_PASSERENCOURS_FROM_GETNEXTDEMANDERECOUVTASKLET = "erreur lors du passerEnCours de GetNextDemandeRecouvTasklets = ";
public static final String ENTER_EXECUTE_FROM_GETNEXTDEMANDERECOUVTASKLET = "entrée dans execute de GetNextDemandeRecouvTasklets...";
+ public static final String ENTER_EXECUTE_FROM_GETNEXTDEMANDESUPPTASKLET = "entrée dans execute de GetNextDemandeSuppTasklets...";
public static final String ENTER_EXECUTE_FROM_GETNEXTDEMANDEMODIFTASKLET = "entrée dans execute de GetNextDemandeModifTasklets...";
public static final String ENTER_EXECUTE_FROM_GETNEXTDEMANDEEXEMPTASKLET = "entrée dans execute de GetNextDemandeExempTasklets...";
public static final String ENTER_EXECUTE_FROM_GETNEXTDEMANDEEXEMPTOARCHIVETASKLET = "entrée dans execute de ChangeInArchivedStatusAllDemandesExempFinishedForMoreThanThreeMonthsTasklet...";
@@ -212,7 +218,7 @@ public class Constant implements Serializable {
public static final String ENTER_EXECUTE_FROM_LIRELIGNEFICHIERTASKLET = "entrée dans execute de LireLigneFichierTasklet...";
public static final String ERROR_FROM_SUDOC_REQUEST_OR_METHOD_SAVEXEMPLAIRE = "erreur lors de la requête au Sudoc ou du saveExemplaire";
public static final String ERROR_FROM_RECUP_NOTICETRAITEE = "erreur lors de la recup de la noticetraitee : ";
- public static final String ERROR_TREATMENT_LIGNE_FICHIER_WHEN_UPDATE_DEMANDE_STATE = "erreur dans traitement ligne fichier lors de la maj de l'état de la demande : ";
+ public static final String ERROR_TREATMENT_LIGNE_FICHIER_WHEN_UPDATE_DEMANDE_STATE = "erreur lors du passage de la demande en etat TERMINEE : ";
public static final String ERROR_CAUGHT = "error caught: ";
public static final String ERROR_MAJ_LIGNE_FICHIER_WRITE = "erreur lors de majLigneFichier dans write : ";
public static final String LIGNE_TRAITEE = "ligne traitee pour ";
diff --git a/core/src/main/java/fr/abes/item/core/constant/TYPE_DEMANDE.java b/core/src/main/java/fr/abes/item/core/constant/TYPE_DEMANDE.java
index 92a7fdd7..cb5f180a 100644
--- a/core/src/main/java/fr/abes/item/core/constant/TYPE_DEMANDE.java
+++ b/core/src/main/java/fr/abes/item/core/constant/TYPE_DEMANDE.java
@@ -1,5 +1,5 @@
package fr.abes.item.core.constant;
public enum TYPE_DEMANDE {
- EXEMP, MODIF, RECOUV
+ EXEMP, MODIF, RECOUV, SUPP
}
diff --git a/core/src/main/java/fr/abes/item/core/constant/TYPE_SUPPRESSION.java b/core/src/main/java/fr/abes/item/core/constant/TYPE_SUPPRESSION.java
new file mode 100644
index 00000000..8a8817d8
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/constant/TYPE_SUPPRESSION.java
@@ -0,0 +1,5 @@
+package fr.abes.item.core.constant;
+
+public enum TYPE_SUPPRESSION {
+ EPN,PPN
+}
diff --git a/core/src/main/java/fr/abes/item/core/entities/item/DemandeSupp.java b/core/src/main/java/fr/abes/item/core/entities/item/DemandeSupp.java
new file mode 100644
index 00000000..acc8a18f
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/entities/item/DemandeSupp.java
@@ -0,0 +1,41 @@
+package fr.abes.item.core.entities.item;
+
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.constant.TYPE_SUPPRESSION;
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Entity
+@Table(name = "DEMANDE_SUPP")
+@NoArgsConstructor
+@Getter
+@Setter
+public class DemandeSupp extends Demande {
+ @Column(name = "TYPE_SUPPRESSION")
+ @Enumerated(EnumType.STRING)
+ private TYPE_SUPPRESSION typeSuppression;
+
+ public DemandeSupp(Integer refDemande) {
+ super(refDemande);
+ }
+
+ @Override
+ public TYPE_DEMANDE getTypeDemande() {
+ return TYPE_DEMANDE.SUPP;
+ }
+
+ public DemandeSupp(String rcr, Date dateCreation, Date dateModification, TYPE_SUPPRESSION typeSuppression,
+ String comment, EtatDemande etatDemande, Utilisateur utilisateur) {
+ super(rcr, dateCreation, dateModification, etatDemande, comment, utilisateur);
+ this.typeSuppression = typeSuppression;
+ }
+
+ public DemandeSupp(Integer id, String rcr, Date dateCreation, Date dateModification,
+ String comment, EtatDemande etatDemande, Utilisateur utilisateur) {
+ super(id, rcr, dateCreation, dateModification, etatDemande, comment, utilisateur);
+ }
+}
diff --git a/core/src/main/java/fr/abes/item/core/entities/item/LigneFichierModif.java b/core/src/main/java/fr/abes/item/core/entities/item/LigneFichierModif.java
index b28f2a3e..c1e3ca6b 100644
--- a/core/src/main/java/fr/abes/item/core/entities/item/LigneFichierModif.java
+++ b/core/src/main/java/fr/abes/item/core/entities/item/LigneFichierModif.java
@@ -23,7 +23,6 @@ public class LigneFichierModif extends LigneFichier implements Serializable, ILi
@JoinColumn(name = "REF_DEMANDE") @NotNull
private DemandeModif demandeModif;
- @SuppressWarnings("squid:S00107")
public LigneFichierModif(String ppn,
String rcr, String epn, String valeurZone, Integer position,
Integer traitee, String retourSudoc, DemandeModif demandeModif) {
diff --git a/core/src/main/java/fr/abes/item/core/entities/item/LigneFichierSupp.java b/core/src/main/java/fr/abes/item/core/entities/item/LigneFichierSupp.java
new file mode 100644
index 00000000..7f9f6385
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/entities/item/LigneFichierSupp.java
@@ -0,0 +1,42 @@
+package fr.abes.item.core.entities.item;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Entity
+@NoArgsConstructor
+@Table(name= "LIGNE_FICHIER_SUPP")
+@Getter @Setter
+public class LigneFichierSupp extends LigneFichier implements Serializable, ILigneFichier {
+ @Column(name="PPN")
+ private String ppn;
+ @Column(name="RCR")
+ private String rcr;
+ @Column(name="EPN")
+ private String epn;
+ @ManyToOne
+ @JoinColumn(name = "REF_DEMANDE") @NotNull
+ private DemandeSupp demandeSupp;
+
+ public LigneFichierSupp(String ppn,
+ String rcr, String epn, String valeurZone, Integer position,
+ Integer traitee, String retourSudoc, DemandeSupp demandeSupp) {
+ super(valeurZone, traitee, position, retourSudoc);
+ this.ppn = ppn;
+ this.rcr = rcr;
+ this.epn = epn;
+ this.demandeSupp = demandeSupp;
+ }
+
+ @Override
+ public void setEntityAfterBatch(LigneFichier ligneFichier) {
+ LigneFichierSupp ligneFichierSupp = (LigneFichierSupp) ligneFichier;
+ this.setRetourSudoc(ligneFichierSupp.getRetourSudoc());
+ this.setTraitee(1);
+ }
+}
diff --git a/core/src/main/java/fr/abes/item/core/repository/item/IDemandeSuppDao.java b/core/src/main/java/fr/abes/item/core/repository/item/IDemandeSuppDao.java
new file mode 100644
index 00000000..5f3e24b7
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/repository/item/IDemandeSuppDao.java
@@ -0,0 +1,29 @@
+package fr.abes.item.core.repository.item;
+
+import fr.abes.item.core.configuration.ItemConfiguration;
+import fr.abes.item.core.entities.item.DemandeModif;
+import fr.abes.item.core.entities.item.DemandeSupp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+@ItemConfiguration
+public interface IDemandeSuppDao extends JpaRepository {
+ @Query("select d from DemandeSupp d where d.etatDemande.numEtat not in (9, 10)")
+ List getAllActiveDemandesSuppForAdminExtended();
+ @Query("select d from DemandeSupp d where d.iln = :iln and d.etatDemande.numEtat not in (9, 10)")
+ List getAllActiveDemandesSuppForAdmin(@Param("iln") String iln);
+ @Query("select d from DemandeSupp d where d.iln = :iln and d.etatDemande.numEtat = 9")
+ List getAllArchivedDemandesSupp(@Param("iln") String iln);
+ @Query("select d from DemandeSupp d where d.iln = :iln and d.etatDemande.numEtat not in (9, 2, 10)")
+
+ List getActiveDemandesSuppForUserExceptedPreparedStatus(@Param("iln") String iln);
+ @Query("select d from DemandeSupp d where d.etatDemande.numEtat = 9")
+ List getAllArchivedDemandesSuppExtended();
+
+ List findDemandeSuppsByEtatDemande_IdOrderByDateModificationAsc(Integer id);
+}
diff --git a/core/src/main/java/fr/abes/item/core/repository/item/ILigneFichierSuppDao.java b/core/src/main/java/fr/abes/item/core/repository/item/ILigneFichierSuppDao.java
new file mode 100644
index 00000000..761e59ae
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/repository/item/ILigneFichierSuppDao.java
@@ -0,0 +1,89 @@
+package fr.abes.item.core.repository.item;
+
+import fr.abes.item.core.configuration.ItemConfiguration;
+import fr.abes.item.core.entities.item.DemandeSupp;
+import fr.abes.item.core.entities.item.LigneFichierSupp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+/**
+ * Dao permettant de travailler sur les lignes du fichier que l'utilisateur à charger pour précéder à une
+ * demande de suppression d'une sous-zone d'une zone se rattachant à un ou plusieurs exemplaires existants
+ */
+@Repository
+@ItemConfiguration
+public interface ILigneFichierSuppDao extends JpaRepository {
+
+ /**
+ * @param numDemande le numéro de la demande qui va aller filtrer les retours sur l'attribut REF_DEMANDE
+ * @return l'ensemble des lignes du fichier chargé par l'utilisateur rattaché à une demande de suppression
+ */
+ @Query("select lf from LigneFichierSupp lf where lf.demandeSupp.numDemande = :numDemande order by lf.position")
+ List getLigneFichierbyDemande(@Param("numDemande") Integer numDemande);
+
+ /**
+ * @param numDemande le numéro de la demande qui va aller filtrer les retours sur l'attribut REF_DEMANDE
+ * @param position le numéro de la ligne (qui représente un exemplaire) du fichier chargé par l'utilisateur
+ * 0 étant le premier exemplaire
+ * @return Une ligne complète du fichier chargé, qui correspond à un exemplaire
+ */
+ @Query("select lf from LigneFichierSupp lf where lf.demandeSupp.numDemande = :numDemande and lf.position = :position")
+ LigneFichierSupp getLigneFichierbyDemandeEtPos(@Param("numDemande") Integer numDemande, @Param("position") Integer position);
+
+ /**
+ * @param numDemande le numéro de la demande qui va aller filtrer les retours sur l'attribut REF_DEMANDE
+ * @return Une liste contenant toutes les lignes d'exemplaires correspondant à une demande
+ * qui ont été traités (= absence d'echec sur le traitement de ces lignes)
+ */
+ @Query("select lf from LigneFichierSupp lf where lf.demandeSupp.numDemande = :numDemande and lf.traitee = 1 order by lf.position")
+ List getLigneFichierTraitee(@Param("numDemande") Integer numDemande);
+
+ /**
+ * @param numDemande le numéro de la demande qui va aller filtrer les retours sur l'attribut REF_DEMANDE
+ * @return Une liste contenant toutes les lignes d'exemplaires correspondant à une demande
+ * qui n'ont pas été traités (= absence d'echec sur le traitement de ces lignes)
+ */
+ @Query("select count(lf) from LigneFichierSupp lf where lf.demandeSupp.numDemande = :numDemande and lf.traitee=0")
+ int getNbLigneFichierNonTraitee(@Param("numDemande") Integer numDemande);
+
+ /**
+ * @param demande le numéro de la demande dont les lignes fichiers vont être supprimées
+ */
+ void deleteByDemandeSupp(DemandeSupp demande);
+
+ /**
+ * @param numDemande le numéro de la demande
+ * @return Le nombre de ligne du fichier qui ont été traitées sur cette demande
+ */
+ @Query("select count(lf) from LigneFichierSupp lf where lf.demandeSupp.numDemande = :numDemande and lf.traitee=1")
+ int getNbLigneFichierTraitee(@Param("numDemande") Integer numDemande);
+
+ /**
+ * @param numDemande le numéro de la demande
+ * @return Le nombre de ligne du fichier qui ont été traitées sur cette demande et dont le retour du sudoc à été
+ * positif pour le traitement
+ */
+ @Query("select count(lf) from LigneFichierSupp lf where lf.demandeSupp.numDemande = :numDemande and lf.traitee=1 and lf.retourSudoc = 'Le traitement a été effectué.'")
+ int getNbLigneFichierSuccessByDemande(@Param("numDemande") Integer numDemande);
+
+ /**
+ * @param numDemande le numéro de la demande
+ * @return Le nombre de ligne du fichier qui ont été traitées sur cette demande et dont le retour du sudoc n'a pas
+ * été positif pour le traitement
+ */
+ @Query("select count(lf) from LigneFichierSupp lf where lf.demandeSupp.numDemande = :numDemande and lf.traitee=1 and lf.retourSudoc != 'Le traitement a été effectué.'")
+ int getNbLigneFichierErrorByDemande(@Param("numDemande") Integer numDemande);
+
+ /**
+ * @param numDemande le numéro de la demande de suppression
+ * @return Le nombre de lignes total du fichier
+ */
+ @Query("select count(lf) from LigneFichierSupp lf where lf.demandeSupp.numDemande = :numDemande")
+ int getNbLigneFichierTotal(@Param("numDemande") Integer numDemande);
+
+}
diff --git a/core/src/main/java/fr/abes/item/core/service/TraitementService.java b/core/src/main/java/fr/abes/item/core/service/TraitementService.java
index 737fe5a8..da5e5a21 100644
--- a/core/src/main/java/fr/abes/item/core/service/TraitementService.java
+++ b/core/src/main/java/fr/abes/item/core/service/TraitementService.java
@@ -13,6 +13,7 @@
import fr.abes.item.core.utilitaire.Utilitaires;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.Level;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -187,6 +188,18 @@ public String saveExemplaire(String noticeModifiee, String epn) throws CBSExcept
return cbs.modifierExemp(noticeModifiee, numEx);
}
+ public String deleteExemplaire(String epn) throws IOException, CBSException {
+ log.debug(epn + " suppression exemplaire");
+ cbs.search("che epn " + epn);
+ if(cbs.getNbNotices() == 1){
+ String notice = cbs.getClientCBS().mod("1",String.valueOf(cbs.getLotEncours()));
+ String numExemplaire = "E" + Utilitaires.getNumExFromExemp(Utilitaires.getExempFromNotice(notice, epn));
+ return cbs.supExemplaire(numExemplaire);
+ } else {
+ log.warn(epn + " " + Constant.WARN_NOTICE_EPN_INEXISTANT);
+ throw new CBSException(Level.WARN,Constant.WARN_NOTICE_EPN_INEXISTANT);
+ }
+ }
/**
* Deconnexion du client CBS (sudoc)
diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java
index 727339af..9c6d63ba 100644
--- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java
+++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java
@@ -259,7 +259,7 @@ public void initFiles(Demande demande) throws FileTypeException {
*/
@Override
public Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException {
- if ((demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande)) || (etatDemande == Constant.ETATDEM_ERREUR)) {
+ if ((etatDemande == Constant.ETATDEM_ERREUR) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) {
EtatDemande etat = referenceService.findEtatDemandeById(etatDemande);
demande.setEtatDemande(etat);
journalService.addEntreeJournal((DemandeExemp) demande, etat);
diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java
index 14c72e1f..6801005e 100644
--- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java
+++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java
@@ -221,8 +221,8 @@ private void stockerFichierOnDisk(MultipartFile file, Fichier fichier, DemandeMo
fichier.checkFileContent(demandeModif); //Controle de l'adequation des entêtes
//Cas d'un fichier initial pouvant contenir des lignes vides à supprimer
if (fichier.getType() == Constant.ETATDEM_PREPARATION) {
- FichierInitial fichierInitial = (FichierInitial) fichier;
- fichierInitial.supprimerRetourChariot();
+ FichierInitial fichierInitialModif = (FichierInitial) fichier;
+ fichierInitialModif.supprimerRetourChariot();
}
checkEtatDemande(demandeModif);
} catch (FileCheckingException e) {
@@ -267,7 +267,7 @@ private void appelProcStockee(String rcr) throws IOException {
List listppn = fichierInit.cutFile();
for (String listeppn : listppn) {
String resultProcStockee = procStockee.callFunction(listeppn, rcr);
- fichierPrepare.alimenter(resultProcStockee, listeppn, rcr);
+ fichierPrepare.alimenterEpn(resultProcStockee, listeppn, rcr);
}
}
@@ -418,7 +418,7 @@ public String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier lign
*/
@Override
public Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException {
- if ((demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande)) || (etatDemande == Constant.ETATDEM_ERREUR)) {
+ if ((etatDemande == Constant.ETATDEM_ERREUR) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) {
EtatDemande etat = referenceService.findEtatDemandeById(etatDemande);
demande.setEtatDemande(etat);
journalService.addEntreeJournal((DemandeModif) demande, etat);
@@ -472,7 +472,7 @@ public Demande returnState(Integer etape, Demande demande) throws DemandeCheckin
demandeModif.setTraitement(null); //On repasse DEM_TRAIT_ID à null : obtenu ETAPE 3
demandeModif.setZone(null); //On repasse ZONE à null : obtenu ETAPE 5
demandeModif.setSousZone(null); //On repasse SOUS_ZONE à null : obtenu ETAPE 5
- demandeModif.setEtatDemande(new EtatDemande(1)); //On repasse DEM_ETAT_ID à 1
+ demandeModif.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPARATION)); //On repasse DEM_ETAT_ID à 1
//le commentaire n'est pas effacé, il est géré dans le tableau de bord : pas dans les ETAPES
/*Suppression des lignes de la table LIGNE_FICHIER_MODIF crées à ETAPE 5*/
ligneFichierService.deleteByDemande(demandeModif);
@@ -481,7 +481,7 @@ public Demande returnState(Integer etape, Demande demande) throws DemandeCheckin
//Suppression du fichier sur disque non nécessaire, sera écrasé au prochain upload
return demandeModif;
case 3:
- demandeModif.setEtatDemande(new EtatDemande(3));
+ demandeModif.setEtatDemande(new EtatDemande(Constant.ETATDEM_ACOMPLETER));
demandeModif.setTraitement(null);
demandeModif.setZone(null);
demandeModif.setSousZone(null);
@@ -489,7 +489,7 @@ public Demande returnState(Integer etape, Demande demande) throws DemandeCheckin
save(demandeModif);
return demandeModif;
case 4:
- demandeModif.setEtatDemande(new EtatDemande(3));
+ demandeModif.setEtatDemande(new EtatDemande(Constant.ETATDEM_ACOMPLETER));
//On ne modifie pas le traitement obtenu a etape 3
demandeModif.setZone(null);
demandeModif.setSousZone(null);
@@ -513,7 +513,7 @@ public String getInfoHeaderFichierResultat(Demande demande, LocalDateTime dateDe
DemandeModif demandeModif = (DemandeModif) demande;
String zone = demandeModif.getZone();
if (demandeModif.getSousZone() != null) zone += demandeModif.getSousZone();
- return "PPN;RCR;EPN;" + zone + ";RESULTAT;Demande lancée le" + dateDebut;
+ return "PPN;RCR;EPN;" + zone + ";RESULTAT;Demande lancée le " + dateDebut;
}
diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java
index c8414eb4..55968ccc 100644
--- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java
+++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java
@@ -191,7 +191,7 @@ public String getInfoHeaderFichierResultat(Demande demande, LocalDateTime dateDe
@Override
public Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException {
- if (demande.getEtatDemande().getId() == getPreviousState(etatDemande) || (etatDemande == Constant.ETATDEM_ERREUR)) {
+ if ((etatDemande == Constant.ETATDEM_ERREUR) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) {
EtatDemande etat = referenceService.findEtatDemandeById(etatDemande);
demande.setEtatDemande(etat);
return this.save(demande);
diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java
new file mode 100644
index 00000000..db086519
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java
@@ -0,0 +1,393 @@
+package fr.abes.item.core.service.impl;
+
+import fr.abes.cbs.exception.CBSException;
+import fr.abes.cbs.exception.ZoneException;
+import fr.abes.item.core.components.*;
+import fr.abes.item.core.configuration.factory.FichierFactory;
+import fr.abes.item.core.configuration.factory.Strategy;
+import fr.abes.item.core.constant.Constant;
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.constant.TYPE_SUPPRESSION;
+import fr.abes.item.core.entities.item.*;
+import fr.abes.item.core.exception.DemandeCheckingException;
+import fr.abes.item.core.exception.FileCheckingException;
+import fr.abes.item.core.exception.FileTypeException;
+import fr.abes.item.core.exception.QueryToSudocException;
+import fr.abes.item.core.repository.baseXml.ILibProfileDao;
+import fr.abes.item.core.repository.item.IDemandeSuppDao;
+import fr.abes.item.core.repository.item.ILigneFichierSuppDao;
+import fr.abes.item.core.service.*;
+import fr.abes.item.core.utilitaire.Utilitaires;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.time.LocalDateTime;
+import java.util.*;
+
+@Slf4j
+@Service
+@Strategy(type = IDemandeService.class, typeDemande = {TYPE_DEMANDE.SUPP})
+public class DemandeSuppService extends DemandeService implements IDemandeService {
+ private static final Integer nbIdMaxPerRequest = 300;
+
+ private final IDemandeSuppDao demandeSuppDao;
+
+ private final ILigneFichierService ligneFichierService;
+
+ private final ReferenceService referenceService;
+ private final UtilisateurService utilisateurService;
+ private final FileSystemStorageService storageService;
+
+ private FichierInitialSupp fichierInit;
+ private FichierPrepareSupp fichierPrepare;
+ private final Ppntoepn procStockeePpnToEpn;
+ private final Epntoppn procStockeeEpnToPpn;
+
+ @Value("${files.upload.path}")
+ private String uploadPath;
+
+ public DemandeSuppService(ILibProfileDao libProfileDao, IDemandeSuppDao demandeSuppDao, FileSystemStorageService storageService, ReferenceService referenceService, UtilisateurService utilisateurService, Ppntoepn procStockeePpnToEpn, Epntoppn procStockeeEpnToPpn, LigneFichierSuppService ligneFichierSuppService) {
+ super(libProfileDao);
+ this.demandeSuppDao = demandeSuppDao;
+ this.storageService = storageService;
+ this.referenceService = referenceService;
+ this.utilisateurService = utilisateurService;
+ this.procStockeePpnToEpn = procStockeePpnToEpn;
+ this.procStockeeEpnToPpn = procStockeeEpnToPpn;
+ this.ligneFichierService = ligneFichierSuppService;
+ }
+
+ @Override
+ public Demande save(Demande entity) {
+ DemandeSupp demande = (DemandeSupp) entity;
+ entity.setDateModification(Calendar.getInstance().getTime());
+ DemandeSupp demandeOut = demandeSuppDao.save(demande);
+ demandeOut.setShortname(entity.getShortname());
+ return demandeOut;
+ }
+
+ @Override
+ public DemandeSupp findById(Integer id) {
+ Optional demandeSupp = demandeSuppDao.findById(id);
+ demandeSupp.ifPresent(this::setIlnShortNameOnDemande);
+ return demandeSupp.orElse(null);
+ }
+
+ @Override
+ public Demande creerDemande(String rcr, Integer userNum) {
+ Calendar calendar = Calendar.getInstance();
+ DemandeSupp demandeSupp = new DemandeSupp(rcr, calendar.getTime(), calendar.getTime(), null, null, referenceService.findEtatDemandeById(Constant.ETATDEM_PREPARATION), utilisateurService.findById(userNum));
+ demandeSupp.setIln(Objects.requireNonNull(libProfileDao.findById(rcr).orElse(null)).getIln());
+ setIlnShortNameOnDemande(demandeSupp);
+ DemandeSupp demToReturn = (DemandeSupp) save(demandeSupp);
+ return demToReturn;
+ }
+
+ @Override
+ public Demande archiverDemande(Demande demande) throws DemandeCheckingException {
+ //todo
+ return null;
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ //todo
+ }
+
+ @Override
+ public void initFiles(Demande demande) throws FileTypeException {
+ Integer numDemande = demande.getId();
+ /*Préparation du fichier initial rattaché à la demande de suppression */
+ fichierInit = (FichierInitialSupp) FichierFactory.getFichier(Constant.ETATDEM_PREPARATION, TYPE_DEMANDE.SUPP);
+ fichierInit.generateFileName(numDemande);
+ fichierInit.setPath(Paths.get(uploadPath + "supp/" + numDemande));
+
+ /*Préparation du fichier enrichi suite l'appel à la fonction oracle */
+ fichierPrepare = (FichierPrepareSupp) FichierFactory.getFichier(Constant.ETATDEM_PREPAREE, TYPE_DEMANDE.SUPP);
+ fichierPrepare.generateFileName(numDemande);
+ fichierPrepare.setPath(Paths.get(uploadPath + "supp/" + numDemande));
+
+ /*Préparation du fichier enrichi par l'utilisateur */
+ FichierEnrichiSupp fichierEnrichiSupp = (FichierEnrichiSupp) FichierFactory.getFichier(Constant.ETATDEM_ACOMPLETER, TYPE_DEMANDE.SUPP);
+ fichierEnrichiSupp.generateFileName(numDemande);
+ fichierEnrichiSupp.setPath(Paths.get(uploadPath + "supp/" + numDemande));
+
+ }
+
+ @Override
+ public void stockerFichier(MultipartFile file, Demande demande) throws IOException, FileTypeException, FileCheckingException, DemandeCheckingException {
+ Integer numDemande = demande.getNumDemande();
+ try {
+ Utilitaires.checkExtension(Objects.requireNonNull(file.getOriginalFilename()));
+ Fichier fichier = FichierFactory.getFichier(demande.getEtatDemande().getNumEtat(), TYPE_DEMANDE.SUPP);
+ fichier.generateFileName(numDemande);
+ stockerFichierOnDisk(file, fichier, (DemandeSupp) demande);
+ } catch (NullPointerException e) {
+ throw new NullPointerException(Constant.ERR_FILE_NOT_FOUND);
+ }
+ }
+
+ private void stockerFichierOnDisk(MultipartFile file, Fichier fichier, DemandeSupp demande) throws IOException, FileCheckingException, DemandeCheckingException, FileTypeException {
+ Integer numDemande = demande.getNumDemande();
+ try {
+ storageService.changePath(Paths.get(uploadPath + "supp/" + numDemande));
+ storageService.init();
+ storageService.store(file, fichier.getFilename());
+ fichier.setPath(Paths.get(uploadPath + "supp/" + numDemande));
+ fichier.checkFileContent(demande);
+ //suppression des lignes vides d'un fichier initial de ppn / epn
+ if (fichier.getType() == Constant.ETATDEM_PREPARATION) {
+ FichierInitialSupp fichierInitialSupp = (FichierInitialSupp) fichier;
+ fichierInitialSupp.supprimerRetourChariot();
+ }
+ checkEtatDemande(demande);
+ } catch (FileCheckingException e) {
+ storageService.delete(fichier.getFilename());
+ throw e;
+ } catch (IOException e) {
+ throw new IOException(Constant.ERR_FILE_STORAGE_FILE_UNREADABLE);
+ }
+ }
+
+ private void checkEtatDemande(DemandeSupp demande) throws DemandeCheckingException, IOException, FileTypeException {
+ int etat = demande.getEtatDemande().getNumEtat();
+ switch (etat) {
+ case Constant.ETATDEM_PREPARATION -> preparerFichierEnPrep(demande);
+ case Constant.ETATDEM_PREPAREE -> changeState(demande, Constant.ETATDEM_ACOMPLETER);
+ case Constant.ETATDEM_ACOMPLETER -> {
+ //Etat après procédure Oracle, traitement du fichier enrichi
+ //appel méthode d'alimentation de la base avec les lignes du fichier
+ FichierEnrichiSupp fichier = (FichierEnrichiSupp) FichierFactory.getFichier(demande.getEtatDemande().getNumEtat(), TYPE_DEMANDE.SUPP);
+
+ ligneFichierService.saveFile(storageService.loadAsResource(fichier.getFilename()).getFile(), demande);
+
+ changeState(demande, Constant.ETATDEM_ATTENTE);
+ }
+ }
+ }
+
+ private void preparerFichierEnPrep(DemandeSupp demande) throws IOException, DemandeCheckingException, FileTypeException {
+ if (demande.getTypeSuppression() != null) {
+ //Suppression d'un éventuel fichier existant sur le disque
+ storageService.delete(fichierPrepare.getFilename());
+ //Ecriture ligne d'en-tête dans FichierApresWS
+ fichierPrepare.ecrireEnTete();
+ //Alimentation du fichier par appel à la procédure Oracle ppntoepn
+ appelProcStockee(demande.getRcr(), demande.getTypeSuppression());
+ demande.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPAREE));
+ save(demande);
+ checkEtatDemande(demande);
+ }
+ }
+
+ /**
+ * Méthode de découpage du fichier initial, d'appel de la fonction Oracle et
+ * d'alimentation du FichierApresWS
+ *
+ * @param rcr : rcr de la demandeSupp
+ * @throws IOException fichier illisible
+ */
+ private void appelProcStockee(String rcr, TYPE_SUPPRESSION type) throws IOException {
+ if (type.equals(TYPE_SUPPRESSION.PPN)) {
+ List listppn = fichierInit.cutFile();
+ for (String listePpn : listppn) {
+ String resultProcStockee = procStockeePpnToEpn.callFunction(listePpn, rcr);
+ fichierPrepare.alimenterEpn(resultProcStockee, listePpn, rcr);
+ }
+ } else {
+ List listEpn = fichierInit.cutFile();
+ for (String listeepn : listEpn) {
+ String resultProcStockee = procStockeeEpnToPpn.callFunction(listeepn, rcr);
+ fichierPrepare.alimenterPpn(resultProcStockee, listeepn, rcr);
+ }
+ }
+ }
+
+ @Override
+ public Demande previousState(Demande demande) throws DemandeCheckingException, IOException {
+ //todo
+ return null;
+ }
+
+ @Override
+ public Demande closeDemande(Demande demande) throws DemandeCheckingException {
+ if (ligneFichierService.getNbLigneFichierNonTraitee(demande) != 0) {
+ throw new DemandeCheckingException(Constant.LINES_TO_BE_PROCESSED_REMAIN);
+ }
+ return changeState(demande, Constant.ETATDEM_TERMINEE);
+ }
+
+
+ /**
+ * Méthode permettant de chercher les demandesSupp d'un utilisateur
+ *
+ * @param iln numéro de l'utilisateur propriétaire des demandesSupp
+ * @return liste des demandesSupp de l'utilisateur (hors demandesSupp archivées)
+ */
+ @Override
+ public List getActiveDemandesForUser(String iln) {
+ List demandesSupp = this.demandeSuppDao.getActiveDemandesSuppForUserExceptedPreparedStatus(iln);
+ List listeDemande = new ArrayList<>(demandesSupp);
+ setIlnShortNameOnList(listeDemande);
+ return listeDemande;
+ }
+
+ @Override
+ public Demande getIdNextDemandeToProceed(int minHour, int maxHour) {
+ List demandesSupp = this.demandeSuppDao.findDemandeSuppsByEtatDemande_IdOrderByDateModificationAsc(Constant.ETATDEM_ATTENTE);
+ return demandesSupp.isEmpty() ? null : demandesSupp.get(0);
+ }
+
+ @Override
+ public String getInfoHeaderFichierResultat(Demande demande, LocalDateTime dateDebut) {
+ return "PPN;RCR;EPN;RESULTAT;Demande lancée le " + dateDebut;
+ }
+
+ @Override
+ public Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException {
+ if ((etatDemande == Constant.ETATDEM_ERREUR) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) {
+ EtatDemande etat = referenceService.findEtatDemandeById(etatDemande);
+ demande.setEtatDemande(etat);
+ return save(demande);
+ } else {
+ throw new DemandeCheckingException(Constant.DEMANDE_IS_NOT_IN_STATE + getPreviousState(etatDemande));
+ }
+ }
+
+ /**
+ * Retourne l'état précédent d'une demande dans le déroulement normal du processus
+ *
+ * @param etatDemande : etat dont on souhaite connaitre l'état précédent
+ * @return : l'état précédent dans le processus
+ */
+ private int getPreviousState(int etatDemande) {
+ return switch (etatDemande) {
+ case Constant.ETATDEM_PREPAREE -> Constant.ETATDEM_PREPARATION;
+ case Constant.ETATDEM_ACOMPLETER -> Constant.ETATDEM_PREPAREE;
+ case Constant.ETATDEM_ATTENTE -> Constant.ETATDEM_ACOMPLETER;
+ case Constant.ETATDEM_ENCOURS -> Constant.ETATDEM_ATTENTE;
+ case Constant.ETATDEM_TERMINEE -> Constant.ETATDEM_ENCOURS;
+ case Constant.ETATDEM_ERREUR -> Constant.ETATDEM_ERREUR;
+ case Constant.ETATDEM_ARCHIVEE -> Constant.ETATDEM_TERMINEE;
+ case Constant.ETATDEM_SUPPRIMEE -> Constant.ETATDEM_ARCHIVEE;
+ default -> 0;
+ };
+ }
+
+ @Override
+ public Demande changeStateCanceled(Demande demande, int etatDemande) {
+ //todo
+ return null;
+ }
+
+ @Override
+ public List getAllArchivedDemandes(String iln) {
+ List demandesSupp = this.demandeSuppDao.getAllArchivedDemandesSupp(iln);
+ List listeDemandes = new ArrayList<>(demandesSupp);
+ setIlnShortNameOnList(listeDemandes);
+ return listeDemandes;
+ }
+
+ @Override
+ public List getAllArchivedDemandesAllIln() {
+ List demandesSupp = this.demandeSuppDao.getAllArchivedDemandesSuppExtended();
+ List listeDemandes = new ArrayList<>(demandesSupp);
+ setIlnShortNameOnList(listeDemandes);
+ return listeDemandes;
+ }
+
+ @Override
+ public List getAllActiveDemandesForAdminExtended() {
+ List demandeSupps = demandeSuppDao.getAllActiveDemandesSuppForAdminExtended();
+ List demandesList = new ArrayList<>(demandeSupps);
+ setIlnShortNameOnList(demandesList);
+ return demandesList;
+ }
+
+ /**
+ * Lance une requête pour récupérer l'ensemble des demandesSupp
+ * Lance une requête pour récupérer :
+ * Les demandesSupp Terminées / En Erreur de tout le monde
+ * ET toutes les demandesSupp créées par cet admin
+ *
+ * @return la liste de toutes les demandesSupp
+ */
+ @Override
+ public List getAllActiveDemandesForAdmin(String iln) {
+ List demandesSupp = demandeSuppDao.getAllActiveDemandesSuppForAdmin(iln);
+ List demandeList = new ArrayList<>(demandesSupp);
+ setIlnShortNameOnList(demandeList);
+ return demandeList;
+ }
+
+ @Override
+ public Demande returnState(Integer etape, Demande demande) throws DemandeCheckingException {
+ DemandeSupp demandeSupp = (DemandeSupp) demande;
+ switch (etape) {
+ //étape sélection du type de fichier de suppression
+ case 1 -> {
+ demandeSupp.setTypeSuppression(null);
+ return save(demandeSupp);
+ }
+ //étape upload du fichier
+ case 2 -> {
+ demandeSupp.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPARATION)); //On repasse DEM_ETAT_ID à 1
+ //le commentaire n'est pas effacé, il est géré dans le tableau de bord : pas dans les ETAPES
+ //Suppression des lignes de la table LIGNE_FICHIER_SUPP crées à ETAPE 5
+ return save(demandeSupp);
+ //Suppression du fichier sur disque non nécessaire, sera écrasé au prochain upload
+ }
+ //etape upload du fichier initial
+ case 3 -> {
+ demandeSupp.setEtatDemande(new EtatDemande(Constant.ETATDEM_ACOMPLETER));
+ return save(demandeSupp);
+ //Suppression du fichier sur disque non nécessaire, sera écrasé au prochain upload
+ }
+ default -> throw new DemandeCheckingException(Constant.GO_BACK_TO_IDENTIFIED_STEP_ON_DEMAND_FAILED);
+ }
+ }
+
+ @Override
+ public String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier ligneFichier) throws
+ CBSException, ZoneException, IOException {
+ //todo
+ return new String[0];
+ }
+
+ @Override
+ public List extends Demande> getIdNextDemandeToArchive() {
+ //todo
+ return null;
+ }
+
+ @Override
+ public List extends Demande> getIdNextDemandeToPlaceInDeletedStatus() {
+ //todo
+ return null;
+ }
+
+ @Override
+ public List extends Demande> getIdNextDemandeToDelete() {
+ //todo
+ return null;
+ }
+
+ @Override
+ public String getQueryToSudoc(String code, String type, String[] valeurs) throws QueryToSudocException {
+ return null;
+ }
+
+ public Demande majTypeSupp(Integer demandeId, TYPE_SUPPRESSION typeSuppression) {
+ DemandeSupp demandeSupp = this.findById(demandeId);
+ if (demandeSupp != null) {
+ demandeSupp.setDateModification(Calendar.getInstance().getTime());
+ demandeSupp.setTypeSuppression(typeSuppression);
+ return this.save(demandeSupp);
+ }
+ return demandeSupp;
+ }
+}
diff --git a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierSuppService.java b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierSuppService.java
new file mode 100644
index 00000000..b33f0418
--- /dev/null
+++ b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierSuppService.java
@@ -0,0 +1,162 @@
+package fr.abes.item.core.service.impl;
+
+import fr.abes.item.core.configuration.factory.Strategy;
+import fr.abes.item.core.constant.Constant;
+import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.entities.item.*;
+import fr.abes.item.core.repository.item.ILigneFichierSuppDao;
+import fr.abes.item.core.service.ILigneFichierService;
+import fr.abes.item.core.utilitaire.Utilitaires;
+import lombok.extern.slf4j.Slf4j;
+import org.mozilla.universalchardet.ReaderFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Slf4j
+@Strategy(type= ILigneFichierService.class, typeDemande = {TYPE_DEMANDE.SUPP})
+@Service
+public class LigneFichierSuppService implements ILigneFichierService {
+ private final ILigneFichierSuppDao dao;
+
+ public LigneFichierSuppService(ILigneFichierSuppDao dao) {
+ this.dao = dao;
+ }
+
+ @Override
+ @Transactional
+ public void saveFile(File file, Demande demande){
+ DemandeSupp demandeSupp = (DemandeSupp) demande;
+ BufferedReader reader = null;
+
+ try {
+ reader = ReaderFactory.createBufferedReader(file);
+
+ String line;
+ String firstLine = reader.readLine(); //ne pas prendre en compte la première ligne avec les en-tête
+
+ if(firstLine == null){
+ log.error(Constant.ERROR_FIRST_LINE_OF_FILE_NULL);
+ }
+
+ int position = 0;
+
+ while ((line = reader.readLine()) != null){
+ Pattern regexp = Pattern.compile(Constant.LIGNE_FICHIER_SERVICE_PATTERN);
+ Matcher colsFinded = regexp.matcher(line);
+ String ppn = "";
+ String rcr = "";
+ String epn = "";
+ String valeur = "";
+ while (colsFinded.find()) {
+ if (colsFinded.group("ppn") != null)
+ ppn = Utilitaires.addZeros(colsFinded.group("ppn"), Constant.TAILLEMAX);
+ if (colsFinded.group("rcr") != null)
+ rcr = Utilitaires.addZeros(colsFinded.group("rcr"), Constant.TAILLEMAX);
+ if (colsFinded.group("epn") != null)
+ epn = Utilitaires.addZeros(colsFinded.group("epn"), Constant.TAILLEMAX);
+ if (colsFinded.group("valeur") != null)
+ valeur = colsFinded.group("valeur");
+ }
+ LigneFichierSupp lf = new LigneFichierSupp(ppn, rcr, epn, valeur, position++, 0, "", demandeSupp);
+ dao.save(lf);
+ }
+ } catch (IOException e){
+ log.error(e.getMessage());
+ } finally {
+ if (reader != null){
+ try {
+ reader.close();
+ } catch (IOException e) {
+ log.error(e.getMessage());
+ }
+ }
+ }
+ }
+
+ @Override
+ public List getLigneFichierbyDemande(Demande demande) {
+ List ligneFichierSupps = dao.getLigneFichierbyDemande(demande.getId());
+ return new ArrayList<>(ligneFichierSupps);
+ }
+
+ @Override
+ public LigneFichierSupp findById(Integer id) {
+ return dao.findById(id).orElse(null);
+ }
+
+ @Override
+ public LigneFichier save(LigneFichier ligneFichier) {
+ LigneFichierSupp ligneFichierSupp = (LigneFichierSupp) ligneFichier;
+ return dao.save(ligneFichierSupp);
+ }
+
+ @Override
+ public int getNbLigneFichierTraiteeByDemande(Demande demande) {
+ return dao.getNbLigneFichierTraitee(demande.getId());
+ }
+
+ @Override
+ public List getLigneFichierTraiteeByDemande(Demande demande) {
+ List ligneFichierSupps = dao.getLigneFichierTraitee(demande.getId());
+ return new ArrayList<>(ligneFichierSupps);
+ }
+
+ @Override
+ public LigneFichier getLigneFichierbyDemandeEtPos(Demande demande, Integer numLigne) {
+ return dao.getLigneFichierbyDemandeEtPos(demande.getId(), numLigne);
+ }
+
+ @Override
+ public int getNbLigneFichierNonTraitee(Demande demande) {
+ return dao.getNbLigneFichierNonTraitee(demande.getId());
+ }
+
+ @Override
+ public int getNbLigneFichierSuccessByDemande(Demande demande) {
+ return dao.getNbLigneFichierSuccessByDemande(demande.getId());
+ }
+
+ @Override
+ public int getNbLigneFichierErrorByDemande(Demande demande) {
+ return dao.getNbLigneFichierErrorByDemande(demande.getId());
+ }
+
+ @Override
+ public int getNbLigneFichierTotalByDemande(Demande demande) {
+ return dao.getNbLigneFichierTotal(demande.getId());
+ }
+
+ @Override
+ public int getNbReponseTrouveesByDemande(Demande demande) {
+ return 0;
+ }
+
+ @Override
+ public int getNbZeroReponseByDemande(Demande demande) {
+ return 0;
+ }
+
+ @Override
+ public int getNbUneReponseByDemande(Demande demande) {
+ return 0;
+ }
+
+ @Override
+ public int getNbReponseMultipleByDemande(Demande demande) {
+ return 0;
+ }
+
+ @Override
+ @Transactional
+ public void deleteByDemande(Demande demande) {
+ dao.deleteByDemandeSupp((DemandeSupp) demande);
+ }
+}
diff --git a/core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java b/core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java
index 8ed73fc9..2a1b6014 100644
--- a/core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java
+++ b/core/src/main/java/fr/abes/item/core/utilitaire/Utilitaires.java
@@ -24,7 +24,7 @@
@NoArgsConstructor
public class Utilitaires {
- public static Multimap parseJson(String input) throws IOException {
+ public static Multimap parseJson(String input, boolean revert) throws IOException {
//la correspondance pouvant retourner plusieurs fois un ppn, on crée une multimap pour récupérer le résultat
Multimap resMap = ArrayListMultimap.create();
//parse de l'input json
@@ -41,10 +41,16 @@ public static Multimap parseJson(String input) throws IOExceptio
//si on a plusieurs valeurs dans le json elles sont sous forme de tableau
if (ppnepn.getClass().toString().contains("ArrayList")) {
record = ppnepn.next();
- resMap.put(record.path("ppn").asText(), record.path("epn").asText());
+ if (revert)
+ resMap.put(record.path("epn").asText(), record.path("ppn").asText());
+ else
+ resMap.put(record.path("ppn").asText(), record.path("epn").asText());
} else {
//cas avec une seule valeur, on injecte l'unique valeur dans la map et on sort
- resMap.put(liste.path("ppn").asText(), liste.path("epn").asText());
+ if (revert)
+ resMap.put(liste.path("epn").asText(), liste.path("ppn").asText());
+ else
+ resMap.put(liste.path("ppn").asText(), liste.path("epn").asText());
return resMap;
}
}
diff --git a/core/src/test/java/fr/abes/item/core/components/TestFichierInitial.java b/core/src/test/java/fr/abes/item/core/components/TestFichierInitialModif.java
similarity index 99%
rename from core/src/test/java/fr/abes/item/core/components/TestFichierInitial.java
rename to core/src/test/java/fr/abes/item/core/components/TestFichierInitialModif.java
index e4ae92df..f86bb5e5 100644
--- a/core/src/test/java/fr/abes/item/core/components/TestFichierInitial.java
+++ b/core/src/test/java/fr/abes/item/core/components/TestFichierInitialModif.java
@@ -18,7 +18,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
@DisplayName("Test pour FichierInitial")
-public class TestFichierInitial {
+public class TestFichierInitialModif {
diff --git a/core/src/test/java/fr/abes/item/core/utilitaire/testUtilitaires.java b/core/src/test/java/fr/abes/item/core/utilitaire/testUtilitaires.java
index f781ba3a..77ccc4eb 100644
--- a/core/src/test/java/fr/abes/item/core/utilitaire/testUtilitaires.java
+++ b/core/src/test/java/fr/abes/item/core/utilitaire/testUtilitaires.java
@@ -176,7 +176,7 @@ void testParseJsonOneValue() throws IOException {
Multimap map = ArrayListMultimap.create();
map.put("231927401", "621956651");
- Assertions.assertThat(Utilitaires.parseJson(json)).isEqualTo(map);
+ Assertions.assertThat(Utilitaires.parseJson(json, false)).isEqualTo(map);
}
@Test
@@ -187,7 +187,7 @@ void testParseJsonManyValues() throws IOException {
map.put("231927401", "621956651");
map.put("111111111", "999999999");
- Assertions.assertThat(Utilitaires.parseJson(json)).isEqualTo(map);
+ Assertions.assertThat(Utilitaires.parseJson(json, false)).isEqualTo(map);
}
@Test
diff --git a/docker/batch/docker-entrypoint.sh b/docker/batch/docker-entrypoint.sh
index 7e7c5dd4..a7eff22e 100644
--- a/docker/batch/docker-entrypoint.sh
+++ b/docker/batch/docker-entrypoint.sh
@@ -25,6 +25,8 @@ if [ "$ITEM_BATCH_AT_STARTUP" = "1" ]; then
/scripts/itemBatchTraiterLigneFichierModif.sh
echo "-> Lancement de itemBatchTraiterLigneFichierRecouv.sh au démarrage du conteneur"
/scripts/itemBatchTraiterLigneFichierRecouv.sh
+ echo "-> Lancement de itemBatchTraiterLigneFichierSupp.sh au démarrage du conteneur"
+ /scripts/itemBatchTraiterLigneFichierSupp.sh
fi
# execute CMD (crond)
diff --git a/docker/batch/itemBatchArchiverDemandesPlusDeTroisMois.sh b/docker/batch/itemBatchArchiverDemandesPlusDeTroisMois.sh
index 35e84278..17758a72 100644
--- a/docker/batch/itemBatchArchiverDemandesPlusDeTroisMois.sh
+++ b/docker/batch/itemBatchArchiverDemandesPlusDeTroisMois.sh
@@ -2,7 +2,7 @@
# * * * * * /home/batch/item/current/bin/itemBatchTraiterLigneFichierRecouv.sh > /dev/null 2>&1
LANG=fr_FR.UTF-8
-if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.names=archiverDemandesPlusDeTroisMois") < 1 ]];
+if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.name=archiverDemandesPlusDeTroisMois") < 1 ]];
then
- java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.names=archiverDemandesPlusDeTroisMois
+ java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.name=archiverDemandesPlusDeTroisMois
fi
\ No newline at end of file
diff --git a/docker/batch/itemBatchExportStatistiques.sh b/docker/batch/itemBatchExportStatistiques.sh
index 996867dc..d068bc9b 100644
--- a/docker/batch/itemBatchExportStatistiques.sh
+++ b/docker/batch/itemBatchExportStatistiques.sh
@@ -2,7 +2,7 @@
# 30 1 1 * * /home/batch/Kopya/current/bin/itemBatchExportStatistiques.sh > /dev/null 2>&1
LANG=fr_FR.UTF-8
-if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.names=exportStatistiques") = 0 ]];
+if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.name=exportStatistiques") = 0 ]];
then
- java -jar /scripts/item-batch.jar --spring.batch.job.names=exportStatistiques
+ java -jar /scripts/item-batch.jar --spring.batch.job.name=exportStatistiques
fi
diff --git a/docker/batch/itemBatchStatutSupprimeDemandesPlusDeTroisMois.sh b/docker/batch/itemBatchStatutSupprimeDemandesPlusDeTroisMois.sh
index 2d3431b1..fbae05b6 100644
--- a/docker/batch/itemBatchStatutSupprimeDemandesPlusDeTroisMois.sh
+++ b/docker/batch/itemBatchStatutSupprimeDemandesPlusDeTroisMois.sh
@@ -2,7 +2,7 @@
# * * * * * /home/batch/item/current/bin/itemBatchStatutSupprimeDemandesPlusDeTroisMois.sh > /dev/null 2>&1
LANG=fr_FR.UTF-8
-if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.names=statutSupprimeDemandesPlusDeTroisMois") < 1 ]];
+if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.name=statutSupprimeDemandesPlusDeTroisMois") < 1 ]];
then
- java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.names=statutSupprimeDemandesPlusDeTroisMois
+ java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.name=statutSupprimeDemandesPlusDeTroisMois
fi
\ No newline at end of file
diff --git a/docker/batch/itemBatchSuppressionDemandesPlusDeTroisMois.sh b/docker/batch/itemBatchSuppressionDemandesPlusDeTroisMois.sh
index 1e75d646..aa90b018 100644
--- a/docker/batch/itemBatchSuppressionDemandesPlusDeTroisMois.sh
+++ b/docker/batch/itemBatchSuppressionDemandesPlusDeTroisMois.sh
@@ -2,7 +2,7 @@
# * * * * * /home/batch/item/current/bin/itemBatchSuppressionDemandesPlusDeTroisMois.sh > /dev/null 2>&1
LANG=fr_FR.UTF-8
-if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.names=suppressionDemandesPlusDeTroisMois") < 1 ]];
+if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.name=suppressionDemandesPlusDeTroisMois") < 1 ]];
then
- java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.names=suppressionDemandesPlusDeTroisMois
+ java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.name=suppressionDemandesPlusDeTroisMois
fi
diff --git a/docker/batch/itemBatchTraiterLigneFichierExemp.sh b/docker/batch/itemBatchTraiterLigneFichierExemp.sh
index 0d6a8ce1..dbe3c690 100644
--- a/docker/batch/itemBatchTraiterLigneFichierExemp.sh
+++ b/docker/batch/itemBatchTraiterLigneFichierExemp.sh
@@ -2,7 +2,7 @@
# * * * * * /home/batch/item/current/bin/itemBatchTraiterLigneFichierExemp.sh > /dev/null 2>&1
LANG=fr_FR.UTF-8
-if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.names=traiterLigneFichierExemp") < 1 ]];
+if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.name=traiterLigneFichierExemp") < 1 ]];
then
- java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.names=traiterLigneFichierExemp --server.port=8082
+ java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.name=traiterLigneFichierExemp --server.port=8082
fi
diff --git a/docker/batch/itemBatchTraiterLigneFichierModif.sh b/docker/batch/itemBatchTraiterLigneFichierModif.sh
index 91c3a032..0d5fdf30 100644
--- a/docker/batch/itemBatchTraiterLigneFichierModif.sh
+++ b/docker/batch/itemBatchTraiterLigneFichierModif.sh
@@ -2,7 +2,7 @@
# * * * * * /home/batch/item/current/bin/itemBatchTraiterLigneFichierModif.sh > /dev/null 2>&1
LANG=fr_FR.UTF-8
-if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.names=traiterLigneFichierModif") < 1 ]];
+if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.name=traiterLigneFichierModif") < 1 ]];
then
- java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.names=traiterLigneFichierModif --server.port=8083
+ java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.name=traiterLigneFichierModif --server.port=8083
fi
diff --git a/docker/batch/itemBatchTraiterLigneFichierRecouv.sh b/docker/batch/itemBatchTraiterLigneFichierRecouv.sh
index 12a00c08..80782789 100644
--- a/docker/batch/itemBatchTraiterLigneFichierRecouv.sh
+++ b/docker/batch/itemBatchTraiterLigneFichierRecouv.sh
@@ -2,7 +2,7 @@
# * * * * * /home/batch/item/current/bin/itemBatchTraiterLigneFichierRecouv.sh > /dev/null 2>&1
LANG=fr_FR.UTF-8
-if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.names=traiterLigneFichierRecouv") < 1 ]];
+if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.name=traiterLigneFichierRecouv") < 1 ]];
then
- java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.names=traiterLigneFichierRecouv --server.port=8084
+ java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.name=traiterLigneFichierRecouv --server.port=8084
fi
diff --git a/docker/batch/itemBatchTraiterLigneFichierSupp.sh b/docker/batch/itemBatchTraiterLigneFichierSupp.sh
new file mode 100644
index 00000000..dc127d4e
--- /dev/null
+++ b/docker/batch/itemBatchTraiterLigneFichierSupp.sh
@@ -0,0 +1,8 @@
+# dans la cron tab :
+# * * * * * /home/batch/item/current/bin/itemBatchTraiterLigneFichierSupp.sh > /dev/null 2>&1
+
+LANG=fr_FR.UTF-8
+if [[ $(pgrep -cf "item-batch.jar --spring.batch.job.name=traiterLigneFichierSupp") < 1 ]];
+then
+ java -jar -XX:MaxRAMPercentage=95 /scripts/item-batch.jar --spring.batch.job.name=traiterLigneFichierSupp --server.port=8085
+fi
diff --git a/docker/batch/tasks.tmpl b/docker/batch/tasks.tmpl
index b625f5c6..6ba9e102 100644
--- a/docker/batch/tasks.tmpl
+++ b/docker/batch/tasks.tmpl
@@ -1,4 +1,5 @@
${ITEM_BATCH_CRON_TRAITEMENT} /scripts/itemBatchTraiterLigneFichierModif.sh 1>/proc/1/fd/1 2>/proc/1/fd/2
${ITEM_BATCH_CRON_TRAITEMENT} /scripts/itemBatchTraiterLigneFichierExemp.sh 1>/proc/1/fd/1 2>/proc/1/fd/2
${ITEM_BATCH_CRON_TRAITEMENT} /scripts/itemBatchTraiterLigneFichierRecouv.sh 1>/proc/1/fd/1 2>/proc/1/fd/2
+${ITEM_BATCH_CRON_TRAITEMENT} /scripts/itemBatchTraiterLigneFichierSupp.sh 1>/proc/1/fd/1 2>/proc/1/fd/2
${ITEM_BATCH_CRON_STAT} /scripts/itemBatchExportStatistiques.sh 1>/proc/1/fd/1 2>/proc/1/fd/2
diff --git a/pom.xml b/pom.xml
index 220ac64b..9797df84 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
fr.abes.item
itembackoffice
- 2.4.11
+ 2.4.12-SNAPSHOT
core
web
@@ -60,7 +60,7 @@
org.springframework.boot
spring-boot-dependencies
- 3.2.4
+ 3.2.5
pom
import
@@ -71,7 +71,7 @@
org.springframework.boot
spring-boot-dependencies
- 3.1.3
+ 3.2.5
pom
diff --git a/web/pom.xml b/web/pom.xml
index 4b0c8e8f..a1134bf5 100644
--- a/web/pom.xml
+++ b/web/pom.xml
@@ -3,7 +3,7 @@
itembackoffice
fr.abes.item
- 2.4.11
+ 2.4.12-SNAPSHOT
4.0.0
jar
diff --git a/web/src/main/java/fr/abes/item/dto/DemandeSuppWebDto.java b/web/src/main/java/fr/abes/item/dto/DemandeSuppWebDto.java
new file mode 100644
index 00000000..df28e116
--- /dev/null
+++ b/web/src/main/java/fr/abes/item/dto/DemandeSuppWebDto.java
@@ -0,0 +1,44 @@
+package fr.abes.item.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import fr.abes.item.core.constant.TYPE_SUPPRESSION;
+import fr.abes.item.core.entities.item.DemandeSupp;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+
+@Getter
+@Setter
+@JsonTypeName("SUPP")
+@NoArgsConstructor
+public class DemandeSuppWebDto extends DemandeWebDto {
+ @JsonProperty("typeSuppression")
+ private String typeSuppression;
+ public DemandeSuppWebDto(Integer id, String rcr, String shortName, String iln, String etatDemande, String commentaire, Integer pourcentageProgressionTraitement, String dateCreation, String dateModification, String typeSuppression) {
+ super(id, rcr, shortName, iln, etatDemande, commentaire, pourcentageProgressionTraitement, dateCreation, dateModification);
+ this.typeSuppression = typeSuppression;
+ }
+
+ public DemandeSuppWebDto(DemandeSupp demande) {
+ DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
+ String dateCreation = format.format(demande.getDateCreation());
+ String dateModification = format.format(demande.getDateModification());
+ this.id = demande.getId();
+ this.rcr = demande.getRcr();
+ this.shortName = demande.getShortname();
+ this.iln = demande.getIln();
+ if (demande.getEtatDemande() != null)
+ this.etatDemande = demande.getEtatDemande().getLibelle();
+ this.commentaire = demande.getCommentaire();
+ this.pourcentageProgressionTraitement = demande.getPourcentageProgressionTraitement();
+ this.dateCreation = dateCreation;
+ this.dateModification = dateModification;
+
+ if (demande.getTypeSuppression() != null)
+ this.typeSuppression = demande.getTypeSuppression().toString();
+ }
+}
diff --git a/web/src/main/java/fr/abes/item/dto/DtoBuilder.java b/web/src/main/java/fr/abes/item/dto/DtoBuilder.java
index 3b14f4da..3304d85e 100644
--- a/web/src/main/java/fr/abes/item/dto/DtoBuilder.java
+++ b/web/src/main/java/fr/abes/item/dto/DtoBuilder.java
@@ -20,6 +20,7 @@ void init() {
dtoList.add(DemandeExempWebDto.class);
dtoList.add(DemandeModifWebDto.class);
dtoList.add(DemandeRecouvWebDto.class);
+ dtoList.add(DemandeSuppWebDto.class);
}
public DemandeWebDto buildDemandeDto(Demande demande, TYPE_DEMANDE type) {
@@ -27,6 +28,7 @@ public DemandeWebDto buildDemandeDto(Demande demande, TYPE_DEMANDE type) {
case EXEMP -> new DemandeExempWebDto((DemandeExemp) demande);
case MODIF -> new DemandeModifWebDto((DemandeModif) demande);
case RECOUV -> new DemandeRecouvWebDto((DemandeRecouv) demande);
+ case SUPP -> new DemandeSuppWebDto((DemandeSupp) demande);
};
}
diff --git a/web/src/main/java/fr/abes/item/security/JwtAuthenticationFilter.java b/web/src/main/java/fr/abes/item/security/JwtAuthenticationFilter.java
index 6c706ab3..02661ec5 100644
--- a/web/src/main/java/fr/abes/item/security/JwtAuthenticationFilter.java
+++ b/web/src/main/java/fr/abes/item/security/JwtAuthenticationFilter.java
@@ -31,7 +31,6 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull FilterChain filterChain) throws ServletException, IOException {
try {
- log.debug(Constant.ENTER_DOFILTERINTERNAL);
final String ip = getClientIP(request);
if (loginAttemptService.isBlocked(ip)) {
throw new RuntimeException(Constant.IP_BLOCKED);
diff --git a/web/src/main/java/fr/abes/item/security/LoginAttemptService.java b/web/src/main/java/fr/abes/item/security/LoginAttemptService.java
index c9c3b224..b00cd629 100644
--- a/web/src/main/java/fr/abes/item/security/LoginAttemptService.java
+++ b/web/src/main/java/fr/abes/item/security/LoginAttemptService.java
@@ -49,7 +49,6 @@ public void loginFailed(final String key) {
public boolean isBlocked(final String key) {
try {
- log.info(Constant.ERROR_BLOCKED_IP + attemptsCache.get(key));
int maxAttempt = 10;
return attemptsCache.get(key) >= maxAttempt;
} catch (final ExecutionException e) {
diff --git a/web/src/main/java/fr/abes/item/web/DemandeRestService.java b/web/src/main/java/fr/abes/item/web/DemandeRestService.java
index 078d1be1..3de2d548 100644
--- a/web/src/main/java/fr/abes/item/web/DemandeRestService.java
+++ b/web/src/main/java/fr/abes/item/web/DemandeRestService.java
@@ -5,6 +5,7 @@
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.constant.TYPE_SUPPRESSION;
import fr.abes.item.core.entities.item.Demande;
import fr.abes.item.core.entities.item.LigneFichier;
import fr.abes.item.core.exception.*;
@@ -12,6 +13,7 @@
import fr.abes.item.core.service.ILigneFichierService;
import fr.abes.item.core.service.impl.DemandeExempService;
import fr.abes.item.core.service.impl.DemandeModifService;
+import fr.abes.item.core.service.impl.DemandeSuppService;
import fr.abes.item.dto.DemandeWebDto;
import fr.abes.item.dto.DtoBuilder;
import fr.abes.item.security.CheckAccessToServices;
@@ -38,13 +40,15 @@ public class DemandeRestService {
private static final String LOGIN_MANAGER_INCONNU = "Pas de login rattaché au RCR de la demande, veuillez contacter l'assistance";
private final DemandeExempService demandeExempService;
private final DemandeModifService demandeModifService;
+ private final DemandeSuppService demandeSuppService;
private final CheckAccessToServices checkAccessToServices;
private final DtoBuilder builder;
private final StrategyFactory strategy;
- public DemandeRestService(DemandeExempService demandeExempService, DemandeModifService demandeModifService, CheckAccessToServices checkAccessToServices, DtoBuilder builder, StrategyFactory strategy) {
+ public DemandeRestService(DemandeExempService demandeExempService, DemandeModifService demandeModifService, DemandeSuppService demandeSuppService, CheckAccessToServices checkAccessToServices, DtoBuilder builder, StrategyFactory strategy) {
this.demandeExempService = demandeExempService;
this.demandeModifService = demandeModifService;
+ this.demandeSuppService = demandeSuppService;
this.checkAccessToServices = checkAccessToServices;
this.builder = builder;
this.strategy = strategy;
@@ -114,7 +118,7 @@ public DemandeWebDto save(@PathVariable("type") TYPE_DEMANDE type, @RequestParam
@PatchMapping(value = "/demandes/{type}/{id}")
@PreAuthorize("hasAnyAuthority('USER','ADMIN')")
- public DemandeWebDto modifDemande(@PathVariable("type") TYPE_DEMANDE type, @PathVariable("id") Integer id, @RequestParam("rcr") Optional rcr, @RequestParam("typeExemp") Optional typeExemp, @RequestParam("traitement") Optional traitement, @RequestParam("commentaire") Optional commentaire, HttpServletRequest request) throws ForbiddenException, UserExistException, UnknownDemandeException {
+ public DemandeWebDto modifDemande(@PathVariable("type") TYPE_DEMANDE type, @PathVariable("id") Integer id, @RequestParam("rcr") Optional rcr, @RequestParam("typeExemp") Optional typeExemp, @RequestParam("typeSupp") Optional typeSupp, @RequestParam("traitement") Optional traitement, @RequestParam("commentaire") Optional commentaire, HttpServletRequest request) throws ForbiddenException, UserExistException, UnknownDemandeException {
checkAccessToServices.autoriserAccesDemandeParIln(id, request.getAttribute(Constant.USER_NUM).toString(), type);
IDemandeService service = strategy.getStrategy(IDemandeService.class, type);
Demande demande = service.findById(id);
@@ -129,6 +133,9 @@ public DemandeWebDto modifDemande(@PathVariable("type") TYPE_DEMANDE type, @Path
if (type.equals(TYPE_DEMANDE.MODIF) && traitement.isPresent()) {
return builder.buildDemandeDto(demandeModifService.majTraitement(id, traitement.get()), type);
}
+ if (type.equals(TYPE_DEMANDE.SUPP) && typeSupp.isPresent()) {
+ return builder.buildDemandeDto(demandeSuppService.majTypeSupp(id, typeSupp.get()), type);
+ }
if (commentaire.isPresent()) {
demande.setCommentaire(commentaire.get());
return builder.buildDemandeDto(service.save(demande), type);
diff --git a/web/src/main/resources/application-dev.properties b/web/src/main/resources/application-dev.properties
index abf97b3c..900c3944 100644
--- a/web/src/main/resources/application-dev.properties
+++ b/web/src/main/resources/application-dev.properties
@@ -6,9 +6,9 @@ spring.datasource.item.driver-class-name=org.postgresql.Driver
spring.jpa.item.generate-ddl=false
spring.jpa.item.show-sql=false
-spring.jpa.item.hibernate.ddl-auto=create
+spring.jpa.item.hibernate.ddl-auto=none
spring.jpa.item.database-platform=org.hibernate.dialect.PostgreSQLDialect
-spring.sql.item.init.mode=always
+spring.sql.item.init.mode=never
spring.hibernate.item.enable_lazy_load_no_trans=true
# base xml de prod
diff --git a/web/src/test/java/fr/abes/item/web/impl/DemandeRestServiceTest.java b/web/src/test/java/fr/abes/item/web/impl/DemandeRestServiceTest.java
index bee53982..a739114d 100644
--- a/web/src/test/java/fr/abes/item/web/impl/DemandeRestServiceTest.java
+++ b/web/src/test/java/fr/abes/item/web/impl/DemandeRestServiceTest.java
@@ -4,9 +4,11 @@
import com.google.common.collect.Lists;
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.TYPE_DEMANDE;
+import fr.abes.item.core.constant.TYPE_SUPPRESSION;
import fr.abes.item.core.entities.item.*;
import fr.abes.item.core.service.impl.DemandeExempService;
import fr.abes.item.core.service.impl.DemandeModifService;
+import fr.abes.item.core.service.impl.DemandeSuppService;
import fr.abes.item.core.service.impl.LigneFichierExempService;
import fr.abes.item.dto.DtoBuilder;
import fr.abes.item.exception.RestResponseEntityExceptionHandler;
@@ -44,6 +46,8 @@ class DemandeRestServiceTest {
@MockBean
DemandeModifService demandeModifService;
@MockBean
+ DemandeSuppService demandeSuppService;
+ @MockBean
LigneFichierExempService ligneFichierExempService;
@MockBean
CheckAccessToServices checkAccessToServices;
@@ -207,6 +211,23 @@ void testModifDemandeTypeExemp() throws Exception {
.andExpect(jsonPath("$.typeExemp").value("Monographies Electroniques"));
}
+ @Test
+ @WithMockUser(authorities = {"USER"})
+ void testModifDemandeTypeSuppression() throws Exception {
+ Calendar cal = Calendar.getInstance();
+ Mockito.doNothing().when(checkAccessToServices).autoriserAccesDemandeParIln(1, "1", TYPE_DEMANDE.SUPP);
+ EtatDemande etat = new EtatDemande(1, "A compléter");
+ Utilisateur utilisateur = new Utilisateur(1, "test@test.com");
+ DemandeSupp demandeIn = new DemandeSupp(1, "341725201", cal.getTime(), cal.getTime(), "", etat, utilisateur);
+ Mockito.when(demandeSuppService.findById(1)).thenReturn(demandeIn);
+ demandeIn.setTypeSuppression(TYPE_SUPPRESSION.EPN);
+ Mockito.when(demandeSuppService.majTypeSupp(1, TYPE_SUPPRESSION.EPN)).thenReturn(demandeIn);
+ this.mockMvc.perform(patch("/api/v1/demandes/SUPP/1?typeSupp=EPN").requestAttr("userNum", "1"))
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.id").value("1"))
+ .andExpect(jsonPath("$.typeSuppression").value("EPN"));
+ }
+
@Test
@WithMockUser(authorities = {"USER"})
void testModifDemandeCommentaire() throws Exception {