Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

develop to main #61

Merged
merged 18 commits into from
Oct 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
d1563e1
ITEM-241 : Ajout appender personnalisé
pierre-maraval Oct 15, 2024
7e5e7fb
FEAT ITEM-269-back-modifier-lordre-de-tri-du-fichier
EryneKL Oct 15, 2024
017c2a8
ITEM-282 : vérification contenu fichiers suppression
pierre-maraval Oct 15, 2024
982a9db
ITEM-241 : Ajout classe et méthode dans sortie de logs
pierre-maraval Oct 15, 2024
a2e07a1
ITEM-282 : Ajout TU sur vérification fichier enrichi suppression
pierre-maraval Oct 15, 2024
60f66f1
- Ajout du calcul du temps d'execution des méthodes uniquement dans l…
jvk88511334 Oct 15, 2024
bc8d9a4
Merge pull request #58 from abes-esr/ITEM-241-optimiser-la-lecture-de…
jvk88511334 Oct 15, 2024
bb576ff
Merge remote-tracking branch 'origin/develop' into ITEM-269-back-modi…
EryneKL Oct 16, 2024
3cf9452
FEAT ITEM-269-back-modifier-lordre-de-tri-du-fichier
EryneKL Oct 16, 2024
e8bcd1b
FEAT ITEM-269-back-modifier-lordre-de-tri-du-fichier
EryneKL Oct 16, 2024
4b8769a
FEAT ITEM-269-back-modifier-lordre-de-tri-du-fichier
EryneKL Oct 16, 2024
fe80597
ITEM-282 : Gestion cas colonnes vides sur demande suppression avec ty…
pierre-maraval Oct 17, 2024
cb7d442
FEAT ITEM-269-back-modifier-lordre-de-tri-du-fichier
EryneKL Oct 17, 2024
c3eabe5
FIX : Correction condition dans vérification fichier
pierre-maraval Oct 17, 2024
fafa29c
Merge pull request #59 from abes-esr/ITEM-269-back-modifier-lordre-de…
SamuelQuetin Oct 17, 2024
7827987
Merge pull request #60 from abes-esr/ITEM-282-back-completer-la-metho…
SamuelQuetin Oct 17, 2024
939a2e3
FEAT ITEM-295-le-shortname-du-rcr-ne-se-met-pas-a-jour-lors-dune-modi…
EryneKL Oct 17, 2024
1825107
Merge pull request #62 from abes-esr/ITEM-295-le-shortname-du-rcr-ne-…
pierre-maraval Oct 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import fr.abes.item.core.service.ILigneFichierService;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.ThreadContext;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.JDBCConnectionException;
import org.springframework.batch.core.ExitStatus;
Expand Down Expand Up @@ -110,6 +111,8 @@ public ExitStatus afterStep(StepExecution stepExecution) {
stepExecution.getJobExecution().getExecutionContext().put("lignes", this.lignesFichier);
stepExecution.getJobExecution().getExecutionContext().put("demandeId", this.demandeId);
stepExecution.getJobExecution().getExecutionContext().put("typeDemande", this.typeDemande.toString());
ThreadContext.put("demandeId", String.valueOf(this.demandeId));
ThreadContext.put("typeDemande", this.typeDemande.toString());
}
return stepExecution.getExitStatus();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,19 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto)
//récupération des exemplaires existants pour cette ligne
List<Exemplaire> exemplairesExistants = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP))
.getExemplairesExistants(ligneFichierDtoSupp.getPpn());
Optional<Exemplaire> exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst();
if (exemplaireASupprimerOpt.isPresent()){
this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
if (ligneFichierDtoSupp.getEpn() != null) {
Optional<Exemplaire> exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst();
if (exemplaireASupprimerOpt.isPresent()) {
this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get());
}
//supprimer l'exemplaire
this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp);
ligneFichierDtoSupp.setRetourSudoc(Constant.EXEMPLAIRE_SUPPRIME);
} else {
//si pas d'epn dans la ligne du fichier, on ne fait pas le traitement et on écrit directement le message dans le retour sudoc pour le fichier résultat
ligneFichierDtoSupp.setRetourSudoc("Exemplaire inexistant");
}
//supprimer l'exemplaire
this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp);
ligneFichierDtoSupp.setRetourSudoc(Constant.EXEMPLAIRE_SUPPRIME);
return ligneFichierDtoSupp;
}

Expand Down
3 changes: 2 additions & 1 deletion batch/src/main/resources/log4j2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@
<PatternLayout
pattern="%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{1.}}{dark,yellow}: %msg%n%throwable" />
</Console>
<ItemLogAppender name="ItemLogAppender" />
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
<Logger name="fr.abes.item" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="ItemLogAppender"/>
</Logger>
</Loggers>
</Configuration>
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.entities.item.IndexRecherche;
import fr.abes.item.core.exception.FileCheckingException;
import fr.abes.item.core.utilitaire.Utilitaires;
import lombok.Getter;
import lombok.Setter;
Expand Down Expand Up @@ -79,4 +80,39 @@ protected int getIndexZone(IndexRecherche indexCourant, String[] tabLigne, int i
return indexZone;
}


/**
* Méthode permettant de vérifier que la valeur de la seconde colonne correspond au RCR de la demande
* @param rcrFichier : ligne du fichier
* @param rcr : rcr de la demande
* @throws FileCheckingException : erreur de format de fichier
*/
protected void checkRcr(String rcrFichier, String rcr, int ligneCourante) throws FileCheckingException {
if (!rcrFichier.equals(rcr)) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGRCR);
}
}

/**
* Méthode de vérification de la forme d'un ppn
* @param ppn ppn à vérifier
* @throws FileCheckingException : erreur de format de fichier
*/
protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingException {
if (!ppn.matches("^\\d{8}[0-9X]$")){
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGPPN);
}
}

/**
* Méthode de vérification de la forme d'un epn
* @param epn epn à vérifier
* @throws FileCheckingException: erreur de format de l'epn
*/
protected void checkEpn(String epn, int ligneCourante) throws FileCheckingException {
if (!epn.matches("^\\d{8}[0-9X]$")) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGEPN);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,13 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx
*/
private void check3Cols(String ligne) throws FileCheckingException {
if (ligne.split(";").length < 4) {
throw new FileCheckingException(Constant.ERR_FILE_3COL);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
if (ligne.length() < 12) {
throw new FileCheckingException(Constant.ERR_FILE_3COL);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) {
throw new FileCheckingException(Constant.ERR_FILE_3COL);
throw new FileCheckingException(Constant.ERR_FILE_3COL_MODIF);
}
}

Expand Down Expand Up @@ -149,49 +149,15 @@ private void checkBodyLine(String ligne, DemandeModif demandeModif) throws FileC
}
try {
String[] tabligne = ligne.split(";");
checkRcr(tabligne[1], demandeModif.getRcr());
checkPpn(tabligne[0]);
checkEpn(tabligne[2]);
checkRcr(tabligne[1], demandeModif.getRcr(), ligneCourante);
checkPpn(tabligne[0], ligneCourante);
checkEpn(tabligne[2], ligneCourante);
check4cols(tabligne, demandeModif.getTraitement().getNomMethode());
}catch (IndexOutOfBoundsException e) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH);
}
}

/**
* Méthode permettant de vérifier que la valeur de la seconde colonne correspond au RCR de la demande
* @param rcrFichier : ligne du fichier
* @param rcr : rcr de la demande
* @throws FileCheckingException : erreur de format de fichier
*/
private void checkRcr(String rcrFichier, String rcr) throws FileCheckingException {
if (!rcrFichier.equals(rcr)) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGRCR);
}
}

/**
* Méthode de vérification de la forme d'un ppn
* @param ppn ppn à vérifier
* @throws FileCheckingException : erreur de format de fichier
*/
private void checkPpn(String ppn) throws FileCheckingException {
if (!ppn.matches("\\d{1,9}X?$")){
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGPPN);
}
}

/**
* Méthode de vérification de la forme d'un epn
* @param epn epn à vérifier
* @throws FileCheckingException: erreur de format de l'epn
*/
private void checkEpn(String epn) throws FileCheckingException {
if (!epn.matches("\\d{1,9}X?$")) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_WRONGEPN);
}
}


/**
* Méthode permettant de vérifier la valeur de la 4è colonne en fonction du traitement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,31 @@

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.DemandeSupp;
import fr.abes.item.core.exception.FileCheckingException;
import fr.abes.item.core.utilitaire.Utilitaires;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

@Component
public class FichierEnrichiSupp extends AbstractFichier implements Fichier {
private int ligneCourante;

@Autowired
public FichierEnrichiSupp(@Value("") final String filename) {
this.filename = filename;
this.ligneCourante = 2;
}

@Override
public int getType() {
return Constant.ETATDEM_ACOMPLETER;
Expand All @@ -27,6 +44,56 @@ public void generateFileName(Demande demande) {

@Override
public void checkFileContent(Demande d) throws FileCheckingException, IOException {
DemandeSupp demandeSupp = (DemandeSupp) d;
ligneCourante = 2;
try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString());
BufferedReader bufLecteur = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) {
String ligne = Utilitaires.checkBom(bufLecteur.readLine());
check3Cols(ligne);
while ((ligne = bufLecteur.readLine()) != null) {
checkBodyLine(ligne, demandeSupp);
ligneCourante++;
}
}
}

/**
* Méthode de vérification de la première partie de la ligne du fichier enrichi.
* Les trois premières colonnes doivent être : ppn;rcr;epn;
*
* @param ligne : ligne à traiter
* @throws FileCheckingException : erreur dans le format de la ligne
*/
private void check3Cols(String ligne) throws FileCheckingException {
if (ligne.split(";").length < 3) {
throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP);
}
if (ligne.length() < 11) {
throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP);
}
if (!("ppn;rcr;epn").equalsIgnoreCase(ligne.substring(0, 11))) {
throw new FileCheckingException(Constant.ERR_FILE_3COL_SUPP);
}
}

/**
* Méthode de vérification d'une ligne du corps du fichier enrichi
*
* @param ligne ligne du fichier à analyser
* @throws FileCheckingException : erreur de format de la ligne
*/
private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileCheckingException {
try {
String[] tabligne = ligne.split(";");
if (demandeSupp.getTypeSuppression().equals(TYPE_SUPPRESSION.EPN) && tabligne[0] != null) {
checkPpn(tabligne[0], ligneCourante);
}
checkRcr(tabligne[1], demandeSupp.getRcr(), ligneCourante);
//cas ou l'epn est renseigné
if (tabligne.length > 2)
checkEpn(tabligne[2], ligneCourante);
} catch (IndexOutOfBoundsException e) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

@Component
public class FichierInitial extends AbstractFichier implements Fichier {
private int ligneCourante;
protected int ligneCourante;

@Autowired
public FichierInitial(@Value("") final String filename) {
Expand Down Expand Up @@ -59,7 +59,7 @@ public void checkFileContent(Demande demande) throws FileCheckingException, IOEx
* @param ligne : ligne à vérifier
* @throws FileCheckingException : erreur dans la format de la ligne
*/
private void checkBodyLine(String ligne) throws FileCheckingException {
protected void checkBodyLine(String ligne) throws FileCheckingException {
if (ligne.length() != 9) {
throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_ONLYONEPPN);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import fr.abes.item.core.entities.item.Demande;
import fr.abes.item.core.entities.item.DemandeSupp;
import fr.abes.item.core.exception.FileCheckingException;
import fr.abes.item.core.utilitaire.Utilitaires;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

Expand All @@ -17,7 +18,6 @@

@Component
public class FichierInitialSupp extends FichierInitial implements Fichier {
private int ligneCourante;
public FichierInitialSupp(@Value("") final String filename) {
super(filename);
}
Expand All @@ -37,14 +37,14 @@ public void generateFileName(Demande demande) {
public void checkFileContent(Demande demande) throws FileCheckingException, IOException {
try (FileInputStream fis = new FileInputStream(path.resolve(filename).toString());
BufferedReader bufLecteur = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) {
this.ligneCourante = 0;

while ((bufLecteur.readLine()) != null) {
ligneCourante++;
this.ligneCourante = 1;
String ligne;
while ((ligne = Utilitaires.checkBom(bufLecteur.readLine())) != null) {
checkBodyLine(ligne);
}

//cas ou il y a trop de lignes dans le fichier
if (ligneCourante > Constant.MAX_LIGNE_FICHIER_INIT_SUPP) {
if ((ligneCourante - 1) > Constant.MAX_LIGNE_FICHIER_INIT_SUPP) {
throw new FileCheckingException(ligneCourante, Constant.ERR_FILE_TOOMUCH_SUPP);
}
}
Expand Down
Loading
Loading