Skip to content

Commit

Permalink
Merge pull request #104 from abes-esr/ITEM-398-refactor-recuperation-…
Browse files Browse the repository at this point in the history
…type-document

Item 398 refactor recuperation type document
  • Loading branch information
SamuelQuetin authored Dec 3, 2024
2 parents dc05daa + cabe092 commit 028aa6b
Show file tree
Hide file tree
Showing 19 changed files with 634 additions and 638 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ private String genererFichier() throws IOException, FileTypeException, QueryToSu
DemandeExemp demandeExemp = (DemandeExemp) demande;
LigneFichierDtoExemp ligneFichierDtoExemp = new LigneFichierDtoExemp((LigneFichierExemp) ligne);
log.warn(ligneFichierDtoExemp.getIndexRecherche());
ligneFichierDtoExemp.setRequete(demandeService.getQueryToSudoc(demandeExemp.getIndexRecherche().getCode(), demandeExemp.getTypeExemp().getNumTypeExemp(), ligneFichierDtoExemp.getIndexRecherche().split(";")));
ligneFichierDtoExemp.setRequete(this.ligneFichierService.getQueryToSudoc(demandeExemp.getIndexRecherche().getCode(), demandeExemp.getTypeExemp().getNumTypeExemp(), ligneFichierDtoExemp.getIndexRecherche().split(";")));
out.println(ligneFichierDtoExemp.getValeurToWriteInFichierResultat(demande, nbPpnInFileResult));
}
case MODIF -> {
Expand All @@ -141,7 +141,7 @@ private String genererFichier() throws IOException, FileTypeException, QueryToSu
default -> {
DemandeRecouv demandeRecouv = (DemandeRecouv) demande;
LigneFichierDtoRecouv ligneFichierDtoRecouv = new LigneFichierDtoRecouv((LigneFichierRecouv) ligne);
ligneFichierDtoRecouv.setRequete(demandeService.getQueryToSudoc(demandeRecouv.getIndexRecherche().getCode(), null, ligneFichierDtoRecouv.getIndexRecherche().split(";")));
ligneFichierDtoRecouv.setRequete(this.ligneFichierService.getQueryToSudoc(demandeRecouv.getIndexRecherche().getCode(), null, ligneFichierDtoRecouv.getIndexRecherche().split(";")));
out.println(ligneFichierDtoRecouv.getValeurToWriteInFichierResultat(demande, nbPpnInFileResult));
}
}
Expand Down
54 changes: 27 additions & 27 deletions batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
import fr.abes.item.core.entities.item.DemandeSupp;
import fr.abes.item.core.exception.QueryToSudocException;
import fr.abes.item.core.service.TraitementService;
import fr.abes.item.core.service.impl.DemandeExempService;
import fr.abes.item.core.service.impl.DemandeModifService;
import fr.abes.item.core.service.impl.DemandeRecouvService;
import fr.abes.item.core.service.impl.LigneFichierExempService;
import fr.abes.item.core.service.impl.LigneFichierModifService;
import fr.abes.item.core.service.impl.LigneFichierRecouvService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DataAccessException;
import org.springframework.retry.annotation.Backoff;
Expand All @@ -33,17 +33,17 @@
public class ProxyRetry {
private final StrategyFactory factory;
private final TraitementService traitementService;
private final DemandeModifService demandeModifService;
private final DemandeExempService demandeExempService;
private final DemandeRecouvService demandeRecouvService;
private final LigneFichierModifService ligneFichierModifService;
private final LigneFichierExempService ligneFichierExempService;
private final LigneFichierRecouvService ligneFichierRecouvService;


public ProxyRetry(TraitementService traitementService, StrategyFactory strategyFactory, DemandeModifService demandeModifService, DemandeExempService demandeExempService, DemandeRecouvService demandeRecouvService) {
public ProxyRetry(TraitementService traitementService, StrategyFactory strategyFactory, LigneFichierModifService ligneFichierModifService, LigneFichierExempService ligneFichierExempService, LigneFichierRecouvService ligneFichierRecouvService) {
this.traitementService = traitementService;
this.factory = strategyFactory;
this.demandeModifService = demandeModifService;
this.demandeExempService = demandeExempService;
this.demandeRecouvService = demandeRecouvService;
this.ligneFichierModifService = ligneFichierModifService;
this.ligneFichierExempService = ligneFichierExempService;
this.ligneFichierRecouvService = ligneFichierRecouvService;
}

/**
Expand All @@ -55,7 +55,7 @@ public ProxyRetry(TraitementService traitementService, StrategyFactory strategyF
*/
@Retryable(retryFor = IOException.class, noRetryFor = CBSException.class, backoff = @Backoff(delay = 1000, multiplier = 2))
public void authenticate(String login) throws CBSException, IOException {
log.warn(Constant.PROXY_AUTHENTICATION_WITH_LOGIN + login);
log.warn(Constant.PROXY_AUTHENTICATION_WITH_LOGIN + "{}", login);
traitementService.authenticate(login);
}

Expand All @@ -78,10 +78,10 @@ public void saveExemplaire(DemandeModif demande, LigneFichierDtoModif ligneFichi
//récupération de la exemplaire correpondant à la ligne du fichier en cours
String exemplaire = traitementService.getNoticeFromEPN(ligneFichierDtoModif.getEpn());
//modification de la exemplaire d'exemplaire
Exemplaire noticeTraitee = demandeModifService.getNoticeTraitee(demande, exemplaire, ligneFichierDtoMapper.getLigneFichierEntity(ligneFichierDtoModif));
Exemplaire noticeTraitee = ligneFichierModifService.getNoticeTraitee(demande, exemplaire, ligneFichierDtoMapper.getLigneFichierEntity(ligneFichierDtoModif));
traitementService.saveExemplaire(noticeTraitee.toString(), ligneFichierDtoModif.getEpn());
} catch (IOException ex) {
log.error("Erreur de communication avec le CBS sur demande modif " + demande.getId() + " / ligne fichier n°" + ligneFichierDtoModif.getNumLigneFichier() + " / epn : " + ligneFichierDtoModif.getEpn());
log.error("Erreur de communication avec le CBS sur demande modif {} / ligne fichier n°{} / epn : {}", demande.getId(), ligneFichierDtoModif.getNumLigneFichier(), ligneFichierDtoModif.getEpn());
//si un pb de communication avec le CBS est détecté, on se reconnecte, et on renvoie l'exception pour que le retry retente la méthode
this.disconnect();
this.authenticate("M" + demande.getRcr());
Expand All @@ -101,23 +101,23 @@ public void saveExemplaire(DemandeModif demande, LigneFichierDtoModif ligneFichi
noRetryFor = {CBSException.class, ZoneException.class}, backoff = @Backoff(delay = 1000, multiplier = 2) )
public void newExemplaire(DemandeExemp demande, LigneFichierDtoExemp ligneFichierDtoExemp) throws CBSException, ZoneException, IOException {
try {
ligneFichierDtoExemp.setRequete(demandeExempService.getQueryToSudoc(demande.getIndexRecherche().getCode(), demande.getTypeExemp().getNumTypeExemp(), ligneFichierDtoExemp.getIndexRecherche().split(";")));
ligneFichierDtoExemp.setRequete(ligneFichierExempService.getQueryToSudoc(demande.getIndexRecherche().getCode(), demande.getTypeExemp().getNumTypeExemp(), ligneFichierDtoExemp.getIndexRecherche().split(";")));
//lancement de la requête de récupération de la notice dans le CBS
String numEx = demandeExempService.launchQueryToSudoc(demande, ligneFichierDtoExemp.getIndexRecherche());
ligneFichierDtoExemp.setNbReponses(demandeExempService.getNbReponses());
String numEx = ligneFichierExempService.launchQueryToSudoc(demande, ligneFichierDtoExemp.getIndexRecherche());
ligneFichierDtoExemp.setNbReponses(ligneFichierExempService.getNbReponses());
if (ligneFichierDtoExemp.getNbReponses() == 1) {
ligneFichierDtoExemp.setListePpn(traitementService.getCbs().getPpnEncours());
} else {
ligneFichierDtoExemp.setListePpn(traitementService.getCbs().getListePpn().toString());
}

String exemplaire = demandeExempService.creerExemplaireFromHeaderEtValeur(demande.getListeZones(), ligneFichierDtoExemp.getValeurZone(), demande.getRcr(), numEx);
String donneeLocale = demandeExempService.creerDonneesLocalesFromHeaderEtValeur(demande.getListeZones(), ligneFichierDtoExemp.getValeurZone());
String exemplaire = ligneFichierExempService.creerExemplaireFromHeaderEtValeur(demande.getListeZones(), ligneFichierDtoExemp.getValeurZone(), demande.getRcr(), numEx);
String donneeLocale = ligneFichierExempService.creerDonneesLocalesFromHeaderEtValeur(demande.getListeZones(), ligneFichierDtoExemp.getValeurZone());
traitementService.getCbs().creerExemplaire(numEx);
traitementService.getCbs().newExemplaire(exemplaire);
if (!donneeLocale.isEmpty()) {
//s'il y a des données locales existantes, on modifie
if (demandeExempService.hasDonneeLocaleExistante()) {
if (ligneFichierExempService.hasDonneeLocaleExistante()) {
traitementService.getCbs().modLoc(donneeLocale);
} else {
//s'il n'y a pas de donnée locale dans la notice, on crée le bloc
Expand All @@ -129,16 +129,16 @@ public void newExemplaire(DemandeExemp demande, LigneFichierDtoExemp ligneFichie
ligneFichierDtoExemp.setL035(getL035fromDonneesLocales(donneeLocale));
ligneFichierDtoExemp.setRetourSudoc(Constant.EXEMPLAIRE_CREE);
} catch (QueryToSudocException e) {
ligneFichierDtoExemp.setNbReponses(demandeExempService.getNbReponses());
ligneFichierDtoExemp.setNbReponses(ligneFichierExempService.getNbReponses());
ligneFichierDtoExemp.setListePpn(traitementService.getCbs().getListePpn().toString().replace(';', ','));
ligneFichierDtoExemp.setRetourSudoc("");
} catch (DataAccessException d) {
if (d.getRootCause() instanceof SQLException sqlEx) {
log.error("Erreur SQL : " + sqlEx.getErrorCode());
log.error(sqlEx.getSQLState() + "|" + sqlEx.getMessage() + "|" + sqlEx.getLocalizedMessage());
log.error("Erreur SQL : {}", sqlEx.getErrorCode());
log.error("{}|{}|{}", sqlEx.getSQLState(), sqlEx.getMessage(), sqlEx.getLocalizedMessage());
}
} catch (IOException ex) {
log.error("Erreur de communication avec le CBS sur demande exemp " + demande.getId() + " / ligne fichier n°" + ligneFichierDtoExemp.getNumLigneFichier());
log.error("Erreur de communication avec le CBS sur demande exemp {} / ligne fichier n°{}", demande.getId(), ligneFichierDtoExemp.getNumLigneFichier());
//si un pb de communication avec le CBS est détecté, on se reconnecte, et on renvoie l'exception pour que le retry retente la méthode
this.disconnect();
this.authenticate("M" + demande.getRcr());
Expand Down Expand Up @@ -166,17 +166,17 @@ private String getL035fromDonneesLocales(String donneeLocale) throws ZoneExcepti
@Retryable(maxAttempts = 4, retryFor = IOException.class,
noRetryFor = {CBSException.class, QueryToSudocException.class}, backoff = @Backoff(delay = 1000, multiplier = 2) )
public void recouvExemplaire(DemandeRecouv demande, LigneFichierDtoRecouv ligneFichierDtoRecouv) throws IOException, QueryToSudocException, CBSException {
ligneFichierDtoRecouv.setRequete(demandeRecouvService.getQueryToSudoc(demande.getIndexRecherche().getCode(), null, ligneFichierDtoRecouv.getIndexRecherche().split(";")));
ligneFichierDtoRecouv.setRequete(ligneFichierRecouvService.getQueryToSudoc(demande.getIndexRecherche().getCode(), null, ligneFichierDtoRecouv.getIndexRecherche().split(";")));
try {
ligneFichierDtoRecouv.setNbReponses(demandeRecouvService.launchQueryToSudoc(demande.getIndexRecherche().getCode(), ligneFichierDtoRecouv.getIndexRecherche()));
ligneFichierDtoRecouv.setNbReponses(ligneFichierRecouvService.launchQueryToSudoc(demande.getIndexRecherche().getCode(), ligneFichierDtoRecouv.getIndexRecherche()));
switch (ligneFichierDtoRecouv.getNbReponses()) {
case 0 -> ligneFichierDtoRecouv.setListePpn("");
case 1 -> ligneFichierDtoRecouv.setListePpn(traitementService.getCbs().getPpnEncours());
default ->
ligneFichierDtoRecouv.setListePpn(traitementService.getCbs().getListePpn().toString().replace(';', ','));
}
} catch (IOException ex) {
log.error("Erreur de communication avec le CBS sur demande recouv " + demande.getId() + " / ligne fichier n°" + ligneFichierDtoRecouv.getNumLigneFichier());
log.error("Erreur de communication avec le CBS sur demande recouv {} / ligne fichier n°{}", demande.getId(), ligneFichierDtoRecouv.getNumLigneFichier());
//si un pb de communication avec le CBS est détecté, on se reconnecte, et on renvoie l'exception pour que le retry retente la méthode
this.disconnect();
this.authenticate("M" + demande.getRcr());
Expand All @@ -189,7 +189,7 @@ public void deleteExemplaire(DemandeSupp demandeSupp, LigneFichierDtoSupp ligneF
try {
traitementService.deleteExemplaire(ligneFichierDtoSupp.getEpn());
} catch (IOException e) {
log.error("Erreur de communication avec le CBS sur demande de suppression " + demandeSupp.getId() + " / ligne fichier n°" + ligneFichierDtoSupp.getNumLigneFichier() + " / epn : " + ligneFichierDtoSupp.getEpn());
log.error("Erreur de communication avec le CBS sur demande de suppression {} / ligne fichier n°{} / epn : {}", demandeSupp.getId(), ligneFichierDtoSupp.getNumLigneFichier(), ligneFichierDtoSupp.getEpn());
this.disconnect();
this.authenticate("M"+ demandeSupp.getRcr());
throw e;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,6 @@ public TYPE_DEMANDE getTypeDemande() {
}

public Integer getNbReponses() {
if(nbReponses==null){
return 0;
}
return nbReponses;
return (nbReponses==null) ? 0 : nbReponses;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.constant.TYPE_DEMANDE;
import fr.abes.item.core.dto.ExemplaireWithTypeDto;
import fr.abes.item.core.entities.item.*;
import fr.abes.item.core.exception.QueryToSudocException;
import fr.abes.item.core.exception.StorageException;
import fr.abes.item.core.service.IDemandeService;
import fr.abes.item.core.service.ILigneFichierService;
import fr.abes.item.core.service.ReferenceService;
import fr.abes.item.core.service.impl.DemandeSuppService;
import fr.abes.item.core.service.impl.LigneFichierSuppService;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.exception.ConstraintViolationException;
Expand Down Expand Up @@ -45,7 +47,7 @@ public class LignesFichierProcessor implements ItemProcessor<LigneFichierDto, Li

private Demande demande;

public LignesFichierProcessor(StrategyFactory strategyFactory, ProxyRetry proxyRetry,ReferenceService referenceService) {
public LignesFichierProcessor(StrategyFactory strategyFactory, ProxyRetry proxyRetry, ReferenceService referenceService) {
this.strategyFactory = strategyFactory;
this.proxyRetry = proxyRetry;
this.referenceService = referenceService;
Expand Down Expand Up @@ -153,24 +155,14 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto)
DemandeSupp demandeSupp = (DemandeSupp) this.demande;
LigneFichierDtoSupp ligneFichierDtoSupp = (LigneFichierDtoSupp) ligneFichierDto;
//récupération des exemplaires existants pour cette ligne
List<Exemplaire> exemplairesExistants = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP))
.getExemplairesExistants(ligneFichierDtoSupp.getPpn());
LigneFichierSuppService service = ((LigneFichierSuppService) strategyFactory.getStrategy(ILigneFichierService.class, TYPE_DEMANDE.SUPP));
ExemplaireWithTypeDto exemplaireWithType = service.getExemplairesAndTypeDoc(ligneFichierDtoSupp.getPpn());
if (ligneFichierDtoSupp.getEpn() != null) {
Optional<Exemplaire> exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst();
Optional<Exemplaire> exemplaireASupprimerOpt = exemplaireWithType.getExemplaires().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());
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(), "");
}
}
this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), exemplaireWithType.getType());
}
//supprimer l'exemplaire
this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package fr.abes.item.core.dto;

import fr.abes.cbs.notices.Exemplaire;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class ExemplaireWithTypeDto {
private List<Exemplaire> exemplaires = new ArrayList<>();
private String type;

public void addExemplaires(List<Exemplaire> exemplaires) {
this.exemplaires.addAll(exemplaires);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
package fr.abes.item.core.service;

import fr.abes.cbs.exception.CBSException;
import fr.abes.cbs.exception.ZoneException;
import fr.abes.item.core.dto.DemandeDto;
import fr.abes.item.core.entities.item.Demande;
import fr.abes.item.core.entities.item.LigneFichier;
import fr.abes.item.core.exception.DemandeCheckingException;
import fr.abes.item.core.exception.FileCheckingException;
import fr.abes.item.core.exception.FileTypeException;
import fr.abes.item.core.exception.QueryToSudocException;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
Expand Down Expand Up @@ -56,11 +52,9 @@ public interface IDemandeService {

Demande returnState(Integer etape, Demande demande) throws DemandeCheckingException;

String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier ligneFichier) throws CBSException, ZoneException, IOException;

List<? extends Demande> getDemandesToArchive();
List<? extends Demande> getDemandesToPlaceInDeletedStatus();
List<? extends Demande> getDemandesToDelete();

String getQueryToSudoc(String code, Integer type, String[] valeurs) throws QueryToSudocException;

}
Loading

0 comments on commit 028aa6b

Please sign in to comment.