Gestito versamento con data scad ed aggiunta partita mag prod in mes getworkorders

This commit is contained in:
2025-04-11 18:26:35 +02:00
parent 69a1a6906e
commit fef719b4da
7 changed files with 923 additions and 143 deletions

View File

@@ -2,6 +2,12 @@ package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration; import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface; import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.entity.WtbGestSetupUser;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityString;
import java.util.List;
public class Migration_20250404180134 extends BaseMigration implements MigrationModelInterface { public class Migration_20250404180134 extends BaseMigration implements MigrationModelInterface {
@@ -10,15 +16,40 @@ public class Migration_20250404180134 extends BaseMigration implements Migration
if (isHistoryDB()) if (isHistoryDB())
return; return;
createSetup("PVM", "MONITORAGGIO_LINEE_V2", "ENABLE_MODIFICA_SCADENZA_LOTTO", "N", String sql =
"SELECT value\n" +
"FROM stb_gest_setup\n" +
"WHERE key_section = 'ENABLE_MODIFICA_LOTTO_SUGGERITO'";
String value = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(this.advancedDataSource.getConnection(), sql);
if (UtilityString.isNullOrEmpty(value)) {
value = "N";
}
createSetup("PVM", "MONITORAGGIO_LINEE_V2", "ENABLE_MODIFICA_SCADENZA_LOTTO", value,
"Se abilitato permette la modifica della data di scadenza del lotto proposto in fase di assegnazione all'ordine.", "Se abilitato permette la modifica della data di scadenza del lotto proposto in fase di assegnazione all'ordine.",
false, "SI_NO", false, false, false, "SI_NO", false, false,
true, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'"); true, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("MES", "SETUP", "COD_MGRP_SCADENZA_MULTIPLA", null, // Sposto setup esistente a nuova
"Setup per identificare i tipi di articoli della quale attivare la logica di generazione dei lotti con scadenza multipla.", sql =
false, "SI_NO", false, false, "SELECT user_name, gest_name, section, key_section, value\n" +
false, false, false, "mtb_grup", false, "SELECT 'S' UNION ALL SELECT 'N'"); "FROM wtb_gest_setup_user\n" +
"WHERE key_section = 'ENABLE_MODIFICA_LOTTO_SUGGERITO'";
List<WtbGestSetupUser> userSetupConfig = UtilityDB.executeSimpleQueryDTO(advancedDataSource.getConnection(), sql, WtbGestSetupUser.class);
if (userSetupConfig != null && !userSetupConfig.isEmpty()) {
for (WtbGestSetupUser userSetup : userSetupConfig) {
userSetup
.setKeySection("ENABLE_MODIFICA_SCADENZA_LOTTO");
userSetup.setOperation(OperationType.INSERT_OR_UPDATE);
userSetup.manageWithParentConnection(advancedDataSource.getConnection());
}
}
} }
@Override @Override

View File

@@ -0,0 +1,41 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250410130507 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("MES", "SETUP", "CONTROLLO_SCADENZA_MULTIPLA", null,
"Se true sulle linee scelte attiva la logica di generazione dei lotti con scadenza multipla.",
false, "SI_NO", false, false,
false, false, false, "jtb_fasi", false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomerDb(IntegryCustomerDB.RossoGargano_RossoGargano)) {
executeStatement(
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'A1', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'A2', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'A3', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B1', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B2', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B3', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B4', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B5', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B6', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B7', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'C1', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'C2', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'C3', N'S');"
);
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,605 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250411123155 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("MES_GetWorkOrders",
"CREATE FUNCTION [dbo].[MES_GetWorkOrders](@codJfas VARCHAR(50), @dateStart DATE, @dateEnd DATE, @flagEvaso VARCHAR(1),\n" +
" @codAnag VARCHAR(5))\n" +
" RETURNS TABLE\n" +
" AS RETURN\n" +
" -- DECLARE @codJfas VARCHAR(5) = 'L1'\n" +
" -- DECLARE @dateStart DATE = DATEADD(MONTH, -1, GETDATE())\n" +
" -- DECLARE @dateEnd DATE = DATEADD(MONTH, 1, GETDATE())\n" +
" -- DECLARE @flagEvaso VARCHAR(1) = 'I'\n" +
" -- DECLARE @codAnag VARCHAR(5) = null;\n" +
"\n" +
"--Funzione per calcolare la sequenza di ordini su una linea e il RunTimeEND\n" +
" WITH setup AS (SELECT ISNULL(@dateStart, DATEADD(DAY, -14, GETDATE())) AS date_start,\n" +
" ISNULL(@dateEnd, GETDATE()) AS date_end,\n" +
" ISNULL(@flagEvaso, 'I') AS flag_evaso,\n" +
" @codJfas AS cod_jfas,\n" +
" @codAnag AS cod_anag),\n" +
"\n" +
" setup_depo AS (SELECT cod_mdep, value AS flag_carico_scarico_immediato\n" +
" FROM stb_gest_setup_depo\n" +
" WHERE gest_name = 'CARICO_SCARICO_PF'\n" +
" AND section = 'SETUP'\n" +
" AND key_section = 'GENERA_CARICO_SCARICO_IMMEDIATO'),\n" +
"\n" +
" setup_run_time AS (SELECT value AS flag_restart\n" +
" FROM stb_gest_setup\n" +
" WHERE gest_name = 'PVM'\n" +
" AND section = 'MONITORAGGIO_LINEE_V2'\n" +
" AND key_section = 'RESTART_RUN_TIME_END'),\n" +
"\n" +
" mtb_colr_sum_filtered_rows AS (SELECT gestione,\n" +
" data_collo,\n" +
" num_collo,\n" +
" ser_collo,\n" +
" cod_mart,\n" +
" data_ord,\n" +
" num_ord,\n" +
" qta_col,\n" +
" num_cnf\n" +
" FROM mtb_colr\n" +
" WHERE gestione_rif IS NULL\n" +
" AND data_collo_rif IS NULL\n" +
" AND ser_collo_rif IS NULL\n" +
" AND num_collo_rif IS NULL),\n" +
"\n" +
" mtb_colr_sum_valid_colli AS (SELECT DISTINCT gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo\n" +
" FROM mtb_colt\n" +
" CROSS APPLY setup\n" +
" WHERE segno = 1\n" +
" AND data_ord BETWEEN setup.date_start AND setup.date_end),\n" +
"\n" +
" mtb_colr_sum AS (SELECT colr.gestione,\n" +
" colr.data_collo,\n" +
" colr.num_collo,\n" +
" colr.ser_collo,\n" +
" colr.cod_mart,\n" +
" colr.data_ord,\n" +
" colr.num_ord,\n" +
" SUM(colr.qta_col) AS qta_col,\n" +
" SUM(colr.num_cnf) AS num_cnf\n" +
" FROM mtb_colr_sum_valid_colli colt\n" +
" INNER JOIN mtb_colr_sum_filtered_rows colr\n" +
" ON colr.gestione = colt.gestione\n" +
" AND colr.data_collo = colt.data_collo\n" +
" AND colr.num_collo = colt.num_collo\n" +
" AND colr.ser_collo = colt.ser_collo\n" +
" GROUP BY colr.gestione,\n" +
" colr.data_collo,\n" +
" colr.num_collo,\n" +
" colr.ser_collo,\n" +
" colr.cod_mart,\n" +
" colr.data_ord,\n" +
" colr.num_ord),\n" +
"\n" +
" machine_last_event AS (SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" cod_cmac,\n" +
" MAX(data_mov) AS max_data_mov\n" +
" FROM dtb_ord_macc\n" +
" GROUP BY gestione, data_ord, num_ord, cod_cmac),\n" +
"\n" +
" machine_event_values AS (SELECT evento,\n" +
" IIF(tipologia = 'ENTRATA', 1, -1) AS value\n" +
" FROM dtb_ord_macc_eventi),\n" +
"\n" +
" in_production_machines AS (SELECT dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord,\n" +
" LAST_VALUE(dtb.data_mov) OVER (ORDER BY dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord) AS max_data_mov,\n" +
" LAST_VALUE(ev.value) OVER (ORDER BY dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord) AS final_value\n" +
" FROM dtb_ord_macc dtb\n" +
" INNER JOIN machine_last_event le\n" +
" ON dtb.data_ord = le.data_ord\n" +
" AND dtb.num_ord = le.num_ord\n" +
" AND dtb.gestione = le.gestione\n" +
" AND dtb.cod_cmac = le.cod_cmac\n" +
" AND dtb.data_mov = le.max_data_mov\n" +
" INNER JOIN machine_event_values ev\n" +
" ON dtb.evento = ev.evento\n" +
" CROSS APPLY setup\n" +
" WHERE dtb.data_ord BETWEEN setup.date_start AND setup.date_end),\n" +
"\n" +
" dtb_ord_with_max_step AS (SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" id_step AS id_step,\n" +
" MAX(id_step) OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ord_steps.num_fase) AS max_id_step,\n" +
" num_fase,\n" +
" MAX(num_fase) OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord) AS max_fase,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ord_steps.flag_step_attivo,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ord_steps.qta_lav,\n" +
" dtb_ord_steps.qta_prod,\n" +
" dtb_ord_steps.hr_num,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" SUM(CAST(DATEDIFF(S, data_iniz, ISNULL(data_fine, GETDATE())) AS BIGINT))\n" +
" OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" num_fase,\n" +
" dtb_ord_steps.cod_jfas) AS elapsed_time\n" +
" FROM dtb_ord_steps\n" +
" CROSS APPLY setup\n" +
" WHERE data_ord BETWEEN setup.date_start AND setup.date_end\n" +
" AND gestione = 'L'),\n" +
"\n" +
" dtb_ord_max_step AS (SELECT DISTINCT IIF(in_production_machines.max_data_mov IS NOT NULL AND\n" +
" (dtb_ord_with_max_step.id_step = 0 OR\n" +
" (dtb_ord_with_max_step.id_step > 0 AND\n" +
" dtb_ord_with_max_step.data_fine IS NOT NULL AND\n" +
" DATEDIFF(MINUTE,\n" +
" dtb_ord_with_max_step.data_fine,\n" +
" in_production_machines.max_data_mov) >\n" +
" 5)), 1, 0) AS starting_machines,\n" +
" dtb_ord_with_max_step.*\n" +
" FROM dtb_ord_with_max_step\n" +
" LEFT OUTER JOIN in_production_machines\n" +
" ON dtb_ord_with_max_step.data_ord =\n" +
" in_production_machines.data_ord\n" +
" AND\n" +
" dtb_ord_with_max_step.num_ord =\n" +
" in_production_machines.num_ord\n" +
" AND\n" +
" dtb_ord_with_max_step.gestione =\n" +
" in_production_machines.gestione\n" +
" AND in_production_machines.final_value = 1\n" +
"\n" +
" WHERE max_id_step = id_step),\n" +
"\n" +
" riga_ord_prod_w_materia_prima AS (SELECT dtb_ordr.data_ord AS data_ord_prod,\n" +
" dtb_ordr.num_ord AS num_ord_prod,\n" +
" dtb_ordr.riga_ord AS riga_ord_prod,\n" +
" dtb_ordr.gestione AS gestione_ord_prod,\n" +
" IIF(CONVERT(DATE, dtb_ordr.data_ord) >= CONVERT(DATE, GETDATE()),\n" +
" 'S',\n" +
" 'N') AS flag_avviabile,\n" +
" mtb_aart_prod.flag_tracciabilita,\n" +
" dtb_ordr.unt_ord,\n" +
" dtb_ordr.rap_conv,\n" +
" dtb_ordr.unt_ord2,\n" +
" CAST(ROUND(dtb_ordr.qta_ord2 /\n" +
" ISNULL(NULLIF(dtb_ordr.qta_ord, 0), 1),\n" +
" 5) AS NUMERIC(20, 5)) AS rap_conv2,\n" +
" dtb_ordr.unt_ord3,\n" +
" CAST(ROUND(dtb_ordr.qta_ord3 /\n" +
" ISNULL(NULLIF(dtb_ordr.qta_ord, 0), 1),\n" +
" 5) AS NUMERIC(20, 5)) AS rap_conv3,\n" +
" dtb_ordr.qta_ord,\n" +
" dtb_ordr.qta_ord2,\n" +
" dtb_ordr.qta_ord3,\n" +
" dtb_ordr.num_cnf,\n" +
" IIF(mtb_aart_prod.unt_mis IN ('PZ', 'NR'), mtb_aart_prod.qta_cnf,\n" +
" IIF(mtb_aart_prod.unt_mis2 IN ('PZ', 'NR'),\n" +
" mtb_aart_prod.qta_cnf /\n" +
" ISNULL(NULLIF(mtb_aart_prod.rap_conv2, 0), 1),\n" +
" mtb_aart_prod.qta_cnf)) AS cal_qta_cnf,\n" +
" IIF(dtb_ordr.colli_pedana = 0 OR dtb_ordr.colli_pedana = 1,\n" +
" IIF(mtb_aart_prod.colli_pedana = 0, 1, mtb_aart_prod.colli_pedana),\n" +
" dtb_ordr.colli_pedana)\n" +
" AS colli_pedana,\n" +
" dtb_ordr.pos_riga,\n" +
" dtb_ordr.cod_mdep,\n" +
"\n" +
" IIF(mtb_aart_prod.unt_mis IN ('PZ', 'NR'), 1,\n" +
" IIF(mtb_aart_prod.unt_mis2 IN ('PZ', 'NR') AND\n" +
" NULLIF(mtb_aart_prod.rap_conv2, 0) IS NOT NULL,\n" +
" mtb_aart_prod.rap_conv2,\n" +
" 1)) AS calc_rap_conv,\n" +
" mtb_aart_prod.gg_scad_partita,\n" +
" mtb_aart_prod.qta_cnf\n" +
" FROM dtb_ordr\n" +
" INNER JOIN mtb_aart mtb_aart_prod ON mtb_aart_prod.cod_mart = dtb_ordr.cod_mart\n" +
" WHERE dtb_ordr.gestione = 'A'),\n" +
"\n" +
" ord_lav AS (SELECT dtb_ordt.cod_jcom,\n" +
" riga_ord_prod_w_materia_prima.data_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.riga_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.flag_avviabile,\n" +
" riga_ord_prod_w_materia_prima.flag_tracciabilita,\n" +
" riga_ord_prod_w_materia_prima.unt_ord,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv,\n" +
" riga_ord_prod_w_materia_prima.unt_ord2,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv2\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv2\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv2,\n" +
" riga_ord_prod_w_materia_prima.unt_ord3,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv3\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv3\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv3,\n" +
" ISNULL(dtb_ordt.descr_estesa_prod, dtb_ordt.descrizione_prod) AS descrizione_prod,\n" +
" riga_ord_prod_w_materia_prima.num_cnf *\n" +
" riga_ord_prod_w_materia_prima.cal_qta_cnf AS num_pezzi,\n" +
" riga_ord_prod_w_materia_prima.num_cnf,\n" +
" riga_ord_prod_w_materia_prima.gg_scad_partita,\n" +
" riga_ord_prod_w_materia_prima.qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.colli_pedana,\n" +
" riga_ord_prod_w_materia_prima.num_cnf /\n" +
" riga_ord_prod_w_materia_prima.colli_pedana AS num_pedane,\n" +
" riga_ord_prod_w_materia_prima.pos_riga,\n" +
" dtb_ordt.flag_evaso_prod,\n" +
" dtb_ordt.flag_evaso_forzato,\n" +
" CASE\n" +
" WHEN (dtb_ordt.flag_evaso_prod = 'I' OR\n" +
" (setupCaricoImmediato.flag_carico_scarico_immediato = 'S' AND\n" +
" flag_evaso_prod = 'E'))\n" +
" AND dtb_ordt.flag_evaso_forzato = 'N'\n" +
" THEN 'I'\n" +
" WHEN flag_evaso_prod <> 'I' AND dtb_ordt.flag_evaso_forzato = 'S'\n" +
" THEN flag_evaso_prod\n" +
" END AS flag_ordine_evaso,\n" +
" dtb_ordt.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.cod_tcol_UL,\n" +
" mtb_tcol.descrizione AS descrizione_tcol,\n" +
" dtb_ordt.cod_anag,\n" +
" gtb_anag.rag_soc AS rag_soc_anag,\n" +
" gtb_anag.part_iva,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordt.cod_vdes,\n" +
" dtb_ordt.cod_mdep,\n" +
" ISNULL(riga_ord_prod_w_materia_prima.cod_mdep, dtb_ordt.cod_mdep) AS cod_mdep_prod,\n" +
" dtb_ordt.num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ordt.cod_jfas AS cod_jfas_lav,\n" +
" mtb_partita_mag.partita_mag,\n" +
" ISNULL(mtb_partita_mag.partita_mag_prod,\n" +
" mtb_partita_mag.partita_mag) AS partita_mag_prod,\n" +
" dtb_ordt.note AS note_lav,\n" +
" mtb_partita_mag.data_scad,\n" +
" dtb_ordt.cod_prod,\n" +
" jtb_comt.descrizione AS descrizione_commessa,\n" +
" dtb_ordt.data_iniz_prod,\n" +
" dtb_ord_steps.id_step,\n" +
" dtb_ord_steps.max_fase,\n" +
" dtb_ord_steps.num_fase,\n" +
" IIF(mtb_aart.flag_qta_cnf_fissa = 'S' AND\n" +
" (mtb_aart.qta_cnf > 1 OR riga_ord_prod_w_materia_prima.colli_pedana > 1), 'Colli',\n" +
" jtb_cicl.unt_mis_prod)\n" +
" AS unt_mis_prod,\n" +
" IIF(mtb_aart.flag_qta_cnf_fissa = 'S' AND\n" +
" (mtb_aart.qta_cnf > 1 OR riga_ord_prod_w_materia_prima.colli_pedana > 1),\n" +
" riga_ord_prod_w_materia_prima.colli_pedana, jtb_cicl.qta_prod)\n" +
" AS qta_batch_prod,\n" +
" IIF(mtb_aart.qta_cnf > 1 OR riga_ord_prod_w_materia_prima.colli_pedana > 1,\n" +
" mtb_aart.qta_cnf,\n" +
" jtb_cicl.rap_conv_prod) AS rap_conv_prod,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ord_steps.qta_lav AS qta_lav,\n" +
" IIF(dtb_ord_steps.qta_prod <> 0, dtb_ord_steps.qta_prod,\n" +
" dtb_ordt.qta_prod) AS qta_prod,\n" +
" dtb_ord_steps.hr_num,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" 3600 / (ISNULL(NULLIF(jtb_dist_clav_dir.duration, 0), 1) /\n" +
" ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) AS prod_std,\n" +
" dtb_ord_steps.elapsed_time,\n" +
" SUM(ISNULL(mtb_colr_carico.qta_col, 0)) AS qta_trasferite,\n" +
" COUNT(mtb_colr_carico.num_collo) AS udc_trasferiti,\n" +
" COUNT(colli_lotto.num_collo) AS uds_scaricati,\n" +
" CASE\n" +
" WHEN dtb_ord_steps.id_step = 0\n" +
" THEN IIF(dtb_ord_steps.starting_machines = 1, 'IN AVVIO', 'PROGRAMMATO')\n" +
" WHEN dtb_ord_steps.data_fine IS NULL\n" +
" THEN 'IN CORSO'\n" +
" ELSE 'IN PAUSA'\n" +
" END AS stato,\n" +
" CONVERT(INT, SUM(ISNULL(\n" +
" mtb_colr_carico.qta_col / riga_ord_prod_w_materia_prima.calc_rap_conv,\n" +
" 0))) AS pz_trasferiti,\n" +
" CASE\n" +
" WHEN (jtb_dist_clav_dir.duration / ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) *\n" +
" (dtb_ordt.qta_prod * dtb_ordt.rap_conv_prod -\n" +
" SUM(ISNULL(mtb_colr_carico.qta_col, 0))) > 0\n" +
" THEN\n" +
" (jtb_dist_clav_dir.duration /\n" +
" ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) *\n" +
" (dtb_ordt.qta_prod * dtb_ordt.rap_conv_prod -\n" +
" SUM(ISNULL(mtb_colr_carico.qta_col, 0)))\n" +
" ELSE 0 END AS run_time_sec,\n" +
" jl.id_lotto,\n" +
" jlt.data_lotto,\n" +
" mtb_aart.peso_kg,\n" +
" dtb_ordt.data_cons_prod_max\n" +
" FROM dtb_ord_max_step dtb_ord_steps\n" +
" INNER JOIN dtb_ordt ON dtb_ord_steps.data_ord = dtb_ordt.data_ord\n" +
" AND dtb_ord_steps.num_ord = dtb_ordt.num_ord\n" +
" AND dtb_ord_steps.gestione = dtb_ordt.gestione\n" +
" LEFT OUTER JOIN setup_depo setupCaricoImmediato\n" +
" ON dtb_ordt.cod_mdep = setupCaricoImmediato.cod_mdep\n" +
" LEFT OUTER JOIN jtb_dist_clav_dir\n" +
" ON dtb_ordt.cod_prod = jtb_dist_clav_dir.cod_prod AND\n" +
" dtb_ordt.cod_jfas = jtb_dist_clav_dir.cod_jfas\n" +
" LEFT OUTER JOIN mtb_partita_mag\n" +
" ON dtb_ordt.partita_mag = mtb_partita_mag.partita_mag AND\n" +
" dtb_ordt.cod_prod = mtb_partita_mag.cod_mart AND\n" +
" mtb_partita_mag.flag_stato = 'A'\n" +
" LEFT OUTER JOIN mtb_colr_sum mtb_colr_carico\n" +
" ON dtb_ordt.data_ord = mtb_colr_carico.data_ord AND\n" +
" dtb_ordt.gestione = mtb_colr_carico.gestione AND\n" +
" dtb_ordt.num_ord = mtb_colr_carico.num_ord AND\n" +
" dtb_ordt.cod_prod = mtb_colr_carico.cod_mart\n" +
" LEFT OUTER JOIN jtb_comt ON dtb_ordt.cod_jcom = jtb_comt.cod_jcom\n" +
" LEFT OUTER JOIN riga_ord_prod_w_materia_prima\n" +
" ON riga_ord_prod_w_materia_prima.gestione_ord_prod =\n" +
" dtb_ordt.gestione_rif AND\n" +
" riga_ord_prod_w_materia_prima.data_ord_prod =\n" +
" dtb_ordt.data_ord_rif AND\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod =\n" +
" dtb_ordt.num_ord_rif AND\n" +
" riga_ord_prod_w_materia_prima.riga_ord_prod = dtb_ordt.riga_ord_rif\n" +
" LEFT OUTER JOIN jtb_cicl ON jtb_cicl.cod_prod = dtb_ordt.cod_prod\n" +
" LEFT OUTER JOIN mtb_aart ON mtb_aart.cod_mart = dtb_ordt.cod_prod\n" +
" LEFT OUTER JOIN gtb_anag ON dtb_ordt.cod_anag = gtb_anag.cod_anag\n" +
" LEFT OUTER JOIN mtb_tcol ON dtb_ordt.cod_tcol_UL = mtb_tcol.cod_tcol\n" +
" LEFT OUTER JOIN jtb_lotr jl\n" +
" ON dtb_ord_steps.cod_jfas = jl.cod_jfas AND\n" +
" dtb_ordt.gestione = jl.gestione AND\n" +
" dtb_ordt.data_ord = jl.data_ord AND\n" +
" dtb_ordt.num_ord = jl.num_ord\n" +
" LEFT OUTER JOIN jtb_lott jlt\n" +
" ON jl.cod_jfas = jlt.cod_jfas AND jl.id_lotto = jlt.id_lotto\n" +
" LEFT OUTER JOIN mtb_colt colli_lotto ON jlt.id_lotto = colli_lotto.id_lotto\n" +
"\n" +
" CROSS APPLY setup\n" +
" WHERE dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ord_steps.data_ord BETWEEN setup.date_start AND setup.date_end\n" +
" AND (setup.flag_evaso IS NULL\n" +
" OR (\n" +
" (setup.flag_evaso = 'I'\n" +
" AND\n" +
" dtb_ord_steps.flag_step_attivo = 'S'\n" +
" AND (flag_evaso_prod = 'I'\n" +
" OR\n" +
" (setupCaricoImmediato.flag_carico_scarico_immediato = 'S'\n" +
" AND\n" +
" flag_evaso_prod = 'E'))\n" +
" AND dtb_ordt.flag_evaso_forzato = 'N'\n" +
" )\n" +
" OR (setup.flag_evaso = 'E '\n" +
" AND (flag_evaso_prod = 'E' OR jlt.data_chiusura IS NOT NULL))\n" +
" )\n" +
" )\n" +
" AND (setup.cod_jfas IS NULL\n" +
" OR dtb_ordt.cod_jfas = setup.cod_jfas)\n" +
" AND (setup.cod_anag IS NULL\n" +
" OR dtb_ordt.cod_anag = setup.cod_anag)\n" +
" GROUP BY riga_ord_prod_w_materia_prima.data_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.riga_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.flag_avviabile,\n" +
" riga_ord_prod_w_materia_prima.flag_tracciabilita,\n" +
" riga_ord_prod_w_materia_prima.unt_ord,\n" +
" mtb_partita_mag.rap_conv2,\n" +
" mtb_partita_mag.rap_conv3,\n" +
" dtb_ordt.note,\n" +
" riga_ord_prod_w_materia_prima.rap_conv,\n" +
" dtb_ordt.descrizione_prod,\n" +
" dtb_ordt.descr_estesa_prod,\n" +
" riga_ord_prod_w_materia_prima.num_cnf,\n" +
" mtb_aart.qta_cnf,\n" +
" mtb_aart.gg_scad_partita,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" riga_ord_prod_w_materia_prima.pos_riga,\n" +
" dtb_ordt.flag_evaso_prod,\n" +
" dtb_ordt.flag_evaso_forzato,\n" +
" dtb_ordt.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ordt.cod_jfas,\n" +
" dtb_ordt.cod_jcom,\n" +
" mtb_partita_mag.partita_mag,\n" +
" mtb_partita_mag.partita_mag_prod,\n" +
" mtb_partita_mag.data_scad,\n" +
" dtb_ordt.cod_prod,\n" +
" dtb_ordt.data_iniz_prod,\n" +
" dtb_ord_steps.id_step,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ordt.cod_tcol_UL,\n" +
" dtb_ordt.cod_anag,\n" +
" gtb_anag.rag_soc,\n" +
" gtb_anag.part_iva,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordt.cod_vdes,\n" +
" dtb_ordt.cod_mdep,\n" +
" riga_ord_prod_w_materia_prima.cod_mdep,\n" +
" mtb_aart.colli_pedana,\n" +
" dtb_ord_steps.qta_prod,\n" +
" dtb_ordt.qta_prod,\n" +
" jtb_dist_clav_dir.duration,\n" +
" jtb_comt.descrizione,\n" +
" dtb_ord_steps.elapsed_time,\n" +
" riga_ord_prod_w_materia_prima.colli_pedana,\n" +
" dtb_ord_steps.hr_num,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.unt_mis2,\n" +
" mtb_aart.rap_conv2,\n" +
" mtb_aart.unt_mis3,\n" +
" mtb_aart.rap_conv3,\n" +
" riga_ord_prod_w_materia_prima.unt_ord2,\n" +
" riga_ord_prod_w_materia_prima.unt_ord3,\n" +
" riga_ord_prod_w_materia_prima.qta_ord,\n" +
" riga_ord_prod_w_materia_prima.qta_ord2,\n" +
" riga_ord_prod_w_materia_prima.qta_ord3,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3,\n" +
" riga_ord_prod_w_materia_prima.qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.cal_qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.gg_scad_partita,\n" +
" jtb_cicl.qta_prod,\n" +
" jtb_cicl.rap_conv_prod,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" jtb_cicl.unt_mis_prod,\n" +
" mtb_tcol.descrizione,\n" +
" dtb_ordt.qta_prod,\n" +
" dtb_ordt.rap_conv_prod,\n" +
" setupCaricoImmediato.flag_carico_scarico_immediato,\n" +
" dtb_ord_steps.num_fase, dtb_ord_steps.qta_lav,\n" +
" jl.id_lotto, jlt.data_lotto, mtb_aart.peso_kg, dtb_ordt.data_cons_prod_max,\n" +
" dtb_ord_steps.id_step,\n" +
" dtb_ord_steps.max_fase,\n" +
" dtb_ord_steps.starting_machines)\n" +
" SELECT ROW_NUMBER() OVER (ORDER BY data_ord, num_ord_prod, pos_riga, num_ord) AS sort,\n" +
" cod_jcom,\n" +
" data_ord_prod,\n" +
" num_ord_prod,\n" +
" riga_ord_prod,\n" +
" flag_avviabile,\n" +
" flag_tracciabilita,\n" +
" unt_ord,\n" +
" rap_conv,\n" +
" unt_ord2,\n" +
" rap_conv2,\n" +
" unt_ord3,\n" +
" rap_conv3,\n" +
" descrizione_prod,\n" +
" num_pezzi,\n" +
" num_cnf,\n" +
" gg_scad_partita,\n" +
" qta_cnf,\n" +
" colli_pedana,\n" +
" num_pedane,\n" +
" pos_riga,\n" +
" flag_evaso_prod,\n" +
" flag_evaso_forzato,\n" +
" flag_ordine_evaso,\n" +
" gestione,\n" +
" data_ord,\n" +
" cod_tcol_UL,\n" +
" descrizione_tcol,\n" +
" cod_anag,\n" +
" rag_soc_anag,\n" +
" part_iva,\n" +
" rif_ord,\n" +
" cod_vdes,\n" +
" cod_mdep,\n" +
" cod_mdep_prod,\n" +
" num_ord,\n" +
" cod_jfas,\n" +
" cod_jfas_lav,\n" +
" partita_mag,\n" +
" partita_mag_prod,\n" +
" note_lav,\n" +
" data_scad,\n" +
" cod_prod,\n" +
" descrizione_commessa,\n" +
" data_iniz_prod,\n" +
" id_step,\n" +
" unt_mis_prod,\n" +
" qta_batch_prod,\n" +
" rap_conv_prod,\n" +
" data_iniz,\n" +
" data_fine,\n" +
" qta_prod,\n" +
" qta_lav,\n" +
" max_fase,\n" +
" num_fase,\n" +
" hr_num,\n" +
" descrizione_attivita,\n" +
" prod_std,\n" +
" elapsed_time,\n" +
" qta_trasferite,\n" +
" udc_trasferiti,\n" +
" uds_scaricati,\n" +
" stato,\n" +
" pz_trasferiti,\n" +
" run_time_sec,\n" +
" SUM(run_time_sec) OVER (PARTITION BY cod_jfas, data_ord_prod) AS cumulative_run_time_sec,\n" +
" CONVERT(INT, run_time_sec / 3600) AS run_time_hour,\n" +
" ROUND((run_time_sec / 3600 - CONVERT(INT, run_time_sec / 3600)) * 60, 0) AS run_time_min,\n" +
" CASE\n" +
" WHEN setup_run_time.flag_restart = 'S' THEN\n" +
" DATEADD(SECOND, SUM(run_time_sec)\n" +
" OVER (PARTITION BY cod_jfas, data_ord_prod ORDER BY stato, cod_jfas, data_ord_prod, pos_riga ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),\n" +
" CASE\n" +
" WHEN (data_ord_prod > GETDATE() AND (data_iniz IS NULL OR data_fine IS NOT NULL))\n" +
" THEN DATEADD(HH, 7, data_ord_prod)\n" +
" ELSE GETDATE() END)\n" +
" ELSE\n" +
" DATEADD(SECOND, SUM(run_time_sec)\n" +
" OVER (PARTITION BY cod_jfas ORDER BY stato, cod_jfas, data_ord_prod, num_ord_prod, pos_riga ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),\n" +
" GETDATE())\n" +
" END AS run_time_end,\n" +
" id_lotto,\n" +
" data_lotto,\n" +
" peso_kg,\n" +
" data_cons_prod_max\n" +
" FROM ord_lav\n" +
" CROSS APPLY setup_run_time");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -7,6 +7,8 @@ public class InsertPartitaMagRequestDTO {
private String partitaMag; private String partitaMag;
private String partitaMagProd;
private Date dataScad; private Date dataScad;
private String codJfas; private String codJfas;
@@ -37,6 +39,15 @@ public class InsertPartitaMagRequestDTO {
return this; return this;
} }
public String getPartitaMagProd() {
return partitaMagProd;
}
public InsertPartitaMagRequestDTO setPartitaMagProd(String partitaMagProd) {
this.partitaMagProd = partitaMagProd;
return this;
}
public Date getDataScad() { public Date getDataScad() {
return dataScad; return dataScad;
} }

View File

@@ -152,6 +152,11 @@ public class OrdineLavorazioneDTO {
@JsonSerialize @JsonSerialize
private String partitaMag; private String partitaMag;
@SqlField(value = "partita_mag_prod")
@JsonProperty("partitaMagProd")
@JsonSerialize
private String partitaMagProd;
@SqlField(value = "data_scad") @SqlField(value = "data_scad")
@JsonProperty("dataScad") @JsonProperty("dataScad")
@JsonSerialize(using = JsonDateAdapterSerializer.class) @JsonSerialize(using = JsonDateAdapterSerializer.class)
@@ -639,6 +644,15 @@ public class OrdineLavorazioneDTO {
return this; return this;
} }
public String getPartitaMagProd() {
return partitaMagProd;
}
public OrdineLavorazioneDTO setPartitaMagProd(String partitaMagProd) {
this.partitaMagProd = partitaMagProd;
return this;
}
public Date getDataScad() { public Date getDataScad() {
return dataScad; return dataScad;
} }

View File

@@ -43,6 +43,7 @@ import it.integry.ems_model.utility.BarcodeEan128.Ean128Model;
import it.integry.ems_model.utility.BarcodeEan128.UtilityBarcodeEan128; import it.integry.ems_model.utility.BarcodeEan128.UtilityBarcodeEan128;
import it.integry.ems_model.utility.*; import it.integry.ems_model.utility.*;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.http.entity.ContentType; import org.apache.http.entity.ContentType;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@@ -1335,14 +1336,31 @@ public class MesProductionServiceV2 {
DtbOrdt ordineLav = completeDatiOrdine(dto.getOrdine()); DtbOrdt ordineLav = completeDatiOrdine(dto.getOrdine());
MtbPartitaMag partitaMagOrdine = null;
if (!UtilityString.isNullOrEmpty(ordineLav.getPartitaMag())) {
partitaMagOrdine = new MtbPartitaMag();
partitaMagOrdine.setCodMart(ordineLav.getCodProd())
.setPartitaMag(ordineLav.getPartitaMag())
.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(partitaMagOrdine, true, multiDBTransactionManager);
}
String codMgrpSL = setupGest.getSetup("w_lpianoprod_rc", "SETUP", "GRUPPO_SL"); String codMgrpSL = setupGest.getSetup("w_lpianoprod_rc", "SETUP", "GRUPPO_SL");
boolean matchLottoSlToOrdine = setupGest.getSetupDetBoolean("MES", "SETUP", "VINCOLA_LOTTO_ORDINE_A_SL", dto.getCodJfas()); boolean matchLottoSlToOrdine = setupGest.getSetupDetBoolean("MES", "SETUP", "VINCOLA_LOTTO_ORDINE_A_SL", dto.getCodJfas());
List<MtbAart> arts = rows.stream().map(MtbColr::getCodMart).map(MtbAart::fromCodMart).distinct().collect(java.util.stream.Collectors.toList()); List<MtbAart> arts = rows.stream().map(MtbColr::getCodMart).map(MtbAart::fromCodMart).distinct().collect(java.util.stream.Collectors.toList());
if (arts.size() > 1) if (arts.size() > 1)
throw new Exception("Impossibile versare a produzione una pedana mista!"); throw new Exception("Impossibile versare a produzione una pedana mista!");
final MtbAart rowArt = entityProcessor.processEntity(arts.get(0), true, multiDBTransactionManager); final MtbAart rowArt = entityProcessor.processEntity(arts.get(0), true, multiDBTransactionManager);
GiacenzaArtInBarcodeDTO invDto = new GiacenzaArtInBarcodeDTO(); GiacenzaArtInBarcodeDTO invDto = new GiacenzaArtInBarcodeDTO();
invDto invDto
.setBarcodeUl(dto.getBarcode()) .setBarcodeUl(dto.getBarcode())
.setCodMart(rowArt.getCodMart()) .setCodMart(rowArt.getCodMart())
@@ -1355,6 +1373,7 @@ public class MesProductionServiceV2 {
.setNumCnf(BigDecimal.ZERO); .setNumCnf(BigDecimal.ZERO);
entityProcessor.processEntityList(arts, true); entityProcessor.processEntityList(arts, true);
for (MtbColr row : rows) { for (MtbColr row : rows) {
DtbOrdr rowOrdine = ordineLav.getDtbOrdr().stream().filter(ordRow -> ordRow.getCodMart().equalsIgnoreCase(rowArt.getCodMart())).findFirst().orElse(null); DtbOrdr rowOrdine = ordineLav.getDtbOrdr().stream().filter(ordRow -> ordRow.getCodMart().equalsIgnoreCase(rowArt.getCodMart())).findFirst().orElse(null);
if (rowOrdine == null) { if (rowOrdine == null) {
@@ -1363,11 +1382,33 @@ public class MesProductionServiceV2 {
// continue; // continue;
} }
if (rowArt.getCodMgrp().equalsIgnoreCase(codMgrpSL) && MtbPartitaMag partitaMagRow = new MtbPartitaMag();
matchLottoSlToOrdine &&
!UtilityString.isNullOrEmpty(ordineLav.getPartitaMag()) && partitaMagRow
!ordineLav.getPartitaMag().startsWith(row.getPartitaMag())) { .setCodMart(row.getCodMart())
response.getAnomalie().add(AnomalieDTO.warning(String.format("La partita di semilavorato che si vuole versare (%s) non corrisponde a quella dell'ordine (%s), per concludere la procedura di versamento verrà creato un nuovo ordine di lavorazione con la partita selezionata!", row.getPartitaMag(), ordineLav.getPartitaMag()))); .setPartitaMag(row.getPartitaMag())
.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(partitaMagRow, true, multiDBTransactionManager);
if (rowArt.getCodMgrp().equalsIgnoreCase(codMgrpSL)
&& matchLottoSlToOrdine
&& !UtilityString.isNullOrEmpty(ordineLav.getPartitaMag())
&& (!partitaMagRow.getPartitaMagProd().equalsIgnoreCase(partitaMagOrdine.getPartitaMagProd())
|| !DateUtils.isSameDay(partitaMagRow.getDataScad(), partitaMagOrdine.getDataScad()))) {
if (!partitaMagRow.getPartitaMagProd().equalsIgnoreCase(partitaMagOrdine.getPartitaMagProd())) {
response.getAnomalie().add(AnomalieDTO.warning(String.format(
"Lotto di produzione (%s) diverso da quello in lavorazione (%s).\nVuoi creare un nuovo ordine?",
partitaMagRow.getPartitaMag(),
partitaMagOrdine.getPartitaMagProd())));
} else {
response.getAnomalie().add(AnomalieDTO.warning(String.format(
"La data di scadenza del lotto versato (%s) è diversa da quella del lotto di lavorazione (%s).\nVuoi creare un nuovo ordine?",
UtilityDate.formatDate(partitaMagRow.getDataScad(), CommonConstants.DATE_FORMAT_DMY),
UtilityDate.formatDate(partitaMagOrdine.getDataScad(), CommonConstants.DATE_FORMAT_DMY)
)));
}
response.setNewOrderRequired(true); response.setNewOrderRequired(true);
} }
invDto.setPartitaMag(row.getPartitaMag()) invDto.setPartitaMag(row.getPartitaMag())
@@ -1441,134 +1482,181 @@ public class MesProductionServiceV2 {
} }
public Object versaMaterialeSuOrdine(VersamentoMaterialeSuOrdineDTO dto) throws Exception { public Object versaMaterialeSuOrdine(VersamentoMaterialeSuOrdineDTO dto) throws Exception {
MtbColt colloDaVersare = pvmService.getColloByBarcode(dto.getMtbColt().getBarcodeUl(), true); MtbColt colloDaVersare = pvmService.getColloByBarcode(dto.getMtbColt().getBarcodeUl(), true);
colloDaVersare.setOperation(OperationType.SELECT_OBJECT); colloDaVersare.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(colloDaVersare, multiDBTransactionManager); entityProcessor.processEntity(colloDaVersare, multiDBTransactionManager);
List<MvwSitArtUdcDetInventarioDTO> contenuto = wmsGenericService.getGiacenzaCollo(colloDaVersare); List<MvwSitArtUdcDetInventarioDTO> contenuto = wmsGenericService.getGiacenzaCollo(colloDaVersare);
if (UtilityList.isNullOrEmpty(contenuto)) { if (UtilityList.isNullOrEmpty(contenuto)) {
throw new Exception("La UL seleionata non contiene alcun articolo da versare!"); throw new Exception("La UL selezionata non contiene alcun articolo da versare!");
} }
DtbOrdt ordine = dto.getOrdine(); DtbOrdt ordine = dto.getOrdine();
ordine.setOperation(OperationType.SELECT_OBJECT); ordine.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(ordine, multiDBTransactionManager); entityProcessor.processEntity(ordine, multiDBTransactionManager);
if (dto.isCloneOrdine()) {
String sql = Query.format("SELECT dtb_ordr.* from dtb_ordr\n" +
" inner join dtb_ordt on dtb_ordr.data_ord = dtb_ordt.data_ord_rif and dtb_ordr.gestione = gestione_rif and dtb_ordr.num_ord = num_ord_rif\n" +
" where dtb_ordt.gestione = {} and dtb_ordt.data_ord = {} and dtb_ordt.num_ord = {} and dtb_ordr.cod_mart = {}", ordine.getGestione(), ordine.getDataOrd(), ordine.getNumOrd(), ordine.getCodProd());
DtbOrdr oldRow = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdr.class);
CreaOrdineProdDTO newOrdDTO = new CreaOrdineProdDTO();
newOrdDTO.setCodAnag(ordine.getCodAnag())
.setDataOrd(LocalDate.now())
.setUntOrd(oldRow.getUntOrd())
.setCodMart(oldRow.getCodMart())
.setCodMdep(ordine.getCodMdep())
.setNumCnf(oldRow.getNumCnf())
.setQtaOrd(ordine.getQtaProd())
.setCodJfas(ordine.getCodJfas())
.setColliPedana(oldRow.getColliPedana());
ordine = productionService.saveOrdineProd(newOrdDTO);
ordine.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(ordine, multiDBTransactionManager);
}
List<CreateUDSRequestOrderDTO> ordini = new ArrayList<>();
MaterialeVersatoSuOrdineDTO versamentoEsistente = getVersamentoBarcodeSuOrdine(dto.getOrdine(), colloDaVersare.getBarcodeUl());
MtbColt uds; MtbColt uds;
if (versamentoEsistente == null) {
CreateUDSRequestOrderDTO orderDTO = new CreateUDSRequestOrderDTO()
.setNumOrd(ordine.getNumOrd())
.setDataOrd(ordine.getDataOrd().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate())
.setGestione(ordine.getGestione());
ordini.add(orderDTO);
CreateUDSRequestDTO requestDTO = new CreateUDSRequestDTO()
.setCodMdep(ordine.getCodMdep())
.setCausaleCollo(CreateUDSRequestDTO.Causale.SCARICO)
.setSegno(-1)
.setOrders(ordini);
uds = wmsLavorazioneService.createUDS(requestDTO);
} else { try {
uds = new MtbColt(versamentoEsistente.getGestione(), versamentoEsistente.getDataCollo(), versamentoEsistente.getNumCollo(), versamentoEsistente.getSerCollo()); if (dto.isCloneOrdine()) {
} String sql = Query.format("SELECT dtb_ordr.* from dtb_ordr\n" +
" inner join dtb_ordt on dtb_ordr.data_ord = dtb_ordt.data_ord_rif and dtb_ordr.gestione = gestione_rif and dtb_ordr.num_ord = num_ord_rif\n" +
" where dtb_ordt.gestione = {} and dtb_ordt.data_ord = {} and dtb_ordt.num_ord = {} and dtb_ordr.cod_mart = {}", ordine.getGestione(), ordine.getDataOrd(), ordine.getNumOrd(), ordine.getCodProd());
DtbOrdr oldRow = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdr.class);
for (MvwSitArtUdcDetInventarioDTO scarico : contenuto) { CreaOrdineProdDTO newOrdDTO = new CreaOrdineProdDTO();
String sql = "SELECT riga_ord\n" + newOrdDTO.setCodAnag(ordine.getCodAnag())
"from dtb_ordr\n" + .setDataOrd(LocalDate.now())
"where data_ord = " + UtilityDB.valueToString(ordine.getDataOrd()) + "\n" + .setUntOrd(oldRow.getUntOrd())
" and num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + "\n" + .setCodMart(oldRow.getCodMart())
" and gestione = " + UtilityDB.valueToString(ordine.getGestione()) + "\n" + .setCodMdep(ordine.getCodMdep())
" and cod_mart = " + UtilityDB.valueToString(scarico.getCodMart()); .setNumCnf(oldRow.getNumCnf())
Integer rigaOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); .setQtaOrd(ordine.getQtaProd())
.setCodJfas(ordine.getCodJfas())
.setColliPedana(oldRow.getColliPedana());
ordine = productionService.saveOrdineProd(newOrdDTO);
MtbColr sourceMtbColr = new MtbColr(); ordine.setOperation(OperationType.SELECT_OBJECT);
sourceMtbColr entityProcessor.processEntity(ordine, multiDBTransactionManager);
.setNumCollo(scarico.getNumCollo()) }
.setSerCollo(scarico.getSerCollo())
.setDataCollo(scarico.getDataCollo())
.setGestione(scarico.getGestione())
.setCodMart(scarico.getCodMart())
.setPartitaMag(scarico.getPartitaMag())
.setPesoLordoKg(scarico.getPesoLordoKG())
.setPesoNettoKg(scarico.getPesoNettoKG());
InsertUDSRowRequestDTO insertRequestDto = new InsertUDSRowRequestDTO() List<CreateUDSRequestOrderDTO> ordini = new ArrayList<>();
.setCodMart(scarico.getCodMart())
.setQtaTot(UtilityBigDecimal.isNull(dto.getQtaVersamento(), scarico.getQtaCol()))
.setPartitaMag(scarico.getPartitaMag())
.setSourceMtbColr(sourceMtbColr)
.setTargetMtbColt(uds)
.setQtaCnf(scarico.getQtaCnf())
.setDataOrd(ordine.getDataOrd())
.setRigaOrd(rigaOrd)
.setNumOrd(ordine.getNumOrd());
wmsLavorazioneService.insertUDSRow(insertRequestDto);
String codMgrpSL = setupGest.getSetup("w_lpianoprod_rc", "SETUP", "GRUPPO_SL"); MaterialeVersatoSuOrdineDTO versamentoEsistente = getVersamentoBarcodeSuOrdine(dto.getOrdine(), colloDaVersare.getBarcodeUl());
boolean matchLottoSlToOrdine = setupGest.getSetupDetBoolean("MES", "SETUP", "VINCOLA_LOTTO_ORDINE_A_SL", dto.getCodJfas());
if (versamentoEsistente == null) {
CreateUDSRequestOrderDTO orderDTO = new CreateUDSRequestOrderDTO()
.setNumOrd(ordine.getNumOrd())
.setDataOrd(ordine.getDataOrd().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate())
.setGestione(ordine.getGestione());
ordini.add(orderDTO);
CreateUDSRequestDTO requestDTO = new CreateUDSRequestDTO()
.setCodMdep(ordine.getCodMdep())
.setCausaleCollo(CreateUDSRequestDTO.Causale.SCARICO)
.setSegno(-1)
.setOrders(ordini);
uds = wmsLavorazioneService.createUDS(requestDTO);
} else {
uds = new MtbColt(versamentoEsistente.getGestione(), versamentoEsistente.getDataCollo(), versamentoEsistente.getNumCollo(), versamentoEsistente.getSerCollo());
}
for (MvwSitArtUdcDetInventarioDTO scarico : contenuto) {
String sql = "SELECT riga_ord\n" +
"from dtb_ordr\n" +
"where data_ord = " + UtilityDB.valueToString(ordine.getDataOrd()) + "\n" +
" and num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + "\n" +
" and gestione = " + UtilityDB.valueToString(ordine.getGestione()) + "\n" +
" and cod_mart = " + UtilityDB.valueToString(scarico.getCodMart());
Integer rigaOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
MtbColr sourceMtbColr = new MtbColr();
sourceMtbColr
.setNumCollo(scarico.getNumCollo())
.setSerCollo(scarico.getSerCollo())
.setDataCollo(scarico.getDataCollo())
.setGestione(scarico.getGestione())
.setCodMart(scarico.getCodMart())
.setPartitaMag(scarico.getPartitaMag())
.setPesoLordoKg(scarico.getPesoLordoKG())
.setPesoNettoKg(scarico.getPesoNettoKG());
InsertUDSRowRequestDTO insertRequestDto = new InsertUDSRowRequestDTO()
.setCodMart(scarico.getCodMart())
.setQtaTot(UtilityBigDecimal.isNull(dto.getQtaVersamento(), scarico.getQtaCol()))
.setPartitaMag(scarico.getPartitaMag())
.setSourceMtbColr(sourceMtbColr)
.setTargetMtbColt(uds)
.setQtaCnf(scarico.getQtaCnf())
.setDataOrd(ordine.getDataOrd())
.setRigaOrd(rigaOrd)
.setNumOrd(ordine.getNumOrd());
wmsLavorazioneService.insertUDSRow(insertRequestDto);
String codMgrpSL = setupGest.getSetup("w_lpianoprod_rc", "SETUP", "GRUPPO_SL");
boolean matchLottoSlToOrdine = setupGest.getSetupDetBoolean("MES", "SETUP", "VINCOLA_LOTTO_ORDINE_A_SL", dto.getCodJfas());
if (UtilityString.isNullOrEmpty(ordine.getPartitaMag()) && scarico.getCodGruppo().equalsIgnoreCase(codMgrpSL) && matchLottoSlToOrdine) {
MtbPartitaMag partitaSL = new MtbPartitaMag(); MtbPartitaMag partitaSL = new MtbPartitaMag();
partitaSL.setCodMart(scarico.getCodMart()) partitaSL.setCodMart(scarico.getCodMart())
.setPartitaMag(scarico.getPartitaMag()) .setPartitaMag(scarico.getPartitaMag())
.setOperation(OperationType.SELECT_OBJECT); .setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(partitaSL, multiDBTransactionManager);
entityProcessor.processEntity(partitaSL, true, multiDBTransactionManager);
String partitaMagPf = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), Query.format("with datiPartita as (\n" + MtbPartitaMag partitaOrdine = null;
" select MAX(ASCII(right(partita_mag,LEN(partita_mag) - LEN({})))) + 1 as nextProgressivo\n" +
" from mtb_partita_mag where cod_mart = {} and partita_mag like {}\n" +
")\n" +
"select concat({},ISNULL(CHAR(nextProgressivo),'A'))\n" +
"from datiPartita", partitaSL.getPartitaMag(), ordine.getCodProd(), partitaSL.getPartitaMag() + "%", partitaSL.getPartitaMag()));
partitaMagPf = UtilityString.isNull(partitaMagPf, partitaSL.getPartitaMag());
MtbPartitaMag partitaPf = new MtbPartitaMag();
partitaPf.setCodMart(ordine.getCodProd())
.setPartitaMag(partitaMagPf)
.setDataScad(partitaSL.getDataScad())
.setOperation(OperationType.INSERT_OR_UPDATE);
entityProcessor.processEntity(partitaPf, true, multiDBTransactionManager);
ordine.setPartitaMag(partitaMagPf)
.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(ordine, true, multiDBTransactionManager); // Controllo se esiste partita con stesso lotto e scadenza
if (!UtilityString.isNullOrEmpty(ordine.getPartitaMag())) {
partitaOrdine = new MtbPartitaMag();
partitaOrdine
.setCodMart(ordine.getCodProd())
.setPartitaMag(ordine.getPartitaMag())
.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(partitaOrdine, true, multiDBTransactionManager);
}
// Assegna una nuova partita se l'ordine non ha nessuna partita o se il semilavorato ha diversa partitaMagProd o data scadenza
if (matchLottoSlToOrdine
&& scarico.getCodGruppo().equalsIgnoreCase(codMgrpSL)
&& (UtilityString.isNullOrEmpty(ordine.getPartitaMag())
|| !partitaOrdine.getPartitaMagProd().equalsIgnoreCase(partitaSL.getPartitaMagProd())
|| !DateUtils.isSameDay(partitaOrdine.getDataScad(), partitaSL.getDataScad()))) {
sql = Query.format(
"WITH datiPartita\n" +
" AS (SELECT MAX(ASCII(RIGHT(partita_mag, LEN(partita_mag) - LEN(%s)))) + 1 AS nextProgressivo\n" +
" FROM mtb_partita_mag\n" +
" WHERE cod_mart = %s\n" +
" AND partita_mag_prod = %s)\n" +
"SELECT CONCAT(%s, ISNULL(CHAR(nextProgressivo), 'A'))\n" +
"FROM datiPartita",
partitaSL.getPartitaMagProd(),
ordine.getCodProd(),
partitaSL.getPartitaMagProd(),
partitaSL.getPartitaMagProd()
);
String partitaMagPf = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
partitaMagPf = UtilityString.isNull(partitaMagPf, partitaSL.getPartitaMagProd());
MtbPartitaMag partitaPf = new MtbPartitaMag();
partitaPf
.setCodMart(ordine.getCodProd())
.setPartitaMag(partitaMagPf)
.setPartitaMagProd(partitaSL.getPartitaMagProd())
.setDataProd(partitaSL.getDataProd())
.setDataScad(partitaSL.getDataScad())
.setOperation(OperationType.INSERT_OR_UPDATE);
entityProcessor.processEntity(partitaPf, true, multiDBTransactionManager);
ordine.setPartitaMag(partitaMagPf)
.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(ordine, true, multiDBTransactionManager);
}
} }
if (dto.isStartOrdine() || dto.isCloneOrdine()) {
openStep(ordine.getDataOrd(), ordine.getNumOrd(), ordine.getGestione(), dto.getCodJfas(), 0, null, null, null, true);
}
multiDBTransactionManager.commitAll();
} catch (Exception e) {
multiDBTransactionManager.rollbackAll();
throw e;
} }
if (dto.isStartOrdine() || dto.isCloneOrdine()) {
openStep(ordine.getDataOrd(), ordine.getNumOrd(), ordine.getGestione(), dto.getCodJfas(), 0);
}
return uds; return uds;
} }

View File

@@ -1045,7 +1045,7 @@ public class ProductionService {
} }
} }
entityProcessor.processEntity(ordLav, multiDBTransactionManager); entityProcessor.processEntity(ordLav, true, multiDBTransactionManager);
UtilityEntity.throwEntityException(ordLav); UtilityEntity.throwEntityException(ordLav);
} }
} }
@@ -1617,15 +1617,15 @@ public class ProductionService {
} }
} }
public StbGestSetupDet getConfigCodMgrpScadenzaMultipla(String codMgrp) throws Exception { public StbGestSetupDet getConfigControlloScadenzaMultipla(String codJfas) throws Exception {
List<StbGestSetupDet> setupDetList = setupGest.getSetupDetList("MES", "SETUP", "COD_MGRP_SCADENZA_MULTIPLA"); List<StbGestSetupDet> setupDetList = setupGest.getSetupDetList("MES", "SETUP", "CONTROLLO_SCADENZA_MULTIPLA");
if (setupDetList == null) { if (setupDetList == null) {
return null; return null;
} }
java.util.Optional<StbGestSetupDet> stbGestSetupDetOptional = setupDetList.stream() java.util.Optional<StbGestSetupDet> stbGestSetupDetOptional = setupDetList.stream()
.filter(stbGestSetupDet -> stbGestSetupDet.getValColRif().equalsIgnoreCase(codMgrp)) .filter(stbGestSetupDet -> stbGestSetupDet.getValColRif().equalsIgnoreCase(codJfas))
.findFirst(); .findFirst();
return stbGestSetupDetOptional.orElse(null); return stbGestSetupDetOptional.orElse(null);
@@ -1634,39 +1634,29 @@ public class ProductionService {
public List<EntityBase> insertPartitaMag(InsertPartitaMagRequestDTO dto, boolean saveEntity) throws Exception { public List<EntityBase> insertPartitaMag(InsertPartitaMagRequestDTO dto, boolean saveEntity) throws Exception {
String codMart = dto.getCodMart(); String codMart = dto.getCodMart();
String partitaMag = dto.getPartitaMag(); String partitaMag = dto.getPartitaMag();
String partitaMagProd = partitaMag; String partitaMagProd = UtilityString.isNull(dto.getPartitaMagProd(), partitaMag);
Date dataScad = dto.getDataScad(); Date dataScad = dto.getDataScad();
String sql = Query.format( StbGestSetupDet configControlloScadenzaMultipla = this.getConfigControlloScadenzaMultipla(dto.getCodJfas());
"SELECT mg.cod_mgrp\n" +
"FROM mtb_grup mg\n" +
"INNER JOIN mtb_aart ma ON mg.cod_mgrp = ma.cod_mgrp\n" +
"WHERE ma.cod_mart = %s",
dto.getCodMart()
);
String codMgrp = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); if (configControlloScadenzaMultipla != null && configControlloScadenzaMultipla.getValue().equalsIgnoreCase("S")) {
// Controllo se esiste partita con stesso lotto e scadenza
StbGestSetupDet configCodMgrpScadenzaMultipla = this.getConfigCodMgrpScadenzaMultipla(codMgrp); // sql = Query.format(
// "SELECT partita_mag\n" +
if (configCodMgrpScadenzaMultipla != null && configCodMgrpScadenzaMultipla.getValue().equalsIgnoreCase("S")) { // "FROM mtb_partita_mag\n" +
// Controllo se esiste articolo con stesso lotto e scadenze // "WHERE cod_mart = %s\n" +
sql = Query.format( // "AND partita_mag_prod = %s\n" +
"SELECT partita_mag\n" + // "AND data_scad = %s\n",
"FROM mtb_partita_mag\n" + // codMart,
"WHERE cod_mart = %s\n" + // partitaMag,
"AND partita_mag_prod = %s\n" + // dataScad
"AND data_scad = %s\n", // );
codMart, //
partitaMag, // String partitaMagQuery = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
dataScad //
); // if (partitaMagQuery == null) {
String partitaMagQuery = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (partitaMagQuery == null) {
// La partita per data scad non esiste, leggere l'ultima e creane una nuova // La partita per data scad non esiste, leggere l'ultima e creane una nuova
sql = Query.format( String sql = Query.format(
"SELECT MAX(partita_mag)\n" + "SELECT MAX(partita_mag)\n" +
"FROM mtb_partita_mag\n" + "FROM mtb_partita_mag\n" +
"WHERE cod_mart = %s\n" + "WHERE cod_mart = %s\n" +
@@ -1688,9 +1678,9 @@ public class ProductionService {
partitaMag += lastPartitaChar; partitaMag += lastPartitaChar;
} }
} else { // } else {
partitaMag = partitaMagQuery; // partitaMag = partitaMagQuery;
} // }
} }
MtbPartitaMag mtbPartitaMag = new MtbPartitaMag() MtbPartitaMag mtbPartitaMag = new MtbPartitaMag()