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 1b456829..943f6cdb 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 @@ -158,8 +158,19 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto) if (ligneFichierDtoSupp.getEpn() != null) { Optional exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst(); if (exemplaireASupprimerOpt.isPresent()) { + //Type de document non présent dans le fichier de sauvegarde txt, seulement dans le csv this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); - this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); + try{ + String typeDoc = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) + .getTypeDocumentFromPpn(ligneFichierDtoSupp.getPpn()); + this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), typeDoc); + } catch (CBSException | IOException | ZoneException | QueryToSudocException e) { + if(e.getClass().equals(QueryToSudocException.class)){ + this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), e.getMessage()); + }else{ + this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), ""); + } + } } //supprimer l'exemplaire this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp); diff --git a/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java b/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java index a9fe14bd..2f79a1aa 100644 --- a/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java +++ b/core/src/main/java/fr/abes/item/core/components/AbstractFichier.java @@ -89,7 +89,7 @@ protected int getIndexZone(IndexRecherche indexCourant, String[] tabLigne, int i */ 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); + throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_WRONGRCR); } } @@ -100,7 +100,7 @@ protected void checkRcr(String rcrFichier, String rcr, int ligneCourante) throws */ 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); + throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_WRONGPPN); } } @@ -111,7 +111,7 @@ protected void checkPpn(String ppn, int ligneCourante) throws FileCheckingExcept */ 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); + throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_WRONGEPN); } } 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 index 6de2ecfa..d81426da 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierEnrichiSupp.java @@ -86,7 +86,7 @@ private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileChe try { // contrôle de la longueur de la ligne if (ligne.split(";").length > 3) { - throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + " \"" + ligne + "\" " + Constant.ERR_FILE_3COL_SUPP_ANY_LINE); + throw new FileCheckingException(Constant.ERR_FILE_LINE + ligne + " : " + Constant.ERR_FILE_3COL_SUPP_ANY_LINE); } String[] tabligne = ligne.split(";"); // contrôle du ppn @@ -98,7 +98,7 @@ private void checkBodyLine(String ligne, DemandeSupp demandeSupp) throws FileChe if (tabligne.length > 2) checkEpn(tabligne[2], ligneCourante); } catch (IndexOutOfBoundsException e) { - throw new FileCheckingException(Constant.ERR_FILE_ERRLINE + ligneCourante + Constant.ERR_FILE_LINELENGTH); + throw new FileCheckingException(Constant.ERR_FILE_LINE + ligneCourante + " : " + Constant.ERR_FILE_LINELENGTH); } } } diff --git a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java index 7210468e..9a92a4e0 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java @@ -32,7 +32,7 @@ public FichierSauvegardeSuppCsv(ReferenceService referenceService) { this.referenceService = referenceService; } - public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException { + public void writePpnInFile(String ppn, Exemplaire exemplaire, String typeDoc) throws StorageException { try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true); BufferedWriter bw = new BufferedWriter(fw); PrintWriter out = new PrintWriter(bw)) { @@ -40,7 +40,7 @@ public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageExce List listDeReference = referenceService.constructHeaderCsv(); listDeReference.remove(0); // ajout de la ligne - out.println(ppn + ";" + gererZones(listDeReference, exemplaire)); + out.println(typeDoc + ";" + ppn + ";" + gererZones(listDeReference, exemplaire)); } catch (IOException ex) { throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde csv"); } 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 8e380b8a..0c05598c 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 @@ -111,6 +111,7 @@ public class Constant implements Serializable { public static final String ERR_FILE_3COL_SUPP = "La première ligne du fichier doit contenir 3 colonnes (ppn;rcr;epn)"; public static final String ERR_FILE_3COL_SUPP_ANY_LINE = "La ligne doit contenir trois colones"; public static final String ERR_FILE_ERRLINE = "Erreur ligne "; + public static final String ERR_FILE_LINE = "Ligne "; public static final String ERR_FILE_ONLYONEPPN = "la ligne ne doit contenir qu'un ppn (sur 9 caractères)."; public static final String ERR_FILE_HEAD4TH = "La valeur en-tête de la quatrieme colonne n'est pas valide."; public static final String ERR_FILE_LINELENGTH = " : Il y a un problème lié à la longueur de la ligne."; diff --git a/core/src/main/java/fr/abes/item/core/service/ReferenceService.java b/core/src/main/java/fr/abes/item/core/service/ReferenceService.java index f449131a..b9148726 100644 --- a/core/src/main/java/fr/abes/item/core/service/ReferenceService.java +++ b/core/src/main/java/fr/abes/item/core/service/ReferenceService.java @@ -1,7 +1,10 @@ package fr.abes.item.core.service; import fr.abes.item.core.entities.item.*; -import fr.abes.item.core.repository.item.*; +import fr.abes.item.core.repository.item.IEtatDemandeDao; +import fr.abes.item.core.repository.item.ITraitementDao; +import fr.abes.item.core.repository.item.ITypeExempDao; +import fr.abes.item.core.repository.item.IZonesAutoriseesDao; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -67,6 +70,7 @@ public Integer findTraitementByDemandeId(Integer id) { public List constructHeaderCsv() { List listZonesAutorisees = this.iZonesAutoriseesDao.findAll(); List headerCsv = new ArrayList<>(); + headerCsv.add("TYPE (008)"); headerCsv.add("PPN"); for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) { if(!zonesAutorisees.getLabelZone().startsWith("L")){ 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 index 81321ba1..aef4f3f8 100644 --- 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 @@ -3,6 +3,7 @@ import fr.abes.cbs.exception.CBSException; import fr.abes.cbs.exception.ZoneException; import fr.abes.cbs.notices.Exemplaire; +import fr.abes.cbs.notices.NoticeConcrete; import fr.abes.item.core.components.*; import fr.abes.item.core.configuration.factory.FichierFactory; import fr.abes.item.core.configuration.factory.Strategy; @@ -390,6 +391,20 @@ public String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier lign } } + public String getTypeDocumentFromPpn(String ppn) throws CBSException, IOException, QueryToSudocException, ZoneException { + String query = "che ppn " + ppn; + traitementService.getCbs().search(query); + int nbReponses = traitementService.getCbs().getNbNotices(); + return switch (nbReponses) { + case 0 -> throw new QueryToSudocException(Constant.ERR_FILE_NOTICE_NOT_FOUND); + case 1 -> { + NoticeConcrete notice = traitementService.getCbs().editerNoticeConcrete("1"); + yield notice.getNoticeBiblio().findZone("008", 0).findSubLabel("$a").substring(0,2); + } + default -> throw new QueryToSudocException(Constant.ERR_FILE_MULTIPLES_NOTICES_FOUND + traitementService.getCbs().getListePpn()); + }; + } + public List getExemplairesExistants(LigneFichierSupp ligneFichierSupp) throws IOException, QueryToSudocException, CBSException, ZoneException { return getExemplairesExistants(ligneFichierSupp.getPpn()); } diff --git a/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java b/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java index 585c6277..9dc79223 100644 --- a/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java +++ b/core/src/test/java/fr/abes/item/core/service/ReferenceServiceTest.java @@ -65,7 +65,7 @@ void constructHeaderCsv() { Mockito.when(iZonesAutoriseesDao.findAll()).thenReturn(zonesAutoriseesList); List test = referenceService.constructHeaderCsv(); - List reference = List.of("PPN;917$a;930$c;$d;".split(";")); + List reference = List.of("TYPE (008);PPN;917$a;930$c;$d;".split(";")); assertEquals(reference,test); 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 77ccc4eb..d376c94c 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 @@ -107,13 +107,6 @@ void addZeros(){ assertThat(Utilitaires.addZeros(str, 9)).isEqualTo("000000012"); } - @Test - void stringToRemove(){ - String string = "230727409;seau;bleu;;;"; - String stringResult = Utilitaires.removeSemicolonFromEndOfLine(string); - System.out.println(stringResult); - } - /** * Test de vérification de la méthode supprimant les données locales de la première ligne du fichier */