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/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/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 */