Skip to content

Commit

Permalink
FEAT ITEM-306-back-envoi-dun-fichier-epn-modifier-le-message-derreur-…
Browse files Browse the repository at this point in the history
…du-check-content-dans-le-cas-dun-epn-sans-ppn-ex-341725201-622042351
  • Loading branch information
EryneKL committed Oct 18, 2024
1 parent 1825107 commit b19cf5a
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ public void alimenterEpn(String input, String listeppn, String rcr) {
*/
public void alimenterPpn(String input, String listeEpn, String rcr) {
try (FileWriter fw = new FileWriter(path.resolve(filename).toString(), true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
String[] tabEpn = listeEpn.split(",");
Multimap<String, String> resJson = Utilitaires.parseJson(input, true);
for (String epn : tabEpn) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,17 @@
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 org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Component
public class FichierPrepareSupp extends FichierPrepare implements Fichier {

Expand All @@ -20,4 +28,24 @@ public FichierPrepareSupp(@Value("") final String filename) {
public void generateFileName(Demande demande) {
this.filename = Constant.FIC_CORRESPONDANCE_NAME + demande.getId() + Constant.EXTENSIONCSV;
}

public void controleIntegriteDesCorrespondances() throws IOException, FileCheckingException {
List<String> epnSansCorrespondance = new ArrayList<>();
try (FileInputStream fileReader = new FileInputStream(path.resolve(filename).toString());
BufferedReader reader = new BufferedReader(new InputStreamReader(fileReader, StandardCharsets.UTF_8))) {

reader.readLine();//cette ligne enleve le header et le stoc

reader.lines().forEach(line -> {
Matcher m = Pattern.compile("^(?<PPN>\\d{8}[0-9X]);(?<RCR>\\d{9});(?<EPN>\\d{8}[0-9X])?;$").matcher(line);
if (m.group("PPN").isEmpty()) {
epnSansCorrespondance.add(m.group("EPN"));
}
});
}
if (!epnSansCorrespondance.isEmpty()) {
throw new FileCheckingException("EPN sans correspondance : " + String.join(", ", epnSansCorrespondance));
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ private void stockerFichierOnDisk(MultipartFile file, Fichier fichier, DemandeSu
}
}

private void checkEtatDemande(DemandeSupp demande) throws DemandeCheckingException, IOException, FileTypeException {
private void checkEtatDemande(DemandeSupp demande) throws DemandeCheckingException, IOException, FileTypeException, FileCheckingException {
int etat = demande.getEtatDemande().getNumEtat();
switch (etat) {
case Constant.ETATDEM_PREPARATION -> preparerFichierEnPrep(demande);
Expand All @@ -177,16 +177,18 @@ private void checkEtatDemande(DemandeSupp demande) throws DemandeCheckingExcepti
}
}

private void preparerFichierEnPrep(DemandeSupp demande) throws IOException, DemandeCheckingException, FileTypeException {
private void preparerFichierEnPrep(DemandeSupp demande) throws IOException, DemandeCheckingException, FileTypeException, FileCheckingException {
if (demande.getTypeSuppression() != null) {
//Suppression d'un éventuel fichier existant sur le disque
storageService.delete(fichierPrepare.getFilename());
//Ecriture ligne d'en-tête dans FichierApresWS
fichierPrepare.ecrireEnTete();
//Alimentation du fichier par appel à la procédure Oracle ppntoepn
appelProcStockee(demande.getRcr(), demande.getTypeSuppression());
demande.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPAREE));
// TODO effectuer un contrôle d'intégrité du fichier de correspondance. Si PPN absent, alors throw une erreur (à créer) "correspondance(s) incomplète(s) ligne(s) ..."
fichierPrepare.controleIntegriteDesCorrespondances();
fichierPrepare.trierLignesDeCorrespondances();
demande.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPAREE));
save(demande);
checkEtatDemande(demande);
}
Expand Down

0 comments on commit b19cf5a

Please sign in to comment.