Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit

This commit is contained in:
2025-06-03 16:29:04 +02:00
4 changed files with 130 additions and 23 deletions

View File

@@ -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");

View File

@@ -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<byte[]> extractZipFile(byte[] zipFile) throws Exception {
List<byte[]> extractedFiles = new ArrayList<>();
ByteArrayInputStream inputStream = new ByteArrayInputStream(zipFile);
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
public static Map<String, byte[]> extractZipFile(String zipFilePath) throws IOException {
Map<String, byte[]> 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<? extends ZipEntry> 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;
}
}

View File

@@ -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<EntityBase> importAckIntesa(String type, String format, ImportRequestDTO requestDto) {
return null;
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@Autowired
private EntityProcessor entityProcessor;
public List<EntityBase> importAckIntesa(String type, String format, ImportRequestDTO request) throws Exception {
Map<String, byte[]> fileList = UtilityZip.extractZipFile(request.getPathFile());
List<EntityBase> resultList = new ArrayList<>();
for (Map.Entry<String, byte[]> fileMap : fileList.entrySet()) {
String fileName = fileMap.getKey();
byte[] file = fileMap.getValue();
if (!fileName.contains("ACK2"))
continue;
List<AckIntesaDTO> 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<AckIntesaDTO> parseCSVLineToDTO(List<List<String>> csvContent) {
List<AckIntesaDTO> ackList = new ArrayList<>();
for (List<String> 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;
}
}

View File

@@ -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<DtbDoct> dtbDocts = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbDoct.class);
if (dtbDocts == null || dtbDocts.isEmpty()) throw new Exception("Nessun documento trovato");
List<Date> dateDocumenti = dtbDocts.stream().map(DtbDoct::getDataDoc).collect(Collectors.toList());
List<Date> dataDocList = dtbDocts.stream().map(DtbDoct::getDataDoc).collect(Collectors.toList());
List<Integer> numDocList = dtbDocts.stream().map(DtbDoct::getNumDoc).collect(Collectors.toList());
List<String> serDocList = dtbDocts.stream().map(DtbDoct::getSerDoc).collect(Collectors.toList());
List<String> codAnagList = dtbDocts.stream().map(DtbDoct::getCodAnag).collect(Collectors.toList());
List<String> codDtipList = dtbDocts.stream().map(DtbDoct::getCodDtip).collect(Collectors.toList());
Map<String, String> 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",