Skip to content

Commit

Permalink
Merge pull request #54 from abes-esr/develop
Browse files Browse the repository at this point in the history
develop to main
  • Loading branch information
jvk88511334 authored Oct 3, 2024
2 parents 79bb169 + 3f0d8a5 commit 9f967e2
Show file tree
Hide file tree
Showing 11 changed files with 366 additions and 35 deletions.
7 changes: 5 additions & 2 deletions batch/src/main/java/fr/abes/item/batch/JobConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
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.service.ReferenceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
Expand Down Expand Up @@ -54,6 +55,7 @@ public class JobConfiguration {
private final StrategyFactory strategyFactory;
private final ProxyRetry proxyRetry;

private final ReferenceService referenceService;
@Value("${batch.min.hour}")
int minHour;

Expand All @@ -69,9 +71,10 @@ public class JobConfiguration {
private Integer nbPpnInFileResult;


public JobConfiguration(StrategyFactory strategyFactory, ProxyRetry proxyRetry) {
public JobConfiguration(StrategyFactory strategyFactory, ProxyRetry proxyRetry, ReferenceService referenceService) {
this.strategyFactory = strategyFactory;
this.proxyRetry = proxyRetry;
this.referenceService = referenceService;
}

@Bean
Expand All @@ -88,7 +91,7 @@ public LignesFichierReader reader() {
@Bean
@StepScope
public LignesFichierProcessor processor() {
return new LignesFichierProcessor(strategyFactory, proxyRetry);
return new LignesFichierProcessor(strategyFactory, proxyRetry, this.referenceService);
}
@Bean
public LignesFichierWriter writer() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.abes.item.batch.traitement;

import fr.abes.item.core.components.FichierSauvegardeSupp;
import fr.abes.item.core.components.FichierSauvegardeSuppCsv;
import fr.abes.item.core.components.FichierSauvegardeSuppTxt;
import fr.abes.item.core.configuration.factory.FichierFactory;
import fr.abes.item.core.configuration.factory.StrategyFactory;
import fr.abes.item.core.constant.Constant;
Expand All @@ -25,7 +26,8 @@ public class CreerFichierSauvegardeTasklet implements Tasklet, StepExecutionList
private final StrategyFactory factory;
private final String uploadPath;
private Demande demande;
private FichierSauvegardeSupp fichier;
private FichierSauvegardeSuppTxt fichierTxt;
private FichierSauvegardeSuppCsv fichierCsv;

public CreerFichierSauvegardeTasklet(StrategyFactory factory, String uploadPath) {
this.factory = factory;
Expand All @@ -45,17 +47,23 @@ public void beforeStep(@NonNull StepExecution stepExecution) {
}
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
this.fichier = (FichierSauvegardeSupp) FichierFactory.getFichier(Constant.ETATDEM_ATTENTE, TYPE_DEMANDE.SUPP);
fichier.generateFileName(this.demande);
fichier.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId()));
this.fichierTxt = (FichierSauvegardeSuppTxt) FichierFactory.getFichier(Constant.ETATDEM_ATTENTE, TYPE_DEMANDE.SUPP);
fichierTxt.generateFileName(this.demande);
fichierTxt.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId()));
this.fichierCsv = (FichierSauvegardeSuppCsv) FichierFactory.getFichier(Constant.ETATDEM_ATTENTE_2, TYPE_DEMANDE.SUPP);
fichierCsv.generateFileName(this.demande);
fichierCsv.setPath(Paths.get(uploadPath + demande.getTypeDemande().toString().toLowerCase() + "/" + demande.getId()));
fichierCsv.writeHeader();
return RepeatStatus.FINISHED;
}

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
if (stepExecution.getExitStatus().equals(ExitStatus.COMPLETED)) {
stepExecution.getJobExecution().getExecutionContext().put("fichierTxtPath", this.fichier.getPath().toString());
stepExecution.getJobExecution().getExecutionContext().put("fichierTxtName", this.fichier.getFilename());
stepExecution.getJobExecution().getExecutionContext().put("fichierTxtPath", this.fichierTxt.getPath().toString());
stepExecution.getJobExecution().getExecutionContext().put("fichierTxtName", this.fichierTxt.getFilename());
stepExecution.getJobExecution().getExecutionContext().put("fichierCsvPath", this.fichierCsv.getPath().toString());
stepExecution.getJobExecution().getExecutionContext().put("fichierCsvName", this.fichierCsv.getFilename());
}
return stepExecution.getExitStatus();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@
import fr.abes.cbs.notices.Zone;
import fr.abes.item.batch.traitement.ProxyRetry;
import fr.abes.item.batch.traitement.model.*;
import fr.abes.item.core.components.FichierSauvegardeSupp;
import fr.abes.item.core.components.FichierSauvegardeSuppCsv;
import fr.abes.item.core.components.FichierSauvegardeSuppTxt;
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.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.ReferenceService;
import fr.abes.item.core.service.impl.DemandeSuppService;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -31,18 +33,22 @@
import java.nio.file.Path;
import java.sql.SQLException;
import java.util.List;
import java.util.Optional;

@Slf4j
public class LignesFichierProcessor implements ItemProcessor<LigneFichierDto, LigneFichierDto>, StepExecutionListener {
private final StrategyFactory strategyFactory;
private final ProxyRetry proxyRetry;
private FichierSauvegardeSupp fichierSauvegardeSupp;
private final ReferenceService referenceService;
private FichierSauvegardeSuppTxt fichierSauvegardeSuppTxt;
private FichierSauvegardeSuppCsv fichierSauvegardeSuppcsv;

private Demande demande;

public LignesFichierProcessor(StrategyFactory strategyFactory, ProxyRetry proxyRetry) {
public LignesFichierProcessor(StrategyFactory strategyFactory, ProxyRetry proxyRetry,ReferenceService referenceService) {
this.strategyFactory = strategyFactory;
this.proxyRetry = proxyRetry;
this.referenceService = referenceService;
}


Expand All @@ -55,9 +61,14 @@ public void beforeStep(StepExecution stepExecution) {
IDemandeService demandeService = strategyFactory.getStrategy(IDemandeService.class, typeDemande);
Integer demandeId = (Integer) executionContext.get("demandeId");
this.demande = demandeService.findById(demandeId);
this.fichierSauvegardeSupp = new FichierSauvegardeSupp();
this.fichierSauvegardeSupp.setPath(Path.of(String.valueOf(executionContext.get("fichierTxtPath"))));
this.fichierSauvegardeSupp.setFilename(String.valueOf(executionContext.get("fichierTxtName")));
this.fichierSauvegardeSuppTxt = new FichierSauvegardeSuppTxt();
this.fichierSauvegardeSuppTxt.setPath(Path.of(String.valueOf(executionContext.get("fichierTxtPath"))));
this.fichierSauvegardeSuppTxt.setFilename(String.valueOf(executionContext.get("fichierTxtName")));

this.fichierSauvegardeSuppcsv = new FichierSauvegardeSuppCsv(this.referenceService);
this.fichierSauvegardeSuppcsv.setPath(Path.of(String.valueOf(executionContext.get("fichierCsvPath"))));
this.fichierSauvegardeSuppcsv.setFilename(String.valueOf(executionContext.get("fichierCsvName")));

log.info(Constant.POUR_LA_DEMANDE + this.demande.getNumDemande());
}

Expand Down Expand Up @@ -144,8 +155,10 @@ 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());
if (!exemplairesExistants.isEmpty()){
this.fichierSauvegardeSupp.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplairesExistants);
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);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package fr.abes.item.core.components;

import fr.abes.cbs.notices.Exemplaire;
import fr.abes.cbs.notices.Zone;
import fr.abes.item.core.constant.Constant;
import fr.abes.item.core.constant.TYPE_DEMANDE;
import fr.abes.item.core.entities.item.Demande;
import fr.abes.item.core.exception.FileCheckingException;
import fr.abes.item.core.exception.StorageException;
import fr.abes.item.core.service.ReferenceService;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Path;
import java.util.List;

@Setter
@Getter
@Component
@Slf4j
public class FichierSauvegardeSuppCsv extends AbstractFichier implements Fichier {

private final ReferenceService referenceService;

public FichierSauvegardeSuppCsv(ReferenceService referenceService) {
this.referenceService = referenceService;
}

public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException {
try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
// création de la liste de référence pour trouver l'emplacement de chaque zone et sous-zone
List<String> listDeReference = referenceService.constructHeaderCsv();
listDeReference.remove(0);
// ajout de la ligne
out.println(ppn + ";" + gererZones(listDeReference, exemplaire));
} catch (IOException ex) {
throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt");
}
}

public String gererZones(List<String> listeZonesEtSousZones, Exemplaire exemplaire) {
return gererZonesRecursif(listeZonesEtSousZones, 0, exemplaire, "", null);
}

private String gererZonesRecursif(List<String> listeZonesEtSousZones, int index, Exemplaire exemplaire, String resultat, Zone zone) {
if (index >= listeZonesEtSousZones.size()) {
if (resultat != null && !resultat.isEmpty()) {
return resultat.substring(0, resultat.length()-1);
}
return null;
}
String zoneSousZone = listeZonesEtSousZones.get(index);

if (zoneSousZone.startsWith("$")) {
if (zone != null) {
String sousZone = zone.findSubLabel(zoneSousZone);
if (sousZone != null) {
resultat += sousZone;
}
}
} else {
zone = exemplaire.findZone(zoneSousZone.split("\\$")[0],0);
if (zone != null) {
String sousZone = zone.findSubLabel(zoneSousZone.split("\\$")[1]);
if (sousZone != null) {
resultat += sousZone;
}
}
}
return gererZonesRecursif(listeZonesEtSousZones, index+1, exemplaire, resultat + ";", zone);
}

@Override
public String getFilename() {
return this.filename;
}

@Override
public void setPath(Path path) {
this.path = path;
}

@Override
public int getType() {
return Constant.ETATDEM_ATTENTE_2;
}

@Override
public TYPE_DEMANDE getDemandeType() {
return TYPE_DEMANDE.SUPP;
}

@Override
public void generateFileName(Demande demande) {
this.filename = Constant.FIC_SAUVEGARDE_NAME + demande.getId() + Constant.EXTENSIONCSV;
}

@Override
public void checkFileContent(Demande d) throws FileCheckingException, IOException {
//non implémentée
}

public void writeHeader() {
try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
// ajout de la ligne
out.println(String.join(";", this.referenceService.constructHeaderCsv()));
} catch (IOException ex) {
throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,28 @@
import fr.abes.item.core.exception.StorageException;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Path;
import java.util.List;

@Setter
@Getter
@Component
public class FichierSauvegardeSupp extends AbstractFichier implements Fichier {
@Slf4j
public class FichierSauvegardeSuppTxt extends AbstractFichier implements Fichier {

public void writePpnInFile(String ppn, List<Exemplaire> exemplaires) throws StorageException {
public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException {
try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
out.println(ppn);
out.println("\n");
exemplaires.forEach(exemplaire -> {
out.println(exemplaire);
out.println("\n");
});
out.print("\n");
out.println(exemplaire);
out.println("\n");
} catch (IOException ex) {
throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde txt");
Expand Down
3 changes: 2 additions & 1 deletion core/src/main/java/fr/abes/item/core/constant/Constant.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ public class Constant implements Serializable {
public static final int ETATDEM_SIMULATION = 4;
//Simulation terminée, demandeModif en attente de traitement par le batch
public static final int ETATDEM_ATTENTE = 5;
//Etat en attente fictif pour gérer les 2 fichiers de sauvegardes pour les demandes de SUPP
public static final int ETATDEM_ATTENTE_2 = 11;
//DemandeModif en cours de traitement par le batch
public static final int ETATDEM_ENCOURS = 6;
//DemandeModif traiteée et terminée
Expand All @@ -50,7 +52,6 @@ public class Constant implements Serializable {
public static final String TEXTE_991_CREA = "Exemplaire créé en masse par ITEM";
public static final String AUCUNE_DEMANDE = "AUCUNE DEMANDE";
public static final String DEFAULT = "default";
public static final String DEMANDE = "La demande ";

/**Authentication failed*/
public static final String UTILISATEUR_ABSENT_BASE = "Cet utilisateur n'existe pas dans la base de données.";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class ZonesAutorisees implements Serializable, GenericEntity<Integer> {
@Column(name = "INDICATEURS")
private String indicateurs;

@OneToMany(mappedBy = "zone", fetch = FetchType.LAZY)
@OneToMany(mappedBy = "zone", fetch = FetchType.EAGER)
private List<SousZonesAutorisees> sousZonesAutorisees;

@ManyToMany
Expand Down
29 changes: 21 additions & 8 deletions core/src/main/java/fr/abes/item/core/service/ReferenceService.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
package fr.abes.item.core.service;

import fr.abes.item.core.entities.item.EtatDemande;
import fr.abes.item.core.entities.item.IndexRecherche;
import fr.abes.item.core.entities.item.Traitement;
import fr.abes.item.core.entities.item.TypeExemp;
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.entities.item.*;
import fr.abes.item.core.repository.item.*;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
Expand All @@ -18,11 +14,13 @@ public class ReferenceService {
private final IEtatDemandeDao etatDemandeDao;
private final ITypeExempDao typeExempDao;
private final ITraitementDao traitementDao;
private final IZonesAutoriseesDao iZonesAutoriseesDao;

public ReferenceService(IEtatDemandeDao etatDemandeDao, ITypeExempDao typeExempDao, ITraitementDao traitementDao) {
public ReferenceService(IEtatDemandeDao etatDemandeDao, ITypeExempDao typeExempDao, ITraitementDao traitementDao, IZonesAutoriseesDao iZonesAutoriseesDao) {
this.etatDemandeDao = etatDemandeDao;
this.typeExempDao = typeExempDao;
this.traitementDao = traitementDao;
this.iZonesAutoriseesDao = iZonesAutoriseesDao;
}


Expand Down Expand Up @@ -65,4 +63,19 @@ public Traitement findTraitementById(Integer id) {
public Integer findTraitementByDemandeId(Integer id) {
return traitementDao.findTraitementByDemandeModifId(id);
}

public List<String> constructHeaderCsv() {
List<ZonesAutorisees> listZonesAutorisees = this.iZonesAutoriseesDao.findAll();
List<String> headerCsv = new ArrayList<>();
headerCsv.add("PPN");
for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) {
if(!zonesAutorisees.getLabelZone().startsWith("L")){
headerCsv.add(zonesAutorisees.getLabelZone()+zonesAutorisees.getSousZonesAutorisees().remove(0).getLibelle());
for (SousZonesAutorisees sousZonesAutorisees : zonesAutorisees.getSousZonesAutorisees()) {
headerCsv.add(sousZonesAutorisees.getLibelle());
}
}
}
return headerCsv;
}
}
Loading

0 comments on commit 9f967e2

Please sign in to comment.