Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
2024-09-27 15:19:54 +02:00
11 changed files with 860 additions and 114 deletions

View File

@@ -0,0 +1,35 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20240927121750 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("EXPORT_SCADENZE", "DOCFINANCE", "ATTIVO", "N",
"Inserire S/N per attivare/disattivare il tipo di importazione", false, null, false, false,
false, false, false, null, false, null);
createSetup("EXPORT_SCADENZE", "DOCFINANCE", "EMAIL_FOR_LOG", null,
"Inserire il file l'indirizzo email per inviare il log dell'importazione", false, null, false, false,
false, false, false, null, false, null);
createSetup("EXPORT_SCADENZE", "DOCFINANCE", "GG_CANC_FILE", null,
"Giorni per la cancellazione dei file dalla cartella di appoggio", false, null, false, false,
false, false, false, null, false, null);
createSetup("EXPORT_SCADENZE", "DOCFINANCE", "IMPORT_REST", "S",
"Inserire S/N per attivare/disattivare il salvataggio con i servizi REST", false, null, false, false,
false, false, false, null, false, null);
createSetup("EXPORT_SCADENZE", "DOCFINANCE", "PATH_FILE", null,
"Directory dove vengono salvati i file temporanei, se non è configurata i file saranno salvati in c:\\mlSetupWS\\TEMP_EXPORT", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -430,6 +430,10 @@ public class UtilityDB {
}
public static void executeStatement(Connection connection, String... sqls) throws SQLException {
executeStatement(connection, Arrays.asList(sqls));
}
public static void executeStatement(Connection connection, List<String> sqls) throws SQLException {
Statement statement = connection.createStatement();
for (String sql : sqls) {

View File

@@ -0,0 +1,565 @@
package it.integry.ems.contabil.dto;
import it.integry.ems_model.annotation.DtoField;
import it.integry.ems_model.annotation.SqlField;
public class ScadenzeDocFinanceDTO {
@SqlField(value = "tipo_pagamento")
@DtoField(startPosition = 0, maxLength = 2, fillChar = " ")
private String tipoPagamento;
@SqlField(value = "importo")
@DtoField(startPosition = 2, maxLength = 16, fillChar = " ")
private String importo;
@SqlField(value = "divisa_scadenza")
@DtoField(startPosition = 18, maxLength = 5, fillChar = " ")
private String divisaScadenza;
@SqlField(value = "cambio")
@DtoField(startPosition = 23, maxLength = 9, fillChar = " ")
private String cambio;
@SqlField(value = "controvalore")
@DtoField(startPosition = 32, maxLength = 16, fillChar = " ")
private String controvalore;
@SqlField(value = "document_type")
@DtoField(startPosition = 48, maxLength = 2, fillChar = " ")
private String documentType;
@SqlField(value = "type")
@DtoField(startPosition = 50, maxLength = 5, fillChar = " ")
private String type;
@SqlField(value = "raiting")
@DtoField(startPosition = 55, maxLength = 2, fillChar = " ")
private String rating;
@SqlField(value = "data_scadenza")
@DtoField(startPosition = 57, maxLength = 8, fillChar = " ")
private String dataScadenza;
@SqlField(value = "data_valuta")
@DtoField(startPosition = 65, maxLength = 8, fillChar = " ")
private String dataValuta;
@SqlField(value = "banca")
@DtoField(startPosition = 73, maxLength = 8, fillChar = " ")
private String banca;
@SqlField(value = "rbn")
@DtoField(startPosition = 81, maxLength = 4, fillChar = " ")
private String rbn;
@SqlField(value = "bloccata")
@DtoField(startPosition = 85, maxLength = 1, fillChar = " ")
private String bloccata;
@SqlField(value = "voce")
@DtoField(startPosition = 86, maxLength = 6, fillChar = " ")
private String voce;
@SqlField(value = "piano_dei_conti")
@DtoField(startPosition = 92, maxLength = 16, fillChar = " ")
private String pianoDeiConti;
@SqlField(value = "descrizione")
@DtoField(startPosition = 108, maxLength = 40, fillChar = " ")
private String descrizione;
@SqlField(value = "ABI")
@DtoField(startPosition = 148, maxLength = 5, fillChar = " ")
private String abi;
@SqlField(value = "CAB")
@DtoField(startPosition = 153, maxLength = 5, fillChar = " ")
private String cab;
@SqlField(value = "blank")
@DtoField(startPosition = 158, maxLength = 10, fillChar = " ")
private String blank;
@SqlField(value = "provenienza")
@DtoField(startPosition = 168, maxLength = 2, fillChar = " ")
private String provenienza;
@SqlField(value = "sezione")
@DtoField(startPosition = 170, maxLength = 6, fillChar = " ")
private String sezione;
@SqlField(value = "cambio_della_gestione")
@DtoField(startPosition = 176, maxLength = 9, fillChar = " ")
private String cambioDellaGestione;
@SqlField(value = "numero_doc_origine")
@DtoField(startPosition = 185, maxLength = 12, fillChar = " ")
private String numeroDocOrigine;
@SqlField(value = "chiave_coge")
@DtoField(startPosition = 197, maxLength = 26, fillChar = " ")
private String chiaveCoge;
@SqlField(value = "azienda")
@DtoField(startPosition = 223, maxLength = 10, fillChar = " ")
private String azienda;
@SqlField(value = "fleg_raggruppa_effetti")
@DtoField(startPosition = 233, maxLength = 1, fillChar = " ")
private String flegRaggruppaEffetti;
@SqlField(value = "numero_cc")
@DtoField(startPosition = 234, maxLength = 12, fillChar = " ")
private String numeroCc;
@SqlField(value = "cin")
@DtoField(startPosition = 246, maxLength = 1, fillChar = " ")
private String cin;
@SqlField(value = "piano_dei_conti_di_pagamento")
@DtoField(startPosition = 247, maxLength = 16, fillChar = " ")
private String pianoDeiContiDiPagamento;
@SqlField(value = "paese")
@DtoField(startPosition = 263, maxLength = 2, fillChar = " ")
private String paese;
@SqlField(value = "chk_paese")
@DtoField(startPosition = 265, maxLength = 2, fillChar = " ")
private String chkPaese;
@SqlField(value = "data_documento")
@DtoField(startPosition = 267, maxLength = 8, fillChar = " ")
private String dataDocumento;
@SqlField(value = "note")
@DtoField(startPosition = 275, maxLength = 80, fillChar = " ")
private String note;
@SqlField(value = "cod_bic")
@DtoField(startPosition = 355, maxLength = 11, fillChar = " ")
private String codBic;
@SqlField(value = "iban")
@DtoField(startPosition = 366, maxLength = 34, fillChar = " ")
private String iban;
@SqlField(value = "tipo_codice")
@DtoField(startPosition = 400, maxLength = 1, fillChar = " ")
private String tipoCodice;
@SqlField(value = "codice_riferimento")
@DtoField(startPosition = 401, maxLength = 16, fillChar = " ")
private String codiceRiferimento;
@SqlField(value = "stato_conf")
@DtoField(startPosition = 417, maxLength = 1, fillChar = " ")
private String stato_conf;
@SqlField(value = "banca_fin_conf")
@DtoField(startPosition = 418, maxLength = 8, fillChar = " ")
private String bancaFinConf;
@SqlField(value = "rbn_fin_conf")
@DtoField(startPosition = 426, maxLength = 4, fillChar = " ")
private String rbnFinCnf;
@SqlField(value = "banca_estera")
@DtoField(startPosition = 430, maxLength = 35, fillChar = " ")
private String bancaEstera;
@SqlField(value = "sportello_banca_estera")
@DtoField(startPosition = 465, maxLength = 35, fillChar = " ")
private String sportelloBancaEstera;
@SqlField(value = "codice_mandato")
@DtoField(startPosition = 500, maxLength = 35, fillChar = " ")
private String codiceMandato;
public String getTipoPagamento() {
return tipoPagamento;
}
public ScadenzeDocFinanceDTO setTipoPagamento(String tipoPagamento) {
this.tipoPagamento = tipoPagamento;
return this;
}
public String getImporto() {
return importo;
}
public ScadenzeDocFinanceDTO setImporto(String importo) {
this.importo = importo;
return this;
}
public String getDivisaScadenza() {
return divisaScadenza;
}
public ScadenzeDocFinanceDTO setDivisaScadenza(String divisaScadenza) {
this.divisaScadenza = divisaScadenza;
return this;
}
public String getCambio() {
return cambio;
}
public ScadenzeDocFinanceDTO setCambio(String cambio) {
this.cambio = cambio;
return this;
}
public String getControvalore() {
return controvalore;
}
public ScadenzeDocFinanceDTO setControvalore(String controvalore) {
this.controvalore = controvalore;
return this;
}
public String getDocumentType() {
return documentType;
}
public ScadenzeDocFinanceDTO setDocumentType(String documentType) {
this.documentType = documentType;
return this;
}
public String getType() {
return type;
}
public ScadenzeDocFinanceDTO setType(String type) {
this.type = type;
return this;
}
public String getRating() {
return rating;
}
public ScadenzeDocFinanceDTO setRating(String rating) {
this.rating = rating;
return this;
}
public String getDataScadenza() {
return dataScadenza;
}
public ScadenzeDocFinanceDTO setDataScadenza(String dataScadenza) {
this.dataScadenza = dataScadenza;
return this;
}
public String getDataValuta() {
return dataValuta;
}
public ScadenzeDocFinanceDTO setDataValuta(String dataValuta) {
this.dataValuta = dataValuta;
return this;
}
public String getBanca() {
return banca;
}
public ScadenzeDocFinanceDTO setBanca(String banca) {
this.banca = banca;
return this;
}
public String getRbn() {
return rbn;
}
public ScadenzeDocFinanceDTO setRbn(String rbn) {
this.rbn = rbn;
return this;
}
public String getBloccata() {
return bloccata;
}
public ScadenzeDocFinanceDTO setBloccata(String bloccata) {
this.bloccata = bloccata;
return this;
}
public String getVoce() {
return voce;
}
public ScadenzeDocFinanceDTO setVoce(String voce) {
this.voce = voce;
return this;
}
public String getPianoDeiConti() {
return pianoDeiConti;
}
public ScadenzeDocFinanceDTO setPianoDeiConti(String pianoDeiConti) {
this.pianoDeiConti = pianoDeiConti;
return this;
}
public String getDescrizione() {
return descrizione;
}
public ScadenzeDocFinanceDTO setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public String getAbi() {
return abi;
}
public ScadenzeDocFinanceDTO setAbi(String abi) {
this.abi = abi;
return this;
}
public String getCab() {
return cab;
}
public ScadenzeDocFinanceDTO setCab(String cab) {
this.cab = cab;
return this;
}
public String getBlank() {
return blank;
}
public ScadenzeDocFinanceDTO setBlank(String blank) {
this.blank = blank;
return this;
}
public String getProvenienza() {
return provenienza;
}
public ScadenzeDocFinanceDTO setProvenienza(String provenienza) {
this.provenienza = provenienza;
return this;
}
public String getSezione() {
return sezione;
}
public ScadenzeDocFinanceDTO setSezione(String sezione) {
this.sezione = sezione;
return this;
}
public String getCambioDellaGestione() {
return cambioDellaGestione;
}
public ScadenzeDocFinanceDTO setCambioDellaGestione(String cambioDellaGestione) {
this.cambioDellaGestione = cambioDellaGestione;
return this;
}
public String getNumeroDocOrigine() {
return numeroDocOrigine;
}
public ScadenzeDocFinanceDTO setNumeroDocOrigine(String numeroDocOrigine) {
this.numeroDocOrigine = numeroDocOrigine;
return this;
}
public String getChiaveCoge() {
return chiaveCoge;
}
public ScadenzeDocFinanceDTO setChiaveCoge(String chiaveCoge) {
this.chiaveCoge = chiaveCoge;
return this;
}
public String getAzienda() {
return azienda;
}
public ScadenzeDocFinanceDTO setAzienda(String azienda) {
this.azienda = azienda;
return this;
}
public String getFlegRaggruppaEffetti() {
return flegRaggruppaEffetti;
}
public ScadenzeDocFinanceDTO setFlegRaggruppaEffetti(String flegRaggruppaEffetti) {
this.flegRaggruppaEffetti = flegRaggruppaEffetti;
return this;
}
public String getNumeroCc() {
return numeroCc;
}
public ScadenzeDocFinanceDTO setNumeroCc(String numeroCc) {
this.numeroCc = numeroCc;
return this;
}
public String getCin() {
return cin;
}
public ScadenzeDocFinanceDTO setCin(String cin) {
this.cin = cin;
return this;
}
public String getPianoDeiContiDiPagamento() {
return pianoDeiContiDiPagamento;
}
public ScadenzeDocFinanceDTO setPianoDeiContiDiPagamento(String pianoDeiContiDiPagamento) {
this.pianoDeiContiDiPagamento = pianoDeiContiDiPagamento;
return this;
}
public String getPaese() {
return paese;
}
public ScadenzeDocFinanceDTO setPaese(String paese) {
this.paese = paese;
return this;
}
public String getChkPaese() {
return chkPaese;
}
public ScadenzeDocFinanceDTO setChkPaese(String chkPaese) {
this.chkPaese = chkPaese;
return this;
}
public String getDataDocumento() {
return dataDocumento;
}
public ScadenzeDocFinanceDTO setDataDocumento(String dataDocumento) {
this.dataDocumento = dataDocumento;
return this;
}
public String getNote() {
return note;
}
public ScadenzeDocFinanceDTO setNote(String note) {
this.note = note;
return this;
}
public String getCodBic() {
return codBic;
}
public ScadenzeDocFinanceDTO setCodBic(String codBic) {
this.codBic = codBic;
return this;
}
public String getIban() {
return iban;
}
public ScadenzeDocFinanceDTO setIban(String iban) {
this.iban = iban;
return this;
}
public String getTipoCodice() {
return tipoCodice;
}
public ScadenzeDocFinanceDTO setTipoCodice(String tipoCodice) {
this.tipoCodice = tipoCodice;
return this;
}
public String getCodiceRiferimento() {
return codiceRiferimento;
}
public ScadenzeDocFinanceDTO setCodiceRiferimento(String codiceRiferimento) {
this.codiceRiferimento = codiceRiferimento;
return this;
}
public String getStato_conf() {
return stato_conf;
}
public ScadenzeDocFinanceDTO setStato_conf(String stato_conf) {
this.stato_conf = stato_conf;
return this;
}
public String getBancaFinConf() {
return bancaFinConf;
}
public ScadenzeDocFinanceDTO setBancaFinConf(String bancaFinConf) {
this.bancaFinConf = bancaFinConf;
return this;
}
public String getRbnFinCnf() {
return rbnFinCnf;
}
public ScadenzeDocFinanceDTO setRbnFinCnf(String rbnFinCnf) {
this.rbnFinCnf = rbnFinCnf;
return this;
}
public String getBancaEstera() {
return bancaEstera;
}
public ScadenzeDocFinanceDTO setBancaEstera(String bancaEstera) {
this.bancaEstera = bancaEstera;
return this;
}
public String getSportelloBancaEstera() {
return sportelloBancaEstera;
}
public ScadenzeDocFinanceDTO setSportelloBancaEstera(String sportelloBancaEstera) {
this.sportelloBancaEstera = sportelloBancaEstera;
return this;
}
public String getCodiceMandato() {
return codiceMandato;
}
public ScadenzeDocFinanceDTO setCodiceMandato(String codiceMandato) {
this.codiceMandato = codiceMandato;
return this;
}
}

View File

@@ -1,8 +1,10 @@
package it.integry.ems.contabil.export;
import it.integry.ems.contabil.export.services.ScadenzeExporterService;
import it.integry.ems.export.base.BaseEntityExporter;
import it.integry.ems.export.base.EntityExportResponse;
import it.integry.ems.export.base.IEntityExporter;
import org.springframework.web.context.ContextLoader;
public class ScadenzeExporter extends BaseEntityExporter implements IEntityExporter {
@@ -12,10 +14,12 @@ public class ScadenzeExporter extends BaseEntityExporter implements IEntityExpor
ScadenzeExporterFormat format = ScadenzeExporterFormat.fromString(super.format);
EntityExportResponse entityExportResponse = null;
ScadenzeExporterService scadenzeExporterService = ContextLoader.getCurrentWebApplicationContext().getBean(ScadenzeExporterService.class);
if (format != null) {
switch (format) {
case DOCFINANCE:
entityExportResponse = scadenzeExporterService.exportDocFinance(super.type, super.format);
break;
default:
throw new Exception("Tipo " + format + " non supportato");

View File

@@ -0,0 +1,117 @@
package it.integry.ems.contabil.export.services;
import it.integry.ems.contabil.dto.ScadenzeDocFinanceDTO;
import it.integry.ems.export.base.EntityExportResponse;
import it.integry.ems.file_formatter.txt.TxtMapper;
import it.integry.ems.response.FileItem;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.utility.UtilityDB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@Scope("request")
public class ScadenzeExporterService {
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
public EntityExportResponse<List<FileItem>> exportDocFinance(String type, String format) throws Exception {
EntityExportResponse<List<FileItem>> entityExportResponse = new EntityExportResponse<>();
entityExportResponse.setResponse(new ArrayList<>());
String sql = "SELECT ISNULL(gtb_tipi_paga_intercode.intercode, ctb_scad.cod_paga) /*leggere da tabella di trascodifica*/ AS 'tipo_pagamento'\n" +
" , REPLACE(CAST(\n" +
" FORMAT(\n" +
" (ctb_scad.imp_dare + ctb_scad.imp_avere),\n" +
" IIF(ctb_part.tipo_partita = 0, '-', '+') + '00000000000.000'\n" +
" ) AS VARCHAR), '.',\n" +
" ',') AS 'importo'\n" +
" , gtb_divi.cod_divi AS 'divisa_scadenza'\n" +
" , REPLACE(CAST(FORMAT(ctb_part.cambio, '00000.000') AS VARCHAR), '.',\n" +
" ',') AS 'cambio'\n" +
" , REPLACE(CAST(\n" +
" FORMAT(\n" +
" ((ctb_scad.imp_dare + ctb_scad.imp_avere) / ctb_part.cambio),\n" +
" IIF(ctb_part.tipo_partita = 0, '-', '+') + '00000000000.000'\n" +
" ) AS VARCHAR), '.',\n" +
" ',') AS 'controvalore'\n" +
" , '00001' AS 'type'\n" +
" , 'N' AS 'raiting'\n" +
" , REPLACE(CONVERT(VARCHAR(10), ctb_scad.data_scad, 103), '/', '') AS 'data_scadenza'\n" +
" , REPLACE(CONVERT(VARCHAR(10), ctb_scad.data_scad, 103), '/', '') AS 'data_valuta'\n" +
" , LEFT(gtb_banc_azi_intercode.intercode, 8) AS 'banca'\n" +
" , RIGHT(gtb_banc_azi_intercode.intercode, 4) AS 'rbn'\n" +
" , 'N' AS 'bloccata'\n" +
" , IIF(ctb_part.tipo_anag = 'F', '0201', '0101') AS 'voce'\n" +
" , gtb_anag.diacod AS 'piano_dei_conti'\n" +
" , gtb_anag.rag_soc AS 'descrizione'\n" +
" , ctb_part.cod_abi AS 'ABI'\n" +
" , ctb_part.cod_cab AS 'CAB'\n" +
" , '' AS 'blank'\n" +
" , 'CO' AS 'provenienza'\n" +
" , '' AS 'sezione'\n" +
" , '' AS 'cambio_della_gestione'\n" +
" , CAST(ctb_part.num_doc AS VARCHAR) AS 'numero_doc_origine'\n" +
" , ISNULL(CTB_SCAD.INTERCODE,\n" +
" RIGHT(CAST(ctb_part.anno_part AS VARCHAR), 2) +\n" +
" IIF(ctb_part.tipo_anag = 'c', FORMAT(ctb_part.num_doc, REPLICATE('0', 5)),\n" +
" CAST(ctb_part.num_doc AS VARCHAR) + SPACE(5 - LEN(CAST(ctb_part.num_doc AS VARCHAR)))) +\n" +
" FORMAT(ctb_scad.id_riga, '000') +\n" +
" FORMAT(DENSE_RANK() OVER (PARTITION BY ctb_part.cod_anag, ctb_part.num_doc ORDER BY ctb_scad.data_doc),\n" +
" '000')) AS 'chiave_coge'\n" +
" , 'ROSSOGARGA' AS 'azienda'\n" +
" , ctb_part.iban AS 'numero_cc'\n" +
" , SUBSTRING(ctb_part.iban, 5, 1) AS 'cin'\n" +
" , LEFT(ctb_part.iban, 2) AS 'paese'\n" +
" , SUBSTRING(ctb_part.iban, 3, 2) AS 'chk_paese'\n" +
" , REPLACE(CONVERT(VARCHAR(10), ctb_part.data_doc, 103), '/', '') AS 'data_documento'\n" +
" , ctb_parr.des_agg AS 'note'\n" +
" , IIF(vtb_clie.cod_anag IS NULL, atb_forn.cod_bic, vtb_clie.cod_bic) AS 'cod_bic'\n" +
" , ctb_part.iban\n" +
"FROM ctb_part\n" +
" INNER JOIN ctb_scad ON ctb_part.tipo_anag = ctb_scad.tipo_anag AND ctb_part.cod_anag = ctb_scad.cod_anag AND\n" +
" ctb_part.anno_part = ctb_scad.anno_part AND ctb_part.ser_doc = ctb_scad.ser_doc AND\n" +
" ctb_part.num_doc = ctb_scad.num_doc\n" +
" INNER JOIN gtb_anag ON ctb_part.cod_anag = gtb_anag.cod_anag\n" +
" INNER JOIN gtb_paga ON ctb_scad.cod_paga = gtb_paga.cod_paga\n" +
" LEFT OUTER JOIN gtb_tipi_paga_intercode ON gtb_paga.tipo_paga = gtb_tipi_paga_intercode.tipo_paga\n" +
" LEFT OUTER JOIN gtb_banc ON ctb_part.cod_banc = gtb_banc.cod_banc\n" +
" LEFT OUTER JOIN gtb_banc_azi ON gtb_banc.cod_banc = gtb_banc_azi.cod_banc\n" +
" LEFT OUTER JOIN gtb_banc_azi_intercode ON gtb_banc_azi.cod_banc_azi = gtb_banc_azi_intercode.cod_banc_azi AND\n" +
" gtb_banc_azi_intercode.formato = 'docfi'\n" +
" LEFT OUTER JOIN vtb_clie ON ctb_part.cod_anag = vtb_clie.cod_anag AND ctb_part.tipo_anag = 'C'\n" +
" LEFT OUTER JOIN atb_forn ON ctb_part.cod_anag = atb_forn.cod_anag AND ctb_part.tipo_anag = 'F'\n" +
" INNER JOIN gtb_divi ON ctb_part.cod_divi = gtb_divi.cod_divi\n" +
" OUTER APPLY (SELECT TOP 1 ctb_parr.*\n" +
" FROM ctb_parr\n" +
" INNER JOIN ctb_caus\n" +
" ON ctb_parr.cod_ccau = ctb_caus.cod_ccau AND ctb_caus.azione_su_partita = 0\n" +
" WHERE ctb_part.tipo_anag = ctb_parr.tipo_anag\n" +
" AND ctb_part.cod_anag = ctb_parr.cod_anag\n" +
" AND ctb_part.anno_part = ctb_parr.anno_part\n" +
" AND ctb_part.ser_doc = ctb_parr.ser_doc\n" +
" AND ctb_part.num_doc = ctb_parr.num_doc\n" +
" ORDER BY ctb_parr.data_cmov) ctb_parr\n" +
"WHERE ctb_scad.data_pag IS NULL";
List<ScadenzeDocFinanceDTO> scadenzeDocFinance = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, ScadenzeDocFinanceDTO.class);
TxtMapper<ScadenzeDocFinanceDTO> txtMapper = new TxtMapper<ScadenzeDocFinanceDTO>()
.setFieldsSplitChar("");
String fileContent = txtMapper.serialize(scadenzeDocFinance);
if (fileContent != null) {
String filename = "scadenze.txt";
FileItem returnFile = new FileItem(filename, fileContent, "txt");
entityExportResponse.getResponse().add(returnFile);
return entityExportResponse;
}
return null;
}
}

View File

@@ -6,9 +6,11 @@ import com.annimon.stream.Stream;
import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
import it.integry.ems.production.dto.MRP.*;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.entity.CtbScad;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.utility.*;
import it.integry.ems_model.utility.UtilityBigDecimal;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityHashMap;
import it.integry.ems_model.utility.UtilityString;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -104,7 +106,8 @@ public class MrpDailyMaterialReqService {
int id = 0;
logger.debug(MrpDailyMaterialReqService.class.getSimpleName() + " - articoli caricati: " + datiArt.size());
Map<String, List<MrpDailyMaterialReqDetDTO>> listArticoli = Stream.of(mrpDailyMaterialReqDetDTO).collect(Collectors.groupingBy(MrpDailyMaterialReqDetDTO::getCodMart));
Map<String, List<MrpDailyMaterialReqDetDTO>> listArticoli = Stream.of(mrpDailyMaterialReqDetDTO)
.collect(Collectors.groupingBy(MrpDailyMaterialReqDetDTO::getCodMart));
for (MrpDailyMaterialReqDTO art : datiArt) {
boolean inclusiSospesi = getSetupIncluseSospesi(art.getCodMgrp(), setupGruppi);

View File

@@ -70,7 +70,6 @@ public class ExchangeColliImportService {
MultiDBTransactionManager exchangeMultiDb,
RequestDataDTO requestDataDTO,
ExchangeImportSchemaManagerService.SchemaType colliSchemaType) throws Exception {
boolean useTempTable = true;
try {
@@ -91,88 +90,108 @@ public class ExchangeColliImportService {
testataTableName = null;
}
List<MtbColt> exchangeImportedMtbColts = importColliLavorazione(
exchangeMultiDb.getPrimaryConnection(),
UtilityLocalDate.getNow().minusWeeks(1),
UtilityLocalDate.getNow(),
true, false, testataTableName, righeTableName);
exchangeImportDataManagerService.prepareData(exchangeMultiDb.getPrimaryConnection(), useTempTable, exchangeImportSchemaManagerService.getTablesBySchemaType(colliSchemaType));
List<MtbColt> exchangeUpdatedMtbColts = importColliLavorazione(
exchangeMultiDb.getPrimaryConnection(),
UtilityLocalDate.getNow().minusWeeks(1),
UtilityLocalDate.getNow(),
false, useTempTable, testataTableName, righeTableName);
AtomicInteger dataCount = new AtomicInteger(0);
AtomicInteger importedCounter = new AtomicInteger(0);
List<EquatableEntityInterface> importedMtbColts = exchangeImportedMtbColts.stream()
.map(x -> (EquatableEntityInterface) x)
.collect(Collectors.toList());
LocalDate startDate = LocalDate.of(2024, 7, 1);
List<EquatableEntityInterface> updatedMtbColts = exchangeUpdatedMtbColts.stream()
.map(x -> (EquatableEntityInterface) x)
.collect(Collectors.toList());
Result<Object> firstErrorObjectIfPresent = null;
List<EquatableEntityInterface> allMtbColts = exchangeImportDataManagerService
.runSync(MtbColt.class, importedMtbColts, updatedMtbColts);
while (startDate.isBefore(UtilityLocalDate.getNow())) {
allMtbColts.forEach(x -> {
x.setOperation(x.getOperation() == OperationType.INSERT ? OperationType.INSERT_OR_UPDATE : x.getOperation());
((MtbColt) x).getMtbColr().forEach(y -> y.setOperation(y.getOperation() == OperationType.INSERT ? OperationType.INSERT_OR_UPDATE : y.getOperation()));
});
final LocalDate tempStartDate = startDate;
final LocalDate tempEndDate = startDate;
startDate = startDate.plusDays(1);
AtomicInteger importedCounter = new AtomicInteger();
List<MtbColt> exchangeImportedMtbColts = importColliLavorazione(
exchangeMultiDb.getPrimaryConnection(),
tempStartDate,
tempEndDate,
true, false, testataTableName, righeTableName);
List<RunnableThrowable> calls = new ArrayList<>();
for (EquatableEntityInterface dataToSave : allMtbColts) {
List<MtbColt> exchangeUpdatedMtbColts = importColliLavorazione(
exchangeMultiDb.getPrimaryConnection(),
tempStartDate,
tempEndDate,
false, useTempTable, testataTableName, righeTableName);
calls.add(() -> {
List<EquatableEntityInterface> importedMtbColts = exchangeImportedMtbColts.stream()
.map(x -> (EquatableEntityInterface) x)
.collect(Collectors.toList());
logger.debug("Importati {} colli di {}", importedCounter.incrementAndGet(), allMtbColts.size());
try (MultiDBTransactionManager exchangeMultiDbThread = new MultiDBTransactionManager(exchangeMultiDb.getPrimaryDatasource().getProfile(), false);
MultiDBTransactionManager internalMultiDbThread = new MultiDBTransactionManager(internalMultiDb.getPrimaryDatasource().getProfile(), false)) {
List<EquatableEntityInterface> updatedMtbColts = exchangeUpdatedMtbColts.stream()
.map(x -> (EquatableEntityInterface) x)
.collect(Collectors.toList());
MtbColt mtbColtToSave = (MtbColt) dataToSave;
if (mtbColtToSave.hasDocument() && mtbColtToSave.getOperation() == OperationType.DELETE) {
MtbColt mtbColtRemoveDocument = (MtbColt) mtbColtToSave.clone();
mtbColtRemoveDocument.setMtbColr(new ArrayList<>())
.setCodDtip(EmsRestConstants.NULL)
.setSerDoc(EmsRestConstants.NULL)
.setDataDoc(EmsRestConstants.DATE_NULL)
.setOperation(OperationType.UPDATE);
List<EquatableEntityInterface> allMtbColts = exchangeImportDataManagerService
.runSync(MtbColt.class, importedMtbColts, updatedMtbColts);
entityProcessor.processEntity(mtbColtRemoveDocument, true, true, ROSSOGARGANO_EXCHANGE_USER, internalMultiDbThread, requestDataDTO);
dataCount.addAndGet(allMtbColts.size());
mtbColtToSave.setCodDtip(EmsRestConstants.NULL)
.setSerDoc(EmsRestConstants.NULL)
.setDataDoc(EmsRestConstants.DATE_NULL);
}
entityProcessor.processEntity(mtbColtToSave, true, true, ROSSOGARGANO_EXCHANGE_USER, internalMultiDbThread, requestDataDTO);
singleUpdateImported(exchangeMultiDbThread.getPrimaryConnection(), mtbColtToSave, testataTableName, useTempTable);
singleUpdateImported(exchangeMultiDbThread.getPrimaryConnection(), mtbColtToSave, righeTableName, useTempTable);
internalMultiDbThread.commitAll();
exchangeMultiDbThread.commitAll();
} catch (Exception ex) {
MtbColt collo = (MtbColt) dataToSave;
logger.error("Errore durante l'importazione del collo [num: " + collo.getNumCollo() + ", " +
"data: " + UtilityLocalDate.formatDate(collo.getDataCollo(), CommonConstants.DATE_FORMAT_DMY) + ", " +
"serie: " + collo.getSerCollo() + ", " +
"gestione: " + collo.getGestione() + "]",
ex);
throw ex;
}
allMtbColts.forEach(x -> {
x.setOperation(x.getOperation() == OperationType.INSERT ? OperationType.INSERT_OR_UPDATE : x.getOperation());
((MtbColt) x).getMtbColr().forEach(y -> y.setOperation(y.getOperation() == OperationType.INSERT ? OperationType.INSERT_OR_UPDATE : y.getOperation()));
});
List<RunnableThrowable> calls = new ArrayList<>();
for (EquatableEntityInterface dataToSave : allMtbColts) {
calls.add(() -> {
logger.debug("Importati {} colli di {}", importedCounter.incrementAndGet(), dataCount);
try (MultiDBTransactionManager exchangeMultiDbThread = new MultiDBTransactionManager(exchangeMultiDb.getPrimaryDatasource().getProfile(), false);
MultiDBTransactionManager internalMultiDbThread = new MultiDBTransactionManager(internalMultiDb.getPrimaryDatasource().getProfile(), false)) {
MtbColt mtbColtToSave = (MtbColt) dataToSave;
if (mtbColtToSave.hasDocument() && mtbColtToSave.getOperation() == OperationType.DELETE) {
MtbColt mtbColtRemoveDocument = (MtbColt) mtbColtToSave.clone();
mtbColtRemoveDocument.setMtbColr(new ArrayList<>())
.setCodDtip(EmsRestConstants.NULL)
.setSerDoc(EmsRestConstants.NULL)
.setDataDoc(EmsRestConstants.DATE_NULL)
.setNumDoc(EmsRestConstants.INTEGER_NULL)
.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(mtbColtRemoveDocument, true, true, ROSSOGARGANO_EXCHANGE_USER, internalMultiDbThread, requestDataDTO);
mtbColtToSave.setCodDtip(null)
.setSerDoc(null)
.setDataDoc(null)
.setNumDoc(null);
}
entityProcessor.processEntity(mtbColtToSave, true, true, ROSSOGARGANO_EXCHANGE_USER, internalMultiDbThread, requestDataDTO);
singleUpdateImported(exchangeMultiDbThread.getPrimaryConnection(), mtbColtToSave, testataTableName, useTempTable);
singleUpdateImported(exchangeMultiDbThread.getPrimaryConnection(), mtbColtToSave, righeTableName, useTempTable);
internalMultiDbThread.commitAll();
exchangeMultiDbThread.commitAll();
} catch (Exception ex) {
MtbColt collo = (MtbColt) dataToSave;
logger.error("Errore durante l'importazione del collo [num: " + collo.getNumCollo() + ", " +
"data: " + UtilityLocalDate.formatDate(collo.getDataCollo(), CommonConstants.DATE_FORMAT_DMY) + ", " +
"serie: " + collo.getSerCollo() + ", " +
"gestione: " + collo.getGestione() + "]",
ex);
throw ex;
}
});
}
final ArrayList<Result<Object>> results = UtilityThread.executeParallel(calls);
firstErrorObjectIfPresent = results.stream()
.filter(x -> x instanceof Result.Error)
.findFirst()
.orElse(null);
}
final ArrayList<Result<Object>> results = UtilityThread.executeParallel(calls);
final Result<Object> firstErrorObjectIfPresent = results.stream()
.filter(x -> x instanceof Result.Error)
.findFirst()
.orElse(null);
if (firstErrorObjectIfPresent != null) throw ((Result.Error) firstErrorObjectIfPresent).getError();
} finally {
if (useTempTable)
@@ -181,7 +200,8 @@ public class ExchangeColliImportService {
}
private List<MtbColt> importColliLavorazione(Connection connection,
LocalDate minDate, LocalDate maxDate, boolean retrieveAlreadyImported, boolean useTempTable, String testataTableName, String righeTableName) throws Exception {
LocalDate minDate, LocalDate maxDate, boolean retrieveAlreadyImported, boolean useTempTable, String
testataTableName, String righeTableName) throws Exception {
String mtbColtLavOriginalName = testataTableName;
String mtbColtLavTableName = mtbColtLavOriginalName + (useTempTable ? "_tmp" : "");
@@ -189,16 +209,6 @@ public class ExchangeColliImportService {
String mtbColrLavTableName = mtbColrLavOriginalName + (useTempTable ? "_tmp" : "");
if (useTempTable) {
UtilityDB.executeStatement(connection,
"INSERT INTO " + mtbColtLavTableName +
" SELECT * FROM " + mtbColtLavOriginalName,
"INSERT INTO " + mtbColrLavTableName +
" SELECT * FROM " + mtbColrLavOriginalName
);
}
final List<MtbColt> mtbColtLav = exchangeImportDataManagerService.retrieveDataFromExchange(connection, MtbColt.class,
mtbColtLavTableName, Query.format("data_collo BETWEEN {} AND {}", minDate, maxDate), retrieveAlreadyImported);
@@ -222,7 +232,8 @@ public class ExchangeColliImportService {
}
private void singleUpdateImported(Connection connection, MtbColt importedDataKey, String tableName, boolean useTempTable) throws Exception {
private void singleUpdateImported(Connection connection, MtbColt importedDataKey, String tableName,
boolean useTempTable) throws Exception {
final HashMap<String, Object> importedKey = new HashMap<String, Object>() {{
put("data_collo", importedDataKey.getDataCollo());
put("ser_collo", importedDataKey.getSerCollo());
@@ -234,7 +245,8 @@ public class ExchangeColliImportService {
}
public List<CertificatiSinfoOneDTO> getCertificati(String profileDb, String codAnag, LocalDate dataCert, String codMart, String codVdes, String partitaMag) throws Exception {
public List<CertificatiSinfoOneDTO> getCertificati(String profileDb, String codAnag, LocalDate dataCert, String
codMart, String codVdes, String partitaMag) throws Exception {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileDb)) {

View File

@@ -12,10 +12,8 @@ import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.sql.SQLException;
import java.util.*;
import java.util.stream.Collectors;
@SuppressWarnings({"rawtypes", "unchecked"})
@@ -23,6 +21,20 @@ import java.util.stream.Collectors;
public class ExchangeImportDataManagerService {
public void prepareData(Connection connection, boolean useTempTable, String... tables) throws SQLException {
prepareData(connection, useTempTable, Arrays.asList(tables));
}
public void prepareData(Connection connection, boolean useTempTable, List<String> tables) throws SQLException {
if (useTempTable) {
final List<String> sqls = tables.stream()
.map(x -> String.format("INSERT INTO %s_tmp SELECT * FROM %s", x, x))
.collect(Collectors.toList());
UtilityDB.executeStatement(connection, sqls);
}
}
public <T extends EquatableEntityInterface> List<T> retrieveDataFromExchange(Connection connection,
Class<T> clazz,
String tableName,

View File

@@ -73,6 +73,10 @@ public class ExchangeImportSchemaManagerService {
put(SchemaType.ValorizzazioneCertificati, Collections.singletonList("valorizzazione_certificati"));
}};
public List<String> getTablesBySchemaType(SchemaType schemaType) {
return schemaToTableBinding.get(schemaType);
}
public void syncSchema(Connection connection, SchemaType schemaType, boolean createTempTablesToo) throws Exception {
SQLServerDBSchemaManager sqlServerDBSchemaManager = new SQLServerDBSchemaManager(connection);

View File

@@ -1,6 +1,5 @@
package it.integry.ems.system.exchange.service;
import it.integry.ems.expansion.RunnableThrowable;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.production.agribook.AgribookFieldService;
import it.integry.ems.production.agribook.model.AgribookNewFieldRequestDTO;
@@ -23,7 +22,10 @@ import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.time.LocalDate;
import java.util.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@@ -50,11 +52,15 @@ public class ExchangeOrdiniImportService {
public void importOrdiniLavorazione(MultiDBTransactionManager internalMultiDb, MultiDBTransactionManager exchangeMultiDb, RequestDataDTO requestDataDTO) throws Exception {
ExchangeImportSchemaManagerService.SchemaType schemaType = ExchangeImportSchemaManagerService.SchemaType.OrdiniLavorazione;
boolean useTempTable = true;
try {
exchangeImportSchemaManagerService.syncSchema(exchangeMultiDb.getPrimaryConnection(), ExchangeImportSchemaManagerService.SchemaType.OrdiniLavorazione, useTempTable);
exchangeImportSchemaManagerService.syncSchema(exchangeMultiDb.getPrimaryConnection(), schemaType, useTempTable);
exchangeImportDataManagerService.prepareData(exchangeMultiDb.getPrimaryConnection(), useTempTable,
exchangeImportSchemaManagerService.getTablesBySchemaType(schemaType));
final List<DtbOrdt> exchangeImportedMtbColts = importOrdiniLavorazione(
exchangeMultiDb.getPrimaryConnection(),
@@ -93,17 +99,13 @@ public class ExchangeOrdiniImportService {
);
final Exception[] firstExceptionToThrow = {null};
final AtomicInteger[] importedCounter = {new AtomicInteger()};
final AtomicInteger importedCounter = new AtomicInteger();
for (List<EquatableEntityInterface> listToProcess : splittedOrders) {
List<RunnableThrowable> calls = new ArrayList<>();
for (EquatableEntityInterface dataToSave : listToProcess) {
//calls.add(() -> {
logger.debug("Importati {} ordini di {}", importedCounter[0].incrementAndGet(), allData.size());
logger.debug("Importati {} ordini di {}", importedCounter.incrementAndGet(), allData.size());
try {
entityProcessor.processEntity(dataToSave, true, true, ROSSOGARGANO_EXCHANGE_USER, internalMultiDb, requestDataDTO);
@@ -118,15 +120,12 @@ public class ExchangeOrdiniImportService {
logger.error("Errore durante l'importazione dell'ordine [num: " + order.getNumOrd() + "," +
"data: " + order.getDataOrd() + "," +
"gestione: " + order.getGestione() + "]", ex);
internalMultiDb.rollbackAll();
//throw ex;
exchangeMultiDb.rollbackAll();
}
//});
}
//UtilityThread.executeParallel(calls);
}
if (firstExceptionToThrow[0] != null) throw firstExceptionToThrow[0];
@@ -145,15 +144,6 @@ public class ExchangeOrdiniImportService {
String dtbOrdrTableName = dtbOrdrOriginalTableName + (useTempTable ? "_tmp" : "");
if (useTempTable) {
UtilityDB.executeStatement(connection,
"INSERT INTO " + dtbOrdtTableName +
" SELECT * FROM " + dtbOrdtOriginalTableName,
"INSERT INTO " + dtbOrdrTableName +
" SELECT * FROM " + dtbOrdrOriginalTableName
);
}
List<DtbOrdt> dtbOrdtLav = exchangeImportDataManagerService.retrieveDataFromExchange(connection, DtbOrdt.class,
dtbOrdtTableName, Query.format("data_ord BETWEEN {} AND {}", minDate, maxDate), retrieveAlreadyImported);

View File

@@ -61,7 +61,7 @@ public class AnagraficaDocFinanceService {
" LEFT OUTER JOIN atb_forn ON gtb_anag.cod_anag = atb_forn.cod_anag\n" +
" LEFT OUTER JOIN gtb_banc_azi_intercode ON vtb_clie.cod_banc_azi = gtb_banc_azi_intercode.cod_banc_azi AND\n" +
" gtb_banc_azi_intercode.formato = 'DOCFINANCE'\n" +
"WHERE (data_ins >= CAST(DATEADD(MONTH, -1, GETDATE()) AS DATE)\n" +
"WHERE (data_ins >= CAST(GETDATE() AS DATE)\n" +
" OR data_mod = CAST(GETDATE() AS DATE))\n" +
"UNION ALL\n" +
"SELECT 'ROSSOGARGA' AS azienda,\n" +
@@ -91,7 +91,7 @@ public class AnagraficaDocFinanceService {
" NULL AS cod_bic,\n" +
" NULL AS voce_finanziaria\n" +
"FROM ctb_cont\n" +
"WHERE (data_ins >= CAST(DATEADD(MONTH, -1, GETDATE()) AS DATE)\n" +
"WHERE (data_ins >= CAST(GETDATE() AS DATE)\n" +
" OR data_mod = CAST(GETDATE() AS DATE))";
List<AnagraficaDocFinanceDTO> anagraficaDocFinance = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, AnagraficaDocFinanceDTO.class);
@@ -100,7 +100,7 @@ public class AnagraficaDocFinanceService {
String fileContent = txtMapper.serialize(anagraficaDocFinance);
if (fileContent != null) {
String filename = String.format("Anagrafiche_%s.txt", UtilityDate.formatDate(new Date(), "ddMMyyyyHHmm"));
String filename = "anagrafiche.txt";
FileItem returnFile = new FileItem(filename, fileContent, "txt");
entityExportResponse.getResponse().add(returnFile);