From f3ee326ab658ac9a02fb874346810ca0a4ac8d54 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Tue, 3 Jun 2025 16:28:52 +0200 Subject: [PATCH] Fix esportazione doc e importazione ack Intesa --- .../ems_model/utility/UtilityString.java | 1 + .../integry/ems_model/utility/UtilityZip.java | 42 +++++---- .../Import/service/AckImportService.java | 91 ++++++++++++++++++- .../service/DocumentiIntesaExportService.java | 19 +++- 4 files changed, 130 insertions(+), 23 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems_model/utility/UtilityString.java b/ems-core/src/main/java/it/integry/ems_model/utility/UtilityString.java index 11943ecb6b..10791c1855 100644 --- a/ems-core/src/main/java/it/integry/ems_model/utility/UtilityString.java +++ b/ems-core/src/main/java/it/integry/ems_model/utility/UtilityString.java @@ -42,6 +42,7 @@ public class UtilityString { //----------------------------------------------------------------------------------------- //senza spazi put("^\\d{8}$", "yyyyMMdd"); + put("^\\d{6}$", "yyMMdd"); put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy"); put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy"); diff --git a/ems-core/src/main/java/it/integry/ems_model/utility/UtilityZip.java b/ems-core/src/main/java/it/integry/ems_model/utility/UtilityZip.java index bb549e9ad0..64490fc38b 100644 --- a/ems-core/src/main/java/it/integry/ems_model/utility/UtilityZip.java +++ b/ems-core/src/main/java/it/integry/ems_model/utility/UtilityZip.java @@ -4,8 +4,7 @@ import it.integry.ems.response.FileItem; import org.apache.commons.io.FilenameUtils; import java.io.*; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import java.util.zip.*; public class UtilityZip { @@ -103,7 +102,7 @@ public class UtilityZip { do { try { if (retries > 0) - fileName = FilenameUtils.getBaseName(fileName) + "_" + retries+"." + FilenameUtils.getExtension(fileName); + fileName = FilenameUtils.getBaseName(fileName) + "_" + retries + "." + FilenameUtils.getExtension(fileName); ZipEntry zipEntry = new ZipEntry(fileName); zipEntry.setSize(content.length); zipOutputStream.putNextEntry(zipEntry); @@ -133,25 +132,32 @@ public class UtilityZip { return outputStream.toByteArray(); } - public static List extractZipFile(byte[] zipFile) throws Exception { - List extractedFiles = new ArrayList<>(); - ByteArrayInputStream inputStream = new ByteArrayInputStream(zipFile); - ZipInputStream zipInputStream = new ZipInputStream(inputStream); + public static Map extractZipFile(String zipFilePath) throws IOException { + Map extractedFiles = new HashMap<>(); - while (zipInputStream.getNextEntry() != null) { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int len; - while ((len = zipInputStream.read(buffer)) > 0) { - outputStream.write(buffer, 0, len); + try (ZipFile zipFile = new ZipFile(zipFilePath)) { + Enumeration entries = zipFile.entries(); + + while (entries.hasMoreElements()) { + ZipEntry entry = entries.nextElement(); + + if (entry.isDirectory()) continue; + + try (InputStream is = zipFile.getInputStream(entry); + ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + + byte[] buffer = new byte[1024]; + int len; + while ((len = is.read(buffer)) > 0) { + baos.write(buffer, 0, len); + } + + extractedFiles.put(entry.getName(), baos.toByteArray()); + } } - extractedFiles.add(outputStream.toByteArray()); - zipInputStream.closeEntry(); - outputStream.close(); } - zipInputStream.close(); - inputStream.close(); return extractedFiles; } + } diff --git a/ems-engine/src/main/java/it/integry/ems/document/Import/service/AckImportService.java b/ems-engine/src/main/java/it/integry/ems/document/Import/service/AckImportService.java index e8a1f06e68..ae8072cf67 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/Import/service/AckImportService.java +++ b/ems-engine/src/main/java/it/integry/ems/document/Import/service/AckImportService.java @@ -1,17 +1,104 @@ package it.integry.ems.document.Import.service; import it.integry.ems.Import.dto.ImportRequestDTO; +import it.integry.ems.document.Import.dto.AckIntesaDTO; +import it.integry.ems.response.FileItem; +import it.integry.ems.service.EntityProcessor; +import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems_model.base.EntityBase; +import it.integry.ems_model.entity.DtbDocuLog; +import it.integry.ems_model.types.OperationType; +import it.integry.ems_model.utility.*; +import org.apache.commons.codec.binary.Base64; +import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; +import java.util.Map; @Service @Scope(value = "request") public class AckImportService { - public List importAckIntesa(String type, String format, ImportRequestDTO requestDto) { - return null; + @Autowired + private MultiDBTransactionManager multiDBTransactionManager; + + @Autowired + private EntityProcessor entityProcessor; + + public List importAckIntesa(String type, String format, ImportRequestDTO request) throws Exception { + Map fileList = UtilityZip.extractZipFile(request.getPathFile()); + List resultList = new ArrayList<>(); + + for (Map.Entry fileMap : fileList.entrySet()) { + String fileName = fileMap.getKey(); + byte[] file = fileMap.getValue(); + + if (!fileName.contains("ACK2")) + continue; + + List ackList = parseCSVLineToDTO( + UtilityCSV.readCSV(new String(file, StandardCharsets.UTF_8), ";") + ); + + for (AckIntesaDTO ack : ackList) { + String documentFileName = ack.getFileName(); + + String[] parts = documentFileName.replace(".pdf", "").split("_"); + + String codDtip = parts[1]; + String serDoc = parts[2].replace("-", "/"); + int numDoc = Integer.parseInt(parts[3]); + LocalDate dataDoc = UtilityString.parseLocalDate(parts[4]); + String codAnag = parts[5]; + + codAnag = "C7401"; + codDtip = "ABRW"; + + DtbDocuLog dtbDocuLog = new DtbDocuLog() + .setCodDtip(codDtip) + .setNumDoc(numDoc) + .setSerDoc(serDoc) + .setDataDoc(UtilityLocalDate.localDateToDate(dataDoc)) + .setCodAnag(codAnag) + .setFlagType("E") + .setDocType("DOCUMENTI") + .setFormatFile("INTESA"); + dtbDocuLog.setOperation(OperationType.SELECT_OBJECT); + dtbDocuLog.setOnlyPkMaster(false); + + dtbDocuLog = entityProcessor.processEntity(dtbDocuLog, multiDBTransactionManager); + + dtbDocuLog.setFlagErrore(false); + dtbDocuLog.setOnlyPkMaster(true); + dtbDocuLog.setOperation(OperationType.UPDATE); + + resultList.add(entityProcessor.processEntity(dtbDocuLog, multiDBTransactionManager, false)); + } + } + + return resultList; + } + + private List parseCSVLineToDTO(List> csvContent) { + List ackList = new ArrayList<>(); + + for (List line : csvContent) { + for (int i = 0; i < line.size(); i++) { + if (i == line.size() - 1){ + ackList.add( + new AckIntesaDTO() + .setFileName(line.get(i)) + ); + } + } + } + + return ackList; } } diff --git a/ems-engine/src/main/java/it/integry/ems/document/export/service/DocumentiIntesaExportService.java b/ems-engine/src/main/java/it/integry/ems/document/export/service/DocumentiIntesaExportService.java index 7a7d9eca91..1c3fffe2cf 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/export/service/DocumentiIntesaExportService.java +++ b/ems-engine/src/main/java/it/integry/ems/document/export/service/DocumentiIntesaExportService.java @@ -17,6 +17,7 @@ import it.integry.ems_model.utility.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.poi.ss.formula.functions.T; +import org.quartz.SimpleTrigger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; @@ -52,7 +53,11 @@ public class DocumentiIntesaExportService { List dtbDocts = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbDoct.class); if (dtbDocts == null || dtbDocts.isEmpty()) throw new Exception("Nessun documento trovato"); - List dateDocumenti = dtbDocts.stream().map(DtbDoct::getDataDoc).collect(Collectors.toList()); + List dataDocList = dtbDocts.stream().map(DtbDoct::getDataDoc).collect(Collectors.toList()); + List numDocList = dtbDocts.stream().map(DtbDoct::getNumDoc).collect(Collectors.toList()); + List serDocList = dtbDocts.stream().map(DtbDoct::getSerDoc).collect(Collectors.toList()); + List codAnagList = dtbDocts.stream().map(DtbDoct::getCodAnag).collect(Collectors.toList()); + List codDtipList = dtbDocts.stream().map(DtbDoct::getCodDtip).collect(Collectors.toList()); Map setup = setupGest.getExportSetupSection(conn, type, format); String piattaforma = setup.get("PIATTAFORMA"); @@ -96,7 +101,11 @@ public class DocumentiIntesaExportService { " ON doc.data_doc = pdf.data_doc AND doc.num_doc = pdf.num_doc AND doc.ser_doc = pdf.ser_doc\n" + " AND doc.cod_anag = pdf.cod_anag AND doc.cod_dtip = pdf.cod_dtip\n" + " CROSS APPLY azienda\n" + - "WHERE doc.data_doc IN (" + UtilityDB.listValueToString(dateDocumenti) + ")\n" + + "WHERE doc.data_doc IN (" + UtilityDB.listValueToString(dataDocList) + ")\n" + + " AND doc.num_doc IN (" + UtilityDB.listValueToString(numDocList) + ")\n" + + " AND doc.ser_doc IN (" + UtilityDB.listValueToString(serDocList) + ")\n" + + " AND doc.cod_dtip IN (" + UtilityDB.listValueToString(codDtipList) + ")\n" + + " AND doc.cod_anag IN (" + UtilityDB.listValueToString(codAnagList) + ")\n" + " AND doc.gestione = 'V'\n" + " AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" + " AND pdf.rn = 1", @@ -124,7 +133,11 @@ public class DocumentiIntesaExportService { " INNER JOIN RankedPDF pdf\n" + " ON doc.data_doc = pdf.data_doc AND doc.num_doc = pdf.num_doc AND doc.ser_doc = pdf.ser_doc\n" + " AND doc.cod_anag = pdf.cod_anag AND doc.cod_dtip = pdf.cod_dtip\n" + - "WHERE doc.data_doc = " + UtilityDB.listValueToString(dateDocumenti) + "\n" + + "WHERE doc.data_doc IN (" + UtilityDB.listValueToString(dataDocList) + ")\n" + + " AND doc.num_doc IN (" + UtilityDB.listValueToString(numDocList) + ")\n" + + " AND doc.ser_doc IN (" + UtilityDB.listValueToString(serDocList) + ")\n" + + " AND doc.cod_dtip IN (" + UtilityDB.listValueToString(codDtipList) + ")\n" + + " AND doc.cod_anag IN (" + UtilityDB.listValueToString(codAnagList) + ")\n" + " AND doc.gestione = 'V'\n" + " AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" + " AND pdf.rn = 1",