From 09819423fbfb663200a375403f969daf55187abd Mon Sep 17 00:00:00 2001 From: Jerome Villiseck Date: Mon, 21 Oct 2024 09:55:11 +0200 Subject: [PATCH 1/5] =?UTF-8?q?-=20Travail=20en=20cours=20sur=20r=C3=A9cup?= =?UTF-8?q?=C3=A9rer=20proprement=20la=20008=20de=20la=20notice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LignesFichierProcessor.java | 3 +++ .../core/service/impl/DemandeSuppService.java | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) 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..0939a3de 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 @@ -155,6 +155,9 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto) //récupération des exemplaires existants pour cette ligne List exemplairesExistants = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) .getExemplairesExistants(ligneFichierDtoSupp.getPpn()); + //TODO voir dans getTypeDocumentFromPpn comment gérer la logique de la 008 pour les notices + String oo8 = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) + .getTypeDocumentFromPpn(ligneFichierDtoSupp.getPpn()); if (ligneFichierDtoSupp.getEpn() != null) { Optional exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst(); if (exemplaireASupprimerOpt.isPresent()) { 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 a3a6746f..e948b0ee 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.Notice; 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,24 @@ public String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier lign } } + public String getTypeDocumentFromPpn(String ppn) throws CBSException, IOException, QueryToSudocException { + 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 -> { + //TODO reprendre ici et voir si on peut récupérer la 008 en récupérant la notice au format String + //TODO Parce que j'ai pas envie de parser en string pour aller chercher la 008n si une méthode existe deja dans accescbs + //Notice notice = traitementService.getCbs().getClientCBS() + //String notice = traitementService.getCbs().getClientCBS().mod("1", String.valueOf(traitementService.getCbs().getLotEncours())); + //log.debug(notice); + //yield notice; + } + 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()); } From b33399a25492662c17bcc5818ceed357a6adba27 Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Mon, 21 Oct 2024 10:13:56 +0200 Subject: [PATCH 2/5] =?UTF-8?q?Feat=20:=20ajout=20m=C3=A9thode=20r=C3=A9cu?= =?UTF-8?q?p=C3=A9ration=20type=20document=20notice=20Int=C3=A9gration=20d?= =?UTF-8?q?ans=20fichier=20sauvegarde=20csv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LignesFichierProcessor.java | 11 +++++++---- .../core/components/FichierSauvegardeSuppCsv.java | 4 ++-- .../fr/abes/item/core/service/ReferenceService.java | 7 +++++-- .../item/core/service/impl/DemandeSuppService.java | 12 ++++-------- 4 files changed, 18 insertions(+), 16 deletions(-) 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 0939a3de..cc472502 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 @@ -155,14 +155,17 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto) //récupération des exemplaires existants pour cette ligne List exemplairesExistants = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) .getExemplairesExistants(ligneFichierDtoSupp.getPpn()); - //TODO voir dans getTypeDocumentFromPpn comment gérer la logique de la 008 pour les notices - String oo8 = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) - .getTypeDocumentFromPpn(ligneFichierDtoSupp.getPpn()); if (ligneFichierDtoSupp.getEpn() != null) { Optional 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()); + /*TODO : voir les éventuelles erreurs à catcher dans la récupération du type de document + La zone est normalement obligatoire, et forcément sur 4 caractères (à vérifier) + Que faire en cas d'erreur de requête sur la recherche du ppn, ou de construction de l'objet NoticeConcrete + */ + String typeDoc = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) + .getTypeDocumentFromPpn(ligneFichierDtoSupp.getPpn()); + this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), typeDoc); } //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..67d87389 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,7 +70,7 @@ public Integer findTraitementByDemandeId(Integer id) { public List constructHeaderCsv() { List listZonesAutorisees = this.iZonesAutoriseesDao.findAll(); List headerCsv = new ArrayList<>(); - headerCsv.add("PPN"); + headerCsv.add("TYPE (008);PPN"); for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) { if(!zonesAutorisees.getLabelZone().startsWith("L")){ headerCsv.add(zonesAutorisees.getLabelZone()+zonesAutorisees.getSousZonesAutorisees().remove(0).getLibelle()); 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 e948b0ee..e0f24570 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,7 +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.Notice; +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; @@ -391,19 +391,15 @@ public String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier lign } } - public String getTypeDocumentFromPpn(String ppn) throws CBSException, IOException, QueryToSudocException { + 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 -> { - //TODO reprendre ici et voir si on peut récupérer la 008 en récupérant la notice au format String - //TODO Parce que j'ai pas envie de parser en string pour aller chercher la 008n si une méthode existe deja dans accescbs - //Notice notice = traitementService.getCbs().getClientCBS() - //String notice = traitementService.getCbs().getClientCBS().mod("1", String.valueOf(traitementService.getCbs().getLotEncours())); - //log.debug(notice); - //yield notice; + NoticeConcrete notice = traitementService.getCbs().editerNoticeConcrete("1"); + yield notice.findZone("008", 0).getValeur().substring(0,2); } default -> throw new QueryToSudocException(Constant.ERR_FILE_MULTIPLES_NOTICES_FOUND + traitementService.getCbs().getListePpn()); }; From 15e0d6195ebfd32e69dec81a914e46d9ed1cf01d Mon Sep 17 00:00:00 2001 From: Jerome Villiseck Date: Mon, 21 Oct 2024 14:29:21 +0200 Subject: [PATCH 3/5] =?UTF-8?q?Ajout=20de=20la=20gestion=20des=20exception?= =?UTF-8?q?s=20dans=20l'=C3=A9criture=20du=20fichier=20de=20sauvegarde?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LignesFichierProcessor.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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 cc472502..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,14 +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()); - /*TODO : voir les éventuelles erreurs à catcher dans la récupération du type de document - La zone est normalement obligatoire, et forcément sur 4 caractères (à vérifier) - Que faire en cas d'erreur de requête sur la recherche du ppn, ou de construction de l'objet NoticeConcrete - */ - String typeDoc = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) - .getTypeDocumentFromPpn(ligneFichierDtoSupp.getPpn()); - this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), typeDoc); + 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); From 523648b1895c086280f5290e8644ee1f7ff12181 Mon Sep 17 00:00:00 2001 From: Jerome Villiseck Date: Mon, 21 Oct 2024 14:45:38 +0200 Subject: [PATCH 4/5] Correction des TU --- .../java/fr/abes/item/core/service/ReferenceService.java | 3 ++- .../fr/abes/item/core/service/ReferenceServiceTest.java | 2 +- .../java/fr/abes/item/core/utilitaire/testUtilitaires.java | 7 ------- 3 files changed, 3 insertions(+), 9 deletions(-) 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 67d87389..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 @@ -70,7 +70,8 @@ public Integer findTraitementByDemandeId(Integer id) { public List constructHeaderCsv() { List listZonesAutorisees = this.iZonesAutoriseesDao.findAll(); List headerCsv = new ArrayList<>(); - headerCsv.add("TYPE (008);PPN"); + headerCsv.add("TYPE (008)"); + headerCsv.add("PPN"); for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) { if(!zonesAutorisees.getLabelZone().startsWith("L")){ headerCsv.add(zonesAutorisees.getLabelZone()+zonesAutorisees.getSousZonesAutorisees().remove(0).getLibelle()); 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 */ From 680f8c7a7295ef5f3d05ef4cea18bff2a2969811 Mon Sep 17 00:00:00 2001 From: Jerome Villiseck Date: Tue, 22 Oct 2024 16:51:06 +0200 Subject: [PATCH 5/5] =?UTF-8?q?-=20Modification=20utilisation=20accescbs?= =?UTF-8?q?=20pour=20r=C3=A9cup=C3=A9ration=20correcte=20du=20type=20de=20?= =?UTF-8?q?document?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fr/abes/item/core/service/impl/DemandeSuppService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e0f24570..0e94d0df 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 @@ -399,7 +399,7 @@ public String getTypeDocumentFromPpn(String ppn) throws CBSException, IOExceptio case 0 -> throw new QueryToSudocException(Constant.ERR_FILE_NOTICE_NOT_FOUND); case 1 -> { NoticeConcrete notice = traitementService.getCbs().editerNoticeConcrete("1"); - yield notice.findZone("008", 0).getValeur().substring(0,2); + yield notice.getNoticeBiblio().findZone("008", 0).findSubLabel("$a").substring(0,2); } default -> throw new QueryToSudocException(Constant.ERR_FILE_MULTIPLES_NOTICES_FOUND + traitementService.getCbs().getListePpn()); };