From b902879a26e068f7d444696f30f4da2ab835775f Mon Sep 17 00:00:00 2001 From: MinaR Date: Mon, 15 Sep 2025 09:09:54 +0200 Subject: [PATCH] modifiche su slim --- .../model/Migration_20250912152309.java | 28 + .../controller/Slim2kLogisticController.java | 5 +- .../service/Slim2kLogisticService.java | 826 ++++++++---------- 3 files changed, 410 insertions(+), 449 deletions(-) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250912152309.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250912152309.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250912152309.java new file mode 100644 index 0000000000..d6d58ad42f --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250912152309.java @@ -0,0 +1,28 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.IntegryCustomer; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250912152309 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'"); + createSetup("w_ddocu_rc", "SETUP", "INVIO_EMAIL", "N", +"Attiva invio email direttamente dalla gestione", false, "SI_NO", false, false, +false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'"); + + if (isCustomer(IntegryCustomer.RossoGargano)) + updateSetupValue("w_ddocu_rc", "SETUP", "INVIO_EMAIL", "S"); + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-engine/src/main/java/it/integry/ems/logistic/controller/Slim2kLogisticController.java b/ems-engine/src/main/java/it/integry/ems/logistic/controller/Slim2kLogisticController.java index fd2b16f146..783e508254 100644 --- a/ems-engine/src/main/java/it/integry/ems/logistic/controller/Slim2kLogisticController.java +++ b/ems-engine/src/main/java/it/integry/ems/logistic/controller/Slim2kLogisticController.java @@ -43,7 +43,7 @@ public class Slim2kLogisticController { try { multiDBTransactionManager.setPrimaryDB(configuration); logger.debug(requestDataDTO.getUsername() + " " + requestDataDTO.getPassword() + " " + requestDataDTO.getProfileDB()); - list = slim2kLogisticService.importListeDiScarico(listType, listCode); + list.add(ServiceRestResponse.createEntityPositiveResponse(slim2kLogisticService.importListeDiScarico(listType, listCode))); } catch (Exception e) { logger.error(request.getRequestURI(), e); list.add(new ServiceRestResponse(EsitoType.KO, configuration, e)); @@ -63,9 +63,8 @@ public class Slim2kLogisticController { @RequestParam(value = "doctype", required = false) String doctype) { List list = new ArrayList(); try { - multiDBTransactionManager.setPrimaryDB(configuration); logger.debug(requestDataDTO.getUsername() + " " + requestDataDTO.getPassword() + " " + requestDataDTO.getProfileDB()); - list = slim2kLogisticService.importListeDiCarico(scode, dcode, docdate, docnum, refdoc); + list.add(ServiceRestResponse.createEntityPositiveResponse(slim2kLogisticService.importListeDiCarico(scode, dcode, docdate, docnum, refdoc))); } catch (Exception e) { logger.error(request.getRequestURI(), e); list.add(new ServiceRestResponse(EsitoType.KO, configuration, e)); diff --git a/ems-engine/src/main/java/it/integry/ems/logistic/service/Slim2kLogisticService.java b/ems-engine/src/main/java/it/integry/ems/logistic/service/Slim2kLogisticService.java index 1565e1c7da..0493b281e8 100644 --- a/ems-engine/src/main/java/it/integry/ems/logistic/service/Slim2kLogisticService.java +++ b/ems-engine/src/main/java/it/integry/ems/logistic/service/Slim2kLogisticService.java @@ -8,7 +8,9 @@ import it.integry.ems.service.MailService; import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.user.UserSession; +import it.integry.ems.utility.UtilityDebug; import it.integry.ems.utility.UtilityDirs; +import it.integry.ems.utility.UtilityEntity; import it.integry.ems.utility.UtilityFile; import it.integry.ems_model.base.EntityBase; import it.integry.ems_model.config.EmsRestConstants; @@ -17,10 +19,13 @@ import it.integry.ems_model.resolver.SqlFieldHolder; import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.types.OperationType; import it.integry.ems_model.utility.*; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import javax.ejb.Local; import java.io.File; import java.math.BigDecimal; import java.sql.PreparedStatement; @@ -51,30 +56,24 @@ public class Slim2kLogisticService { @Autowired private UserSession userSession; + protected Logger logger = LogManager.getLogger(); + + final String type = "COLLI", format = "SLIM2K"; + // IMPORTAZIONE COLLI DI VENDITA DA SHIPPINGPLAN_EXPORT - public List importListeDiScarico(String listType, String listCode) throws Exception { - List respList = new ArrayList(); - ServiceRestResponse resp = new ServiceRestResponse(); - DataSource dsSlim2k = new DataSource(); + public List importListeDiScarico(String listType, String listCode) throws Exception { String pltCodeOld = "", whereCond = ""; - LocalDate dataCollo = UtilityLocalDate.getNow(); - Date dataOrd = new Date(); - List colli = new ArrayList(); - MtbColt mtbColt = null; - List listRow = null; - final String type = "COLLI", format = "SLIM2K"; + List colli = new ArrayList<>(); - Connection connection = multiDBTransactionManager.getPrimaryConnection(); + Map setup = setupGest.getImportSetupSection(multiDBTransactionManager.getPrimaryConnection(), type, format); - Map setup = setupGest.getImportSetupSection(connection, type, format); String profileSlim2k = setup.get("PROFILE"); if (UtilityString.isNullOrEmpty(profileSlim2k)) { throw new Exception("Profile non configurato per la procedura di importazione liste di scarico SLIM2K"); } - try { - dsSlim2k.initialize(profileSlim2k); + try (MultiDBTransactionManager mdbSlim2k = new MultiDBTransactionManager(profileSlim2k)) { if (!UtilityString.isNullOrEmpty(listType)) { whereCond = "shippingplan_export.listtype = " + UtilityDB.valueToString(listType); @@ -87,190 +86,185 @@ public class Slim2kLogisticService { whereCond += "shippingplan_export.listcode = " + UtilityDB.valueToString(listCode); } - String sql = - " SELECT shippingplan_export.listdate AS data_collo," + - " shippingplan_export.docnum AS num_ord," + - " shippingplan_export.item AS cod_mart," + - " shippingplan_export.qtychecked AS qta_col," + - " shippingplan_export.ref AS cod_anag," + - " shippingplan_export.dest AS cod_vdes," + - " shippingplan_export.docdate AS data_ord," + - " shippingplan_export.workorder AS partita_mag," + - " shippingplan_export.docrow AS riga_ord," + - " shippingplan_export.pltcode AS plt_code, " + - " shippingplan_export.whouse AS cod_mdep, " + - " shippingplan_export.qtycheckedalt AS num_cnf, " + - " shippingplan_export.picker AS picker " + - " FROM shippingplan_export" + - " WHERE shippingplan_export.qtydelivered <> 0 AND shippingplan_export.whouse IS NOT NULL " + - " ORDER BY shippingplan_export.whouse, " + - " shippingplan_export.listcode, " + - " shippingplan_export.listdate DESC, " + - " shippingplan_export.pltcode, " + - " shippingplan_export.item," + - " shippingplan_export.workorder "; + try { - sql = UtilityDB.addwhereCond(sql, whereCond, false); - PreparedStatement stm = dsSlim2k.getConnection().prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - ResultSet Res = stm.executeQuery(); - String csv = UtilityResultSet.mapResultSetToCSV(Res, ',', true, false); + String sql = + " SELECT shippingplan_export.listdate AS data_collo," + + " shippingplan_export.docnum AS num_ord," + + " shippingplan_export.item AS cod_mart," + + " shippingplan_export.qtychecked AS qta_col," + + " shippingplan_export.ref AS cod_anag," + + " shippingplan_export.dest AS cod_vdes," + + " shippingplan_export.docdate AS data_ord," + + " shippingplan_export.workorder AS partita_mag," + + " shippingplan_export.docrow AS riga_ord," + + " shippingplan_export.pltcode AS plt_code, " + + " shippingplan_export.whouse AS cod_mdep, " + + " shippingplan_export.qtycheckedalt AS num_cnf, " + + " shippingplan_export.picker AS picker " + + " FROM shippingplan_export" + + " WHERE shippingplan_export.qtydelivered <> 0 AND shippingplan_export.whouse IS NOT NULL " + + " ORDER BY shippingplan_export.whouse, " + + " shippingplan_export.listcode, " + + " shippingplan_export.listdate DESC, " + + " shippingplan_export.pltcode, " + + " shippingplan_export.item," + + " shippingplan_export.workorder "; - String fileName = UtilityDirs.getEmsApiTempDirectoryPath() + File.separator + "Slim2K" + File.separator + - new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + listCode + ".txt"; + sql = UtilityDB.addwhereCond(sql, whereCond, false); - File fileLog = new File(fileName); + List> listaScarico = UtilityDB.executeSimpleQuery(mdbSlim2k.getPrimaryConnection(), sql); + if (listaScarico.isEmpty()) { + throw new Exception("Nessun collo da importare"); + } - UtilityFile.directoryCreate(fileLog.getParent()); + String csv = UtilityCSV.mapHashMapToCSV(listaScarico, ',', true, false, null); + String fileName = UtilityDirs.getEmsApiTempDirectoryPath() + File.separator + "Slim2K" + File.separator + + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + listCode + ".txt"; - UtilityFile.writeStringToFile(csv, fileLog); + File fileLog = new File(fileName); - Res.beforeFirst(); + UtilityFile.directoryCreate(fileLog.getParent()); - while (Res.next()) { - String dataColloString = Res.getString("data_collo").trim(); - if (!UtilityString.isNullOrEmpty(dataColloString)) { - dataCollo = UtilityString.parseLocalDate(dataColloString); - } - String numOrd = Res.getString("num_ord").trim(); - String codMart = Res.getString("cod_mart").trim(); - BigDecimal qtaCol = Res.getBigDecimal("qta_col"); - String codAnag = Res.getString("cod_anag"); - if (!UtilityString.isNullOrEmpty(codAnag)) { - codAnag = codAnag.trim(); - } - String codVdes = Res.getString("cod_vdes"); - if (!UtilityString.isNullOrEmpty(codVdes)) { - codVdes = codVdes.trim(); - } - String dataOrdString = Res.getString("data_ord").trim(); - if (!UtilityString.isNullOrEmpty(dataOrdString)) { - dataOrd = UtilityString.parseDate(dataOrdString); - } - String partitaMag = Res.getString("partita_mag"); - if (!UtilityString.isNullOrEmpty(partitaMag)) { - partitaMag = partitaMag.trim(); - } - String rigaOrd = Res.getString("riga_ord"); - if (!UtilityString.isNullOrEmpty(rigaOrd)) { - rigaOrd = rigaOrd.trim(); - } - String pltCode = Res.getString("plt_code"); - if (!UtilityString.isNullOrEmpty(pltCode)) { - pltCode = pltCode.trim(); - } - String codMdep = Res.getString("cod_mdep"); - if (!UtilityString.isNullOrEmpty(codMdep)) { - codMdep = codMdep.trim(); - } - BigDecimal numCnf = Res.getBigDecimal("num_cnf"); - String picker = Res.getString("picker").trim(); + UtilityFile.writeStringToFile(csv, fileLog); - if (UtilityString.isNullOrEmpty(pltCode) == false && !UtilityString.streNull(pltCode).equals(pltCodeOld) && UtilityString.isNullOrEmpty(dataColloString) == false) { + Map, List>> testataColli = listaScarico.stream() + .filter(x->x.get("plt_code") != null) + .collect(groupingBy(x -> { + HashMap map = new HashMap<>(); + map.put("plt_code", x.get("plt_code")); + map.put("data_collo", x.get("data_collo")); + map.put("cod_anag", x.get("cod_anag")); + map.put("cod_vdes", x.get("cod_vdes")); + map.put("cod_mdep", x.get("cod_mdep")); + map.put("picker", x.get("picker")); + return map; + })); + + + for (Map.Entry, List>> entry : testataColli.entrySet()) { + HashMap keyMap = entry.getKey(); + List> righe = entry.getValue(); + + String dataColloString = UtilityHashMap.getValueIfExists(keyMap, "data_collo", "").trim(); + LocalDate dataCollo = UtilityLocalDate.getNow(); + if (!UtilityString.isNullOrEmpty(dataColloString)) { + dataCollo = UtilityString.parseLocalDate(dataColloString); + } + String codAnag = UtilityHashMap.getValueIfExists(keyMap, "cod_anag", "").trim(); + String codVdes = UtilityHashMap.getValueIfExists(keyMap, "cod_vdes", "").trim(); + String pltCode = UtilityHashMap.getValueIfExists(keyMap, "plt_code", "").trim(); + String codMdep = UtilityHashMap.getValueIfExists(keyMap, "cod_mdep", "").trim(); + String picker = UtilityHashMap.getValueIfExists(keyMap, "picker", "").trim(); String serCollo = setup.get("SER_COLLO_" + codMdep); - mtbColt = new MtbColt(); + MtbColt mtbColt = new MtbColt() + .setGestione("V") + .setDataCollo(dataCollo) + .setSerCollo(serCollo) + .setAnnotazioni(pltCode) + .setCodAnag(codAnag) + .setCodVdes(codVdes) + .setCodMdep(codMdep) + .setSegno(-1) + .setPreparatoDa(picker); colli.add(mtbColt); - listRow = new ArrayList(); - mtbColt.setMtbColr(listRow); - mtbColt.setOperation(OperationType.INSERT); - mtbColt.setGestione("V"); - mtbColt.setDataCollo(dataCollo); - mtbColt.setSerCollo(serCollo); - mtbColt.setAnnotazioni(pltCode); - mtbColt.setCodAnag(codAnag); - mtbColt.setCodVdes(codVdes); - mtbColt.setCodMdep(codMdep); - mtbColt.setSegno(-1); - mtbColt.setDataOrd(UtilityLocalDate.localDateFromDate(dataOrd)); - mtbColt.setPreparatoDa(picker); - mtbColt.setNumOrd(new Integer(numOrd)); + + if (righe.size() > 0 ) { + String dataOrd = UtilityHashMap.getValueIfExists(righe.get(0), "data_ord", "").trim(); + String numOrd = UtilityHashMap.getValueIfExists(righe.get(0), "num_ord", "").trim(); + + mtbColt.setDataOrd(UtilityString.parseLocalDate(dataOrd)) + .setPreparatoDa(picker) + .setNumOrd(new Integer(numOrd)); + + + for (HashMap s : righe) { + dataOrd = UtilityHashMap.getValueIfExists(s, "data_ord", "").trim(); + numOrd = UtilityHashMap.getValueIfExists(s, "num_ord", "").trim(); + String codMart = UtilityHashMap.getValueIfExists(s, "cod_mart", "").trim(); + BigDecimal qtaCol = UtilityHashMap.getValueIfExists(s, "qta_col"); + String partitaMag = UtilityHashMap.getValueIfExists(s, "partita_mag", "").trim(); + Integer rigaOrd = UtilityHashMap.getValueIfExists(s, "riga_ord"); + BigDecimal numCnf = UtilityHashMap.getValueIfExists(s, "num_cnf"); + + MtbColr packRow = new MtbColr(); + if (UtilityInteger.isNullOrZero(rigaOrd)) { + sql = "SELECT cod_mart " + + " FROM mtb_tcol " + + " WHERE cod_tcol = " + UtilityDB.valueToString(codMart); + + String codMartPed = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + + if (!UtilityString.isNullOrEmpty(codMartPed)) { + mtbColt.setCodTcol(codMartPed); + } + + if (!UtilityString.isNullOrEmpty(codMart)) { + packRow.setCodMart(codMart); + packRow.setQtaCol(qtaCol); + mtbColt.getMtbColr().add(packRow); + } + } else { + Integer rigaOrdInt = new Integer(rigaOrd); + packRow.setCodMart(codMart); + packRow.setPartitaMag(partitaMag); + packRow.setQtaCol(qtaCol); + packRow.setDataOrd(UtilityString.parseLocalDate(dataOrd)); + packRow.setNumOrd(new Integer(numOrd)); + packRow.setRigaOrd(rigaOrdInt); + packRow.setNumCnf(numCnf); + mtbColt.getMtbColr().add(packRow); + } + + } + } } + if (!colli.isEmpty()) { + colli = entityProcessor.processEntityList(colli, true); - MtbColr packRow = new MtbColr(); - if (UtilityString.isNullOrEmpty(rigaOrd) || rigaOrd.equalsIgnoreCase("0")) { + List errorList = colli.stream().filter(x -> x.getException() != null).collect(Collectors.toList()); - sql = "SELECT cod_mart " + - " FROM mtb_tcol " + - " WHERE cod_tcol = " + UtilityDB.valueToString(codMart); - - PreparedStatement Local = multiDBTransactionManager.prepareStatement(sql); - ResultSet ResLocal = Local.executeQuery(); - if (ResLocal.next()) { - mtbColt.setCodTcol(codMart); - codMart = ResLocal.getString("cod_mart"); - } - ResLocal.close(); - Local.close(); - - if (!UtilityString.isNullOrEmpty(codMart)) { - packRow.setCodMart(codMart); - packRow.setQtaCol(qtaCol); - listRow.add(packRow); - } - } else { - - Integer rigaOrdInt = new Integer(rigaOrd); - packRow.setCodMart(codMart); - packRow.setPartitaMag(partitaMag); - packRow.setQtaCol(qtaCol); - packRow.setDataOrd(UtilityLocalDate.localDateFromDate(dataOrd)); - packRow.setNumOrd(new Integer(numOrd)); - packRow.setRigaOrd(rigaOrdInt); - packRow.setNumCnf(numCnf); - listRow.add(packRow); - } - - pltCodeOld = pltCode; - } - Res.close(); - stm.close(); - - if (!colli.isEmpty()) { - colli = entityProcessor.processEntityList(colli, true); - - for (EntityBase entity : colli) { - if (entity.getException() != null) { - respList.add(new ServiceRestResponse(EsitoType.KO, entity.getException().getMessage())); + for (EntityBase entity : errorList) { mailService.sendErrorMailByGestNameSection(multiDBTransactionManager.getPrimaryConnection(), type, format, null, Collections.singletonList(entity), (byte[]) null, null, null); - } else { - respList.add(new ServiceRestResponse(EsitoType.OK, entity, multiDBTransactionManager.getPrimaryConnection().getProfileName())); - } - } + } + + return colli; + + } else { + throw new Exception("Nessun collo da importare"); + } + } finally { try { String query = "DELETE FROM shippingplan_export "; query = UtilityDB.addwhereCond(query, whereCond, false); - stm = dsSlim2k.getConnection().prepareStatement(query); - stm.executeUpdate(); - stm.close(); - dsSlim2k.getConnection().commit(); + if (UtilityDebug.isDebugExecution()) + logger.info(query); + else { + mdbSlim2k.prepareStatement(query).execute(); + mdbSlim2k.commitAll(); + } } catch (Exception e) { - dsSlim2k.getConnection().rollback(); + mdbSlim2k.rollbackAll(); throw new Exception("Errore nella cancellazione del documento " + e.getMessage()); } - } else { - throw new Exception("Nessun collo da importare"); } } catch (Exception e) { throw e; - } finally { - if (dsSlim2k != null && !dsSlim2k.isClosed()) { - dsSlim2k.close(); - } - } - return respList; + } public List importTrasferimenti(String type, String format) throws Exception { - if ( userSession.getDefaultDepo() == null ) + if (userSession.getDefaultDepo() == null) throw new Exception(String.format("Nessun deposito trovato per l'utente %s", userSession.getUsername())); String codMdep = userSession.getDefaultDepo().getCodMdep(); @@ -281,56 +275,54 @@ public class Slim2kLogisticService { throw new Exception("Profile non configurato per la procedura di importazione liste di scarico SLIM2K"); } - String codDtip = setupGest.getSetupDepo("IMPORT_"+type, format, "COD_DTIP_TRASF", codMdep); - if ( UtilityString.isNullOrEmpty(codDtip) ) + String codDtip = setupGest.getSetupDepo("IMPORT_" + type, format, "COD_DTIP_TRASF", codMdep); + if (UtilityString.isNullOrEmpty(codDtip)) throw new Exception(String.format("Tipo documento non confiutrato per il deposito %s", userSession.getUsername())); List colli = new ArrayList<>(); - DataSource dsSlim2k = new DataSource(); - try { - dsSlim2k.initialize(profileSlim2k); + try (MultiDBTransactionManager dsSlim2k = new MultiDBTransactionManager(profileSlim2k)) { LocalDate today = UtilityLocalDate.getNow(); String sql = Query.format( - "SELECT system_note\n" + - "FROM mtb_colt\n" + - " INNER JOIN mtb_colr ON mtb_colt.gestione = mtb_colr.gestione AND mtb_colt.data_collo = mtb_colr.data_collo AND\n" + - " mtb_colt.ser_collo = mtb_colr.ser_collo AND mtb_colt.num_collo = mtb_colr.num_collo\n" + - "WHERE mtb_colt.cod_mdep = %s\n" + - " AND mtb_colt.data_collo = %s\n" + - " AND mtb_colr.system_note IS NOT NULL", - codMdep, today); + "SELECT system_note\n" + + "FROM mtb_colt\n" + + " INNER JOIN mtb_colr ON mtb_colt.gestione = mtb_colr.gestione AND mtb_colt.data_collo = mtb_colr.data_collo AND\n" + + " mtb_colt.ser_collo = mtb_colr.ser_collo AND mtb_colt.num_collo = mtb_colr.num_collo\n" + + "WHERE mtb_colt.cod_mdep = %s\n" + + " AND mtb_colt.data_collo = %s\n" + + " AND mtb_colr.system_note IS NOT NULL", + codMdep, today); List listTrackNumber = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); sql = - Query.format( - "SELECT e.whouse AS cod_dest,\n" + - " movements_export.whouse AS cod_mdep,\n" + - " movements_export.item AS cod_mart,\n" + - " movements_export.workorder AS lotto,\n" + - " ABS(movements_export.qtymove) AS qta_collo,\n" + - " movements_export.unum\n"+ - "FROM movements_export\n" + - " INNER JOIN movements_export e ON movements_export.item = e.item\n" + - " AND movements_export.trtype = e.trtype\n" + - " AND movements_export.movedate = e.movedate\n" + - " AND movements_export.whouse <> e.whouse\n" + - " AND movements_export.workorder = e.workorder\n" + - " AND movements_export.utime = e.utime\n" + - "WHERE movements_export.movedate = %s\n" + - " AND movements_export.qtymove < 0\n" + - " AND movements_export.trtype LIKE (%s)\n" + - " AND movements_export.whouse = %s \n", - UtilityLocalDate.formatDate(today, "yyyyMMdd") , "W%", codMdep); + Query.format( + "SELECT e.whouse AS cod_dest,\n" + + " movements_export.whouse AS cod_mdep,\n" + + " movements_export.item AS cod_mart,\n" + + " movements_export.workorder AS lotto,\n" + + " ABS(movements_export.qtymove) AS qta_collo,\n" + + " movements_export.unum\n" + + "FROM movements_export\n" + + " INNER JOIN movements_export e ON movements_export.item = e.item\n" + + " AND movements_export.trtype = e.trtype\n" + + " AND movements_export.movedate = e.movedate\n" + + " AND movements_export.whouse <> e.whouse\n" + + " AND movements_export.workorder = e.workorder\n" + + " AND movements_export.utime = e.utime\n" + + "WHERE movements_export.movedate = %s\n" + + " AND movements_export.qtymove < 0\n" + + " AND movements_export.trtype LIKE (%s)\n" + + " AND movements_export.whouse = %s \n", + UtilityLocalDate.formatDate(today, "yyyyMMdd"), "W%", codMdep); - if ( !listTrackNumber.isEmpty()) { + if (!listTrackNumber.isEmpty()) { sql += " AND movements_export.unum not in ( " + UtilityDB.listValueToString(listTrackNumber) + " )"; } - List> listaColli = UtilityDB.executeSimpleQuery(dsSlim2k.getConnection(), sql); + List> listaColli = UtilityDB.executeSimpleQuery(dsSlim2k.getPrimaryConnection(), sql); Map, List>> testataColli = listaColli.stream() .collect(groupingBy(x -> { @@ -348,11 +340,11 @@ public class Slim2kLogisticService { sql = Query.format( - "SELECT cod_anag, cod_vdes FROM mtb_depo WHERE cod_mdep = %s AND cod_anag is not null", - codDest.trim()); + "SELECT cod_anag, cod_vdes FROM mtb_depo WHERE cod_mdep = %s AND cod_anag is not null", + codDest.trim()); HashMap datiDepo = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), sql); - if (!UtilityHashMap.isPresent(datiDepo) ) + if (!UtilityHashMap.isPresent(datiDepo)) throw new Exception(String.format("Dati non trovati per il deposito %s", codDest)); MtbColt mtbColt = @@ -369,13 +361,13 @@ public class Slim2kLogisticService { colli.add(mtbColt); - for (HashMap r : righe){ + for (HashMap r : righe) { MtbColr mtbColr = new MtbColr() - .setCodMart(((String) r.get("cod_mart")).trim()) - .setPartitaMag(((String) r.get("lotto")).trim()) - .setQtaCol((BigDecimal) r.get("qta_collo")) - .setSystemNote(r.get("unum").toString().trim()); + .setCodMart(((String) r.get("cod_mart")).trim()) + .setPartitaMag(((String) r.get("lotto")).trim()) + .setQtaCol((BigDecimal) r.get("qta_collo")) + .setSystemNote(r.get("unum").toString().trim()); mtbColt.getMtbColr().add(mtbColr); } @@ -387,59 +379,38 @@ public class Slim2kLogisticService { } } catch (Exception e) { throw e; - } finally { - if (!dsSlim2k.isClosed()) { - dsSlim2k.close(); - } } return null; } // IMPORTAZIONE COLLI DI VENDITA DA DOCUMENTS_EXPORT - public List importListeDiCarico(String scode, String dcode, String docDate, String docnum, String refdoc) throws Exception { - Date ldt_dataOrd; - LocalDate dataCollo = UtilityLocalDate.getNow(); - String dataDocOld = "", numDocOld = "", numOrdOld = "", dataOrdOld = "", codVdes = null, queryTransaction = null; - DataSource dsSlim2k = new DataSource(); - ServiceRestResponse resp = new ServiceRestResponse(); - List respList = new ArrayList(); + public List importListeDiCarico(String scode, String dcode, String docDate, String docnum, String refdoc) throws Exception { List colli = new ArrayList(); - MtbColt pack; - List listRow = null; - final String type = "COLLI", format = "SLIM2K"; - - Connection connection = multiDBTransactionManager.getPrimaryConnection(); - Map setup = setupGest.getImportSetupSection(connection, type, format); + Map setup = setupGest.getImportSetupSection(multiDBTransactionManager.getPrimaryConnection(), type, format); String profileSlim2k = setup.get("PROFILE"); if (UtilityString.isNullOrEmpty(profileSlim2k)) { throw new Exception("Profile non configurato per la procedura di importazione liste di scarico SLIM2K"); } - try { - dsSlim2k.initialize(profileSlim2k); - - String whereCond = ""; - String sql; - + try (MultiDBTransactionManager dsSlim2k = new MultiDBTransactionManager(profileSlim2k)) { if (!UtilityString.isNullOrEmpty(refdoc)) { - sql = "SELECT DISTINCT scode," + String sql = "SELECT DISTINCT scode," + " docnum," + " docdate " + " FROM documents_export " + " WHERE refdoc = " + UtilityDB.valueToString(refdoc); - PreparedStatement ps = dsSlim2k.getConnection().prepareStatement(sql); - ResultSet rs = ps.executeQuery(); - if (rs.next()) { - scode = rs.getString(1).trim(); - docnum = rs.getString(2).trim(); - docDate = rs.getString(3).trim(); + + HashMap lista = UtilityDB.executeSimpleQueryOnlyFirstRow(dsSlim2k.getPrimaryConnection(), sql); + if (UtilityHashMap.isPresent(lista)) { + scode = ((String) lista.get("scode")).trim(); + docnum = ((String) lista.get("docnum")).trim(); + docDate = ((String) lista.get("docdate")).trim(); } - rs.close(); - ps.close(); } + String whereCond = ""; if (!UtilityString.isNullOrEmpty(scode)) { whereCond = "trim(documents_export.scode) = " + UtilityDB.valueToString(scode); } @@ -464,157 +435,155 @@ public class Slim2kLogisticService { whereCond += "trim(documents_export.docnum) = " + UtilityDB.valueToString(docnum); } - if (dsSlim2k.getTypeDB() == EmsRestConstants.DB_TYPE.MSSQL) { - whereCond = whereCond.replace("trim", "rtrim"); - } - - sql = - " SELECT documents_export.docdate as data_doc," + - " documents_export.scode as fornitore," + - " documents_export.docnum as num_doc," + - " documents_export.item as cod_mart," + - " sum(documents_export.qtychecked) as qta_doc," + - " documents_export.refdoc as num_ord," + - " documents_export.refrow as riga_ord," + - " documents_export.refdate as data_ord," + - " documents_export.workorder as partita_mag," + - " documents_export.stockdate as data_scad," + - " documents_export.rowbalance as evaso_forzato, " + - " documents_export.whouse as cod_mdep, " + - " sum(documents_export.qtycheckedalt) as num_cnf " + - " FROM documents_export " + - " GROUP BY documents_export.scode," + - " documents_export.docdate," + - " documents_export.docnum," + - " documents_export.refdate," + - " documents_export.refdoc," + - " documents_export.refrow," + - " documents_export.item," + - " documents_export.workorder," + - " documents_export.stockdate ," + - " documents_export.rowbalance, " + - " documents_export.whouse " + - " ORDER BY documents_export.scode," + - " documents_export.docdate," + - " documents_export.docnum," + - " documents_export.refdate," + - " documents_export.refdoc," + - " documents_export.item," + - " documents_export.workorder," + - " documents_export.stockdate "; + try { + String sql = + " SELECT documents_export.docdate as data_doc," + + " documents_export.scode as fornitore," + + " documents_export.docnum as num_doc," + + " documents_export.item as cod_mart," + + " sum(documents_export.qtychecked) as qta_doc," + + " documents_export.refdoc as num_ord," + + " documents_export.refrow as riga_ord," + + " documents_export.refdate as data_ord," + + " documents_export.workorder as partita_mag," + + " documents_export.stockdate as data_scad," + + " documents_export.rowbalance as evaso_forzato, " + + " documents_export.whouse as cod_mdep, " + + " sum(documents_export.qtycheckedalt) as num_cnf " + + " FROM documents_export " + + " GROUP BY documents_export.scode," + + " documents_export.docdate," + + " documents_export.docnum," + + " documents_export.refdate," + + " documents_export.refdoc," + + " documents_export.refrow," + + " documents_export.item," + + " documents_export.workorder," + + " documents_export.stockdate ," + + " documents_export.rowbalance, " + + " documents_export.whouse " + + " ORDER BY documents_export.scode," + + " documents_export.docdate," + + " documents_export.docnum," + + " documents_export.refdate," + + " documents_export.refdoc," + + " documents_export.item," + + " documents_export.workorder," + + " documents_export.stockdate "; - sql = UtilityDB.addwhereCond(sql, whereCond, false); - PreparedStatement stm = dsSlim2k.getConnection().prepareStatement(sql); - ResultSet Res = stm.executeQuery(); + sql = UtilityDB.addwhereCond(sql, whereCond, false); + List> righe = UtilityDB.executeSimpleQuery(dsSlim2k.getPrimaryConnection(), sql); - while (Res.next()) { - // ACQUISIZIONE DATI RIGA DOCUMENTO - String dataDoc = Res.getString("data_doc").trim(); - Date ldt_dataDoc = UtilityString.parseDate(dataDoc); - String fornitore = Res.getString("fornitore").trim(); - String numDoc = Res.getString("num_doc").trim(); - String codMart = Res.getString("cod_mart").trim(); - BigDecimal qtaDoc = Res.getBigDecimal("qta_doc"); - String numOrd = UtilityString.streNull(Res.getString("num_ord")).trim(); - String rigaOrd = UtilityString.streNull(Res.getString("riga_ord").trim()); - String dataOrd = UtilityString.streNull(Res.getString("data_ord")).trim(); - String lotto = Res.getString("partita_mag").trim(); - Date dataScad = UtilityString.parseDate(Res.getString("data_scad").trim()); - String flagEvaso = UtilityString.streNull(Res.getString("evaso_forzato").trim()); - String codMdep = UtilityString.streNull(Res.getString("cod_mdep").trim()); - String serCollo = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "IMPORT_COLLI", "SLIM2K", "SER_COLLO_" + codMdep); - BigDecimal numCnf = Res.getBigDecimal("num_cnf"); + Map, List>> listeCarico = righe.stream() + .collect(groupingBy(x -> { + HashMap map = new HashMap<>(); + map.put("data_doc", x.get("data_doc")); + map.put("num_doc", x.get("num_doc")); + map.put("data_ord", x.get("data_ord")); + map.put("num_ord", x.get("num_ord")); + map.put("fornitore", x.get("fornitore")); + map.put("cod_mdep", x.get("cod_mdep")); + return map; + })); - if (dataOrd.compareTo("") != 0) { - ldt_dataOrd = UtilityString.parseDate(dataOrd); - String sqlDest = "SELECT cod_vdes " + - " FROM dtb_ordt " + - " WHERE data_ord = " + UtilityDB.valueDateToString(ldt_dataOrd, "yyyy-MM-dd") + " AND " + - " num_ord = " + numOrd + " AND " + - " gestione = 'A'"; + for (Map.Entry, List>> entry : listeCarico.entrySet()) { + HashMap testata = entry.getKey(); - PreparedStatement infoDest = multiDBTransactionManager.prepareStatement(sqlDest); - ResultSet ResDest = infoDest.executeQuery(); - while (ResDest.next()) { - codVdes = ResDest.getString(1); + String dataDoc = UtilityHashMap.getValueIfExists(testata, "data_doc", "").trim(); + String numDoc = UtilityHashMap.getValueIfExists(testata, "num_doc", "").trim(); + String codAnag = UtilityHashMap.getValueIfExists(testata, "fornitore", "").substring(0, 5); + String dataOrdString = UtilityHashMap.getValueIfExists(testata, "data_ord"); + LocalDate dataOrd = null; + if (!UtilityString.isNullOrEmpty(dataOrdString)) { + dataOrd = UtilityString.parseLocalDate(dataOrdString.trim()); } - ResDest.close(); - infoDest.close(); - } - String codAnag = fornitore.substring(0, 5); - if (flagEvaso.compareTo("1") == 0) { - queryTransaction = "UPDATE dtb_ordr " + - "SET flag_evaso = 'E' " + - " WHERE data_ord = " + UtilityDB.valueDateToString(UtilityString.parseDate(dataOrd), "yyyy-MM-dd") + " AND " + - " num_ord = " + numOrd + " AND " + - " riga_ord = " + rigaOrd + " AND " + - " gestione = 'A'"; - } - if (dataDoc.compareTo(dataDocOld) != 0 || numDoc.compareTo(numDocOld) != 0 || dataOrd.compareTo(dataOrdOld) != 0 || numOrd.compareTo(numOrdOld) != 0) { - pack = new MtbColt(); - MtbPartitaMag partitaMag = new MtbPartitaMag(); - colli.add(pack); - listRow = new ArrayList(); - pack.setMtbColr(listRow); + String codMdep = UtilityHashMap.getValueIfExists(testata, "cod_mdep", "").trim(); + String serCollo = setup.get("SER_COLLO_" + codMdep); + + String numOrd = UtilityHashMap.getValueIfExists(testata, "num_ord", "").trim(); + String codVdes = null; + if (dataOrd != null) { + String sqlDest = "SELECT cod_vdes " + + " FROM dtb_ordt " + + " WHERE data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + " num_ord = " + numOrd + " AND " + + " gestione = 'A'"; + + codVdes = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sqlDest); + } + + MtbColt pack = new MtbColt() + .setGestione("A") + .setDataCollo(UtilityLocalDate.getNow()) + .setSerCollo(serCollo) + .setAnnotazioni("DOC. N. " + numDoc + " DEL " + dataDoc) + .setCodAnag(codAnag) + .setCodVdes(codVdes) + .setCodMdep(codMdep) + .setSegno(1); pack.setOperation(OperationType.INSERT); - pack.setGestione("A"); - pack.setDataCollo(dataCollo); - pack.setSerCollo(serCollo); - pack.setAnnotazioni("DOC. N. " + numDoc + " DEL " + - new SimpleDateFormat("dd/MM/yyyy").format(ldt_dataDoc)); - pack.setCodAnag(codAnag); - pack.setCodVdes(codVdes); - pack.setCodMdep(codMdep); - pack.setSegno(1); - if (dataOrd.compareTo("") != 0) { - pack.setDataOrd(UtilityString.parseLocalDate(dataOrd)); + + if (dataOrd != null) { + pack.setDataOrd(dataOrd); pack.setNumOrd(new Integer(numOrd)); } - if (UtilityString.streNull(queryTransaction).compareTo("") != 0) { - pack.setNativeSql(queryTransaction); + colli.add(pack); + + List> righeCollo = entry.getValue(); + for (HashMap r : righeCollo) { + String codMart = UtilityHashMap.getValueIfExists(r, "cod_mart", "").trim(); + BigDecimal qtaDoc = UtilityHashMap.getValueIfExists(r, "qta_doc"); + Integer rigaOrd = UtilityHashMap.getValueIfExists(r, "riga_ord"); + String lotto = UtilityHashMap.getValueIfExists(r, "partita_mag", "").trim(); + Date dataScad = UtilityString.parseDate(UtilityHashMap.getValueIfExists(r, "data_scad", "").trim()); + String flagEvaso = UtilityHashMap.getValueIfExists(r, "evaso_forzato", "").trim(); + BigDecimal numCnf = UtilityHashMap.getValueIfExists(r, "num_cnf"); + + String queryTransaction = ""; + if (flagEvaso.equalsIgnoreCase("1")) { + queryTransaction = "UPDATE dtb_ordr " + + "SET flag_evaso = 'E' " + + " WHERE data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + " num_ord = " + numOrd + " AND " + + " riga_ord = " + UtilityDB.valueToString(rigaOrd) + " AND " + + " gestione = 'A'"; + } + MtbColr packRow = new MtbColr(); + sql = "SELECT cod_mart " + + " FROM mtb_tcol " + + " WHERE cod_tcol = " + UtilityDB.valueToString(codMart); + + String codMartPed = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + if (!UtilityString.isNullOrEmpty(codMartPed)) { + packRow + .setCodMart(codMartPed) + .setQtaCol(qtaDoc) + .setNumCnf(numCnf); + pack.getMtbColr().add(packRow); + } else { + packRow + .setCodMart(codMart) + .setQtaCol(qtaDoc) + .setNumCnf(numCnf) + .setPartitaMag(lotto) + .setDataScadPartita(dataScad); + if (dataOrd != null) { + packRow.setDataOrd(dataOrd) + .setNumOrd(new Integer(numOrd)) + .setRigaOrd(rigaOrd); + } + } + + if (!UtilityString.isNullOrEmpty(queryTransaction)) { + packRow.setNativeSql(queryTransaction); + } + pack.getMtbColr().add(packRow); + } } - MtbColr packRow = new MtbColr(); - sql = "SELECT cod_mart " + - " FROM mtb_tcol " + - " WHERE cod_tcol = " + UtilityDB.valueToString(codMart); - PreparedStatement Local = multiDBTransactionManager.prepareStatement(sql); - ResultSet ResLocal = Local.executeQuery(); - if (ResLocal.next()) { - codMart = ResLocal.getString("cod_mart"); - packRow.setCodMart(codMart); - packRow.setQtaCol(qtaDoc); - packRow.setNumCnf(numCnf); - listRow.add(packRow); - } else { - packRow.setCodMart(codMart); - packRow.setQtaCol(qtaDoc); - packRow.setNumCnf(numCnf); - packRow.setPartitaMag(lotto); - packRow.setDataScadPartita(dataScad); - if (dataOrd.compareTo("") != 0) { - packRow.setDataOrd(UtilityString.parseLocalDate(dataOrd)); - packRow.setNumOrd(new Integer(numOrd)); - packRow.setRigaOrd(new Integer(rigaOrd)); - } - listRow.add(packRow); - } - ResLocal.close(); - Local.close(); - dataDocOld = dataDoc; - numDocOld = numDoc; - dataOrdOld = dataOrd; - numOrdOld = numOrd; - codVdes = null; - - } - Res.close(); - stm.close(); - - if (!colli.isEmpty()) { - try { + if (!colli.isEmpty()) { colli = entityProcessor.processEntityList(colli, true); final List entitiesWithErrors = colli.stream() @@ -626,52 +595,29 @@ public class Slim2kLogisticService { entitiesWithErrors, (byte[]) null, null, null); } - for (EntityBase entity : colli) { - if (entity.getException() != null) - respList.add(ServiceRestResponse.createNegativeResponse(entity.getException())); - else - respList.add(ServiceRestResponse.createEntityPositiveResponse(entity)); - } - } catch (Exception e) { - resp = new ServiceRestResponse(EsitoType.KO, e.getMessage()); - respList.add(resp); + UtilityEntity.throwEntitiesException(colli); + return colli; } + } finally { + String query = "DELETE FROM documents_export "; + query = UtilityDB.addwhereCond(query, whereCond, false); - try { - - String query = "DELETE FROM documents_export "; - query = UtilityDB.addwhereCond(query, whereCond, false); - - stm = dsSlim2k.getConnection().prepareStatement(query); - stm.executeUpdate(); - stm.close(); - dsSlim2k.getConnection().commit(); - } catch (Exception e) { - dsSlim2k.getConnection().rollback(); - respList.add(new ServiceRestResponse(EsitoType.KO, "Errore nella cancellazione del documento " + e.getMessage())); + if (!UtilityDebug.isDebugExecution()) { + dsSlim2k.getPrimaryConnection().prepareStatement(query).executeUpdate(); + dsSlim2k.commitAll(); + } else { + logger.info(query); } - } else { - resp = new ServiceRestResponse(EsitoType.KO, "Nessun documento da importare"); - respList.add(resp); - } - - - } catch (Exception e) { - throw e; - } finally { - if (!dsSlim2k.isClosed()) { - dsSlim2k.close(); } } - return respList; + return null; } public List importInventario(String type, String format) throws Exception { String whereCondPrecarico = ""; - final Connection connection = multiDBTransactionManager.getPrimaryConnection(); - Map setup = setupGest.getImportSetupSection(connection, type, format); + Map setup = setupGest.getImportSetupSection(multiDBTransactionManager.getPrimaryConnection(), type, format); String profileSlim2k = setup.get("PROFILE"); @@ -689,10 +635,9 @@ public class Slim2kLogisticService { whereCondPrecarico = "s.location not in ('" + precarico.replace("|", "','") + "')"; } - DataSource dsSlim2k = new DataSource(); + List entities = new ArrayList(); - try { - dsSlim2k.initialize(profileSlim2k); + try (MultiDBTransactionManager dsSlim2k = new MultiDBTransactionManager(profileSlim2k)) { Date dataInventario = new Date(); String query = @@ -710,45 +655,34 @@ public class Slim2kLogisticService { + " ORDER BY substring(location, 2, 2), i.item, s.workorder "; query = UtilityDB.addwhereCond(query, whereCondPrecarico, false); - PreparedStatement ps = dsSlim2k.getConnection().prepareStatement(query); - ResultSet rs = ps.executeQuery(); + + List> inv = UtilityDB.executeSimpleQuery(dsSlim2k.getPrimaryConnection(), query); + + Map>> invDepo = inv.stream() + .collect(groupingBy(x -> (String) x.get("codmdep"))); - List righeInv = new ArrayList(); - String codMdep = "", codMdepOld = ""; - while (rs.next()) { - codMdep = rs.getString(1); - if (!codMdep.equals(codMdepOld)) { - MtbInvent mtbInvent = new MtbInvent(); - righeInv = new ArrayList<>(); - mtbInvent.setCodMdep(codMdep); - mtbInvent.setDataInventario(dataInventario); - mtbInvent.setMtbInvenr(righeInv); - mtbInvent.setOperation(OperationType.INSERT); - entities.add(mtbInvent); + for (Map.Entry>> entry : invDepo.entrySet()) { + String codMdep = entry.getKey(); + + MtbInvent mtbInvent = new MtbInvent() + .setCodMdep(codMdep) + .setDataInventario(dataInventario); + mtbInvent.setOperation(OperationType.INSERT); + entities.add(mtbInvent); + + for (HashMap righeInv : entry.getValue()) { + MtbInvenr mtbInvenr = new MtbInvenr() + .setCodMart((String) righeInv.get("item")) + .setPartitaMag((String) righeInv.get("partita_mag")) + .setDataScadPartitaMag((Date) righeInv.get("dataScad")) + .setQtaInv((BigDecimal) righeInv.get("Giacenza")) + .setZona((String) righeInv.get("location")); + mtbInvent.getMtbInvenr().add(mtbInvenr); } - MtbInvenr mtbInvenr = new MtbInvenr(); - mtbInvenr.setCodMart(rs.getString(2)); - mtbInvenr.setPartitaMag(rs.getString(3)); - mtbInvenr.setDataScadPartitaMag(rs.getDate(4)); - mtbInvenr.setQtaInv(rs.getBigDecimal(5)); - mtbInvenr.setZona(rs.getString(7)); - righeInv.add(mtbInvenr); - codMdepOld = codMdep; } - - rs.close(); - ps.close(); - entities = entityProcessor.processEntityList(entities, true); - } catch (Exception e) { - throw e; - } finally { - if (!dsSlim2k.isClosed()) { - dsSlim2k.close(); - } } - return entities; } }