Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-06-03 16:33:40 +02:00
5 changed files with 228 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 {
@@ -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<>();
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()) {
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);
}
extractedFiles.add(outputStream.toByteArray());
zipInputStream.closeEntry();
outputStream.close();
while ((len = is.read(buffer)) > 0) {
baos.write(buffer, 0, len);
}
extractedFiles.put(entry.getName(), baos.toByteArray());
}
}
}
zipInputStream.close();
inputStream.close();
return extractedFiles;
}
}

View File

@@ -0,0 +1,98 @@
package it.integry.ems.document.Import.dto;
import java.time.LocalDate;
public class AckIntesaDTO {
private String tipo;
private int IdFile;
private String tipoDoc;
private LocalDate DataFirma;
private String numDoc;
private LocalDate dataDoc;
private String pIva;
private String codFisc;
private String fileName;
public String getTipo() {
return tipo;
}
public AckIntesaDTO setTipo(String tipo) {
this.tipo = tipo;
return this;
}
public int getIdFile() {
return IdFile;
}
public AckIntesaDTO setIdFile(int idFile) {
IdFile = idFile;
return this;
}
public String getTipoDoc() {
return tipoDoc;
}
public AckIntesaDTO setTipoDoc(String tipoDoc) {
this.tipoDoc = tipoDoc;
return this;
}
public LocalDate getDataFirma() {
return DataFirma;
}
public AckIntesaDTO setDataFirma(LocalDate dataFirma) {
DataFirma = dataFirma;
return this;
}
public String getNumDoc() {
return numDoc;
}
public AckIntesaDTO setNumDoc(String numDoc) {
this.numDoc = numDoc;
return this;
}
public LocalDate getDataDoc() {
return dataDoc;
}
public AckIntesaDTO setDataDoc(LocalDate dataDoc) {
this.dataDoc = dataDoc;
return this;
}
public String getpIva() {
return pIva;
}
public AckIntesaDTO setpIva(String pIva) {
this.pIva = pIva;
return this;
}
public String getCodFisc() {
return codFisc;
}
public AckIntesaDTO setCodFisc(String codFisc) {
this.codFisc = codFisc;
return this;
}
public String getFileName() {
return fileName;
}
public AckIntesaDTO setFileName(String fileName) {
this.fileName = fileName;
return this;
}
}

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",