Skip to content

Commit

Permalink
Merge pull request #61 from abes-esr/develop
Browse files Browse the repository at this point in the history
develop to main
  • Loading branch information
pierre-maraval authored Oct 18, 2024
2 parents ee1a2be + 1825107 commit 4c16284
Show file tree
Hide file tree
Showing 33 changed files with 417 additions and 121 deletions.
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

0 comments on commit 4c16284

Please sign in to comment.