Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-07-31 13:30:06 +02:00

View File

@@ -70,22 +70,22 @@ public class GiacenzaService {
String sql =
(
"SELECT mtb_depo.cod_mdep,\n" +
" CAST(IIF(stb_gest_setup_depo.value IS NOT NULL AND stb_gest_setup_depo.value = 'S', 1, 0) AS BIT) AS flag_attivo\n" +
"FROM mtb_depo\n" +
" LEFT OUTER JOIN stb_gest_setup_depo\n" +
" ON stb_gest_setup_depo.cod_mdep = mtb_depo.cod_mdep \n" +
" AND gest_name = '[GEST_NAME]'\n" +
" AND section = '[SECTION]'\n" +
" AND key_section = 'ATTIVO'\n" +
"WHERE mtb_depo.flag_movimentabile = 'S'\n" +
" AND mtb_depo.cod_vlis IS NOT NULL\n" +
" AND NOT EXISTS(SELECT *\n" +
" FROM stb_gest_setup_depo\n" +
" WHERE gest_name = '[GEST_NAME]'\n" +
" AND section = '[SECTION]'\n" +
" AND key_section = 'REPLACE_DEPO'\n" +
" AND stb_gest_setup_depo.cod_mdep = mtb_depo.cod_mdep)")
"SELECT mtb_depo.cod_mdep,\n" +
" CAST(IIF(stb_gest_setup_depo.value IS NOT NULL AND stb_gest_setup_depo.value = 'S', 1, 0) AS BIT) AS flag_attivo\n" +
"FROM mtb_depo\n" +
" LEFT OUTER JOIN stb_gest_setup_depo\n" +
" ON stb_gest_setup_depo.cod_mdep = mtb_depo.cod_mdep \n" +
" AND gest_name = '[GEST_NAME]'\n" +
" AND section = '[SECTION]'\n" +
" AND key_section = 'ATTIVO'\n" +
"WHERE mtb_depo.flag_movimentabile = 'S'\n" +
" AND mtb_depo.cod_vlis IS NOT NULL\n" +
" AND NOT EXISTS(SELECT *\n" +
" FROM stb_gest_setup_depo\n" +
" WHERE gest_name = '[GEST_NAME]'\n" +
" AND section = '[SECTION]'\n" +
" AND key_section = 'REPLACE_DEPO'\n" +
" AND stb_gest_setup_depo.cod_mdep = mtb_depo.cod_mdep)")
.replace("[GEST_NAME]", gestName)
.replace("[SECTION]", section);
@@ -140,10 +140,10 @@ public class GiacenzaService {
elencoDepositi.add(codMdep);
String sql = Query.format(
"SELECT cod_mdep\n" +
"FROM stb_gest_setup_depo \n" +
"WHERE gest_name = 'DATI_AZIENDA' and section = 'GIACENZA_DA_INV' and key_section = 'REPLACE_DEPO' and value = %s\n",
codMdep);
"SELECT cod_mdep\n" +
"FROM stb_gest_setup_depo \n" +
"WHERE gest_name = 'DATI_AZIENDA' and section = 'GIACENZA_DA_INV' and key_section = 'REPLACE_DEPO' and value = %s\n",
codMdep);
elencoDepositi.addAll(UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql));
return elencoDepositi;
@@ -190,7 +190,7 @@ public class GiacenzaService {
" INNER JOIN (" + queryArt + ") a ON g.cod_mart = a.cod_mart\n" +
" INNER JOIN mtb_aart ON a.cod_mart_mov = mtb_aart.cod_mart\n" +
"WHERE g.tipo_variazione <> 'D'\n" +
" AND g.cod_mdep IN ([elencoDepositi]) "+
" AND g.cod_mdep IN ([elencoDepositi]) " +
" AND NOT EXISTS\n" +
" (SELECT cod_mart\n" +
" FROM carelli_giacenza_prog\n" +
@@ -282,7 +282,7 @@ public class GiacenzaService {
"GROUP BY movimenti.cod_mdep, art.cod_mart_mov,\n" +
" giac.qta_iniz\n")
.replace("[COD_MDEP]", codMdep)
.replace("[ELENCO_DEPOSITI]", UtilityDB.listValueToString(elencoDepositi) );
.replace("[ELENCO_DEPOSITI]", UtilityDB.listValueToString(elencoDepositi));
List<CarelliGiacenzaProg> carelliGiacenzaProgs = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, CarelliGiacenzaProg.class);
@@ -730,117 +730,72 @@ public class GiacenzaService {
if (!UtilityString.isNullOrEmpty(listiniAcquisto)) {
listini = Arrays.asList(listiniAcquisto.split("\\|"));
}
if (readOrdini ) {
sql = "WITH incoming_stock_documenti AS (\n" +
"/*\n" +
"Estrazione dei documenti (bolle web) di merce consegnata\n" +
"*/\n" +
"\n" +
" SELECT wdtb_doct.cod_mdep,\n" +
" wdtb_docr.cod_mart,\n" +
" wdtb_docr.data_ord,\n" +
" wdtb_docr.num_ord,\n" +
" riga_ord,\n" +
" wdtb_doct.cod_anag,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv AS qta_doc,\n" +
" wdtb_doct.flag_elaborato\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 21, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_ordini AS (\n" +
"/*\n" +
"Estrazione degli ordini d'acquisto in consegna\n" +
"*/\n" +
" SELECT r.cod_mdep,\n" +
" r.cod_mart,\n" +
" CASE\n" +
" WHEN r.data_cons = r.data_ord\n" +
" THEN CAST(getdate() AS DATE)\n" +
" ELSE r.data_cons\n" +
" END AS data_cons,\n" +
" r.qta_ord,\n" +
" r.data_ord,\n" +
" r.riga_ord,\n" +
" r.num_ord,\n" +
" cod_anag\n" +
" FROM dtb_ordt t\n" +
" INNER JOIN dtb_ordr r\n" +
" ON t.gestione = r.gestione\n" +
" AND t.data_ord = r.data_ord\n" +
" AND t.num_ord = r.num_ord\n" +
" WHERE\n" +
" -- ordini acquisto\n" +
" t.gestione = 'A'\n" +
" -- ordini non annullati\n" +
" AND t.flag_annulla = 'N'\n" +
" -- ordii non sospesi\n" +
" AND t.flag_sospeso = 'N'\n" +
" AND (\n" +
" -- ordini futuri\n" +
" (r.data_cons >= CAST(getdate() AS DATE))\n" +
" OR\n" +
" -- ordini fuori piano logistico (r.data_cons = r.data_ord), inevasi e fatti negli ultimi 3 giorni\n" +
" (\n" +
" r.data_cons = r.data_ord\n" +
" AND flag_evaso = 'I'\n" +
" AND r.data_ord >= dateadd(DAY, - 3, CAST(getdate() AS DATE))\n" +
" )\n" +
" )\n" +
" -- prendiamo i soli ordini del SECCO, sarà da modificare quando inizieranno ad ordinare anche altri (es. APULD)\n" +
( listini != null && !listini.isEmpty() ?" AND t.listino IN (" + UtilityDB.listValueToString(listini) + ")\n":"") +
" -- ordine non ancora evaso\n" +
" AND flag_evaso <> 'E'\n" +
" -- filtro solamente un Pdv\n" +
" AND r.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_doc_consegnati AS (\n" +
"/*\n" +
"Estrazione dei documenti consegnati\n" +
"*/\n" +
" SELECT DISTINCT wdtb_docr.num_ord, wdtb_docr.data_ord, wdtb_doct.cod_anag\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 7, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.flag_elaborato = 'N')\n" +
"\n" +
"-- Step 4) Unione delle estrazioni precedenti [MySQL]\n" +
"\n" +
"SELECT ISNULL(d.cod_mdep, o.cod_mdep) AS store_code,\n" +
" ISNULL(d.cod_mart, o.cod_mart) AS art_code,\n" +
" data_cons,\n" +
" SUM(ISNULL(qta_doc, qta_ord)) AS incoming_stock\n" +
"FROM incoming_stock_ordini o\n" +
" FULL OUTER JOIN incoming_stock_documenti d\n" +
" ON o.cod_mdep = d.cod_mdep AND o.cod_mart = d.cod_mart AND o.data_ord = d.data_ord AND\n" +
" o.num_ord = d.num_ord AND o.cod_anag = d.cod_anag AND o.riga_ord = d.riga_ord\n" +
" LEFT JOIN incoming_stock_doc_consegnati k\n" +
" ON o.num_ord = k.num_ord AND o.cod_anag = k.cod_anag AND o.data_ord = k.data_ord\n" +
"WHERE (flag_elaborato = 'I' OR flag_elaborato IS NULL)\n" +
" AND ((d.cod_mart IS NOT NULL) OR (d.cod_mart IS NULL AND k.num_ord IS NULL))\n" +
"GROUP BY ISNULL(d.cod_mdep, o.cod_mdep), ISNULL(d.cod_mart, o.cod_mart), data_cons, k.num_ord\n";
if (readOrdini) {
sql =
"WITH ordine AS (SELECT dtb_ordt.cod_mdep,\n" +
" dtb_ordr.cod_mart,\n" +
" dtb_ordr.qta_ord,\n" +
" dtb_ordr.data_cons\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione\n" +
" AND dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" AND dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" WHERE dtb_ordt.gestione = 'A'\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordt.cod_mdep = " + UtilityDB.valueToString(codMdep) + "\n" +
(listini != null && !listini.isEmpty() ? " AND dtb_ordt.listino IN (" + UtilityDB.listValueToString(listini) + ")\n" : "") +
" AND dtb_ordr.cod_mart IS NOT NULL\n" +
" AND (dtb_ordr.data_cons >= CAST(GETDATE() AS DATE) OR\n" +
" (\n" +
" dtb_ordr.data_cons = dtb_ordr.data_ord\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.data_ord >= DATEADD(DAY, - 3, CAST(GETDATE() AS DATE))\n" +
" )\n" +
" )\n" +
" AND NOT EXISTS (SELECT *\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr ON wdtb_doct.cod_dtip = wdtb_docr.cod_dtip\n" +
" AND wdtb_docr.cod_anag = wdtb_doct.cod_anag\n" +
" AND wdtb_docr.data_doc = wdtb_doct.data_doc\n" +
" AND wdtb_docr.ser_doc = wdtb_doct.ser_doc\n" +
" AND wdtb_docr.num_doc = wdtb_doct.num_doc\n" +
" WHERE wdtb_docr.data_ord = dtb_ordr.data_ord\n" +
" AND wdtb_docr.num_ord = dtb_ordr.num_ord))\n" +
"\n" +
" , doc AS (SELECT wdtb_doct.cod_mdep,\n" +
" wdtb_docr.cod_mart,\n" +
" wdtb_docr.qta_doc\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr ON wdtb_doct.cod_dtip = wdtb_docr.cod_dtip\n" +
" AND wdtb_docr.cod_anag = wdtb_doct.cod_anag\n" +
" AND wdtb_docr.data_doc = wdtb_doct.data_doc\n" +
" AND wdtb_docr.ser_doc = wdtb_doct.ser_doc\n" +
" AND wdtb_docr.num_doc = wdtb_doct.num_doc\n" +
" AND wdtb_docr.cod_mart IS NOT NULL\n" +
(listini != null && !listini.isEmpty() ? " AND wdtb_doct.listino IN (" + UtilityDB.listValueToString(listini) + ")\n" : "") +
" WHERE wdtb_doct.cod_mdep = " + UtilityDB.valueToString(codMdep) + "\n" +
" AND wdtb_doct.flag_elaborato = 'I')\n" +
"\n" +
"SELECT ISNULL(doc.cod_mdep, ordine.cod_mdep) AS cod_mdep,\n" +
" ISNULL(doc.cod_mart, ordine.cod_mart) AS cod_mart,\n" +
" ISNULL(doc.qta_doc, 0) + ISNULL(ordine.qta_ord, 0) AS merce_in_arrivo\n" +
"FROM doc\n" +
" FULL OUTER JOIN ordine ON doc.cod_mart = ordine.cod_mart\n" +
" AND doc.cod_mdep = ordine.cod_mdep\n" +
" AND doc.cod_mdep = ordine.cod_mdep";
List<HashMap<String, Object>> merceInArrivo = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), sql);
if (listGiacenza != null) {
merceInArrivo
.forEach(merce -> {
String storeCode = (String) merce.get("store_code");
String artCode = (String) merce.get("art_code");
BigDecimal incomingStock = (BigDecimal) merce.get("incoming_stock");
listGiacenza.stream()
.filter(x -> x.getCodMart().equals(artCode) && x.getCodMdep().equals(storeCode))
.filter(x -> x.getCodMart().equalsIgnoreCase((String) merce.get("cod_mart")) &&
x.getCodMdep().equalsIgnoreCase((String) merce.get("cod_mdep")))
.findFirst()
.ifPresent(x -> {
x.setIncomingStock(incomingStock);
x.setIncomingStock((BigDecimal) merce.get("merce_in_arrivo"));
});
});
}
@@ -853,10 +808,10 @@ public class GiacenzaService {
LocalDate dataGiac = UtilityLocalDate.getNow();
String sql =
Query.format(
"SELECT DISTINCT cod_mdep\n" +
"FROM carelli_giacenza_prog \n" +
"WHERE not exists (select * from carelli_giacenza_prog_gg where carelli_giacenza_prog_gg.cod_mdep = carelli_giacenza_prog.cod_mdep and data_giac = %S)",
dataGiac);
"SELECT DISTINCT cod_mdep\n" +
"FROM carelli_giacenza_prog \n" +
"WHERE not exists (select * from carelli_giacenza_prog_gg where carelli_giacenza_prog_gg.cod_mdep = carelli_giacenza_prog.cod_mdep and data_giac = %S)",
dataGiac);
List<String> codMdepList = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
@@ -879,7 +834,7 @@ public class GiacenzaService {
UtilityEntity.throwEntitiesException(entityProcessor.processEntityList(ggArchivio, true));
multiDBTransactionManager.commitAll();
} catch (Exception e) {
logger.error(GiacenzaService.class + " Errore nell'aggiornamento della giacenza del deposito " +codMdep + " " + e.getMessage(), e);
logger.error(GiacenzaService.class + " Errore nell'aggiornamento della giacenza del deposito " + codMdep + " " + e.getMessage(), e);
multiDBTransactionManager.rollbackAll();
}
}