diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251015111009.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251015111009.java new file mode 100644 index 0000000000..103c681cf4 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251015111009.java @@ -0,0 +1,19 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251015111009 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + executeStatement("alter table dbo.dtb_ord_steps add posizione_out varchar(40)"); + } + + @Override + public void down() throws Exception { + } +} \ No newline at end of file diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251015111701.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251015111701.java new file mode 100644 index 0000000000..ceaeb70ec2 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251015111701.java @@ -0,0 +1,610 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251015111701 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.posizione_out,\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" + + " dtb_ord_steps.posizione_out,\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" + + " AND dtb_ordt.flag_evaso_forzato = 'S')\n" + + " )\n" + + " )\n" + + " AND (setup.cod_jfas IS NULL\n" + + " OR dtb_ord_steps.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" + + " dtb_ord_steps.posizione_out,\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" + + " posizione_out,\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 { + + } + +} diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdSteps.java b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdSteps.java index 6d7fee57e9..b5989dcd18 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdSteps.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdSteps.java @@ -135,6 +135,9 @@ public class DtbOrdSteps extends EntityBase { @SqlField(value = "flag_step_attivo", maxLength = 1, nullable = false, defaultObjectValue = "S") private String flagStepAttivo; + @SqlField(value = "posizione_out", maxLength = 40) + private String posizioneOut; + public DtbOrdSteps() { super(logger); } @@ -453,4 +456,13 @@ public class DtbOrdSteps extends EntityBase { this.flagStepAttivo = flagStepAttivo; return this; } + + public String getPosizioneOut() { + return posizioneOut; + } + + public DtbOrdSteps setPosizioneOut(String posizioneOut) { + this.posizioneOut = posizioneOut; + return this; + } } diff --git a/ems-engine/src/main/java/it/integry/ems/customizations/production/service/ToscaProductionService.java b/ems-engine/src/main/java/it/integry/ems/customizations/production/service/ToscaProductionService.java index 5eda75ff83..78d1cf3e1a 100644 --- a/ems-engine/src/main/java/it/integry/ems/customizations/production/service/ToscaProductionService.java +++ b/ems-engine/src/main/java/it/integry/ems/customizations/production/service/ToscaProductionService.java @@ -1,6 +1,7 @@ package it.integry.ems.customizations.production.service; import it.integry.ems.production.service.MesProductionServiceV2; +import it.integry.ems.production.utility.MesUtility; import it.integry.ems.service.EntityProcessor; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems_model.entity.*; @@ -46,7 +47,7 @@ public class ToscaProductionService { Integer numOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); - List openedSteps = mesProductionServiceV2.getOpenedSteps(codJfas); + List openedSteps = MesUtility.getOpenedSteps(codJfas, multiDBTransactionManager.getPrimaryConnection()); if (openedSteps != null) { for (DtbOrdSteps dtbOrdStep : openedSteps) { @@ -128,7 +129,7 @@ public class ToscaProductionService { } public void closeOpenedSteps(String codJfas) throws Exception { - List openedSteps = mesProductionServiceV2.getOpenedSteps(codJfas); + List openedSteps = MesUtility.getOpenedSteps(codJfas, multiDBTransactionManager.getPrimaryConnection()); if (openedSteps != null) { for (DtbOrdSteps dtbOrdStep : openedSteps) { diff --git a/ems-engine/src/main/java/it/integry/ems/production/controller/MesProductionControllerV2.java b/ems-engine/src/main/java/it/integry/ems/production/controller/MesProductionControllerV2.java index 29d93285b8..3d75f22a82 100644 --- a/ems-engine/src/main/java/it/integry/ems/production/controller/MesProductionControllerV2.java +++ b/ems-engine/src/main/java/it/integry/ems/production/controller/MesProductionControllerV2.java @@ -9,6 +9,7 @@ import it.integry.ems.production.dto.*; import it.integry.ems.production.service.MesProductionServiceV2; import it.integry.ems.production.service.ProductionLineService; import it.integry.ems.production.service.ProductionOrdersLifecycleService; +import it.integry.ems.production.utility.MesUtility; import it.integry.ems.response.EsitoType; import it.integry.ems.response.ServiceRestResponse; import it.integry.ems.response.StatusResponse; @@ -169,7 +170,7 @@ public class MesProductionControllerV2 { @RequestParam(CommonConstants.PROFILE_DB) String profileDB, @RequestParam(required = false, defaultValue = "") String codJfas) throws Exception { ServiceRestResponse response = new ServiceRestResponse(EsitoType.OK); - response.setEntityList(mesProductionService.getOpenedSteps(UtilityString.emptyStr2Null(codJfas))); + response.setEntityList(MesUtility.getOpenedSteps(UtilityString.emptyStr2Null(codJfas),multiDBTransactionManager.getPrimaryConnection())); return response; } diff --git a/ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java b/ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java index f4150dce35..fc4ae27632 100644 --- a/ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java +++ b/ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java @@ -13,12 +13,12 @@ import it.integry.ems.document.dto.RientroLavorazioneDTO; import it.integry.ems.document.dto.ScaricoLavorazioneDTO; import it.integry.ems.document.service.DocumentProdService; import it.integry.ems.exception.MissingDataException; -import it.integry.ems.exception.PrimaryDatabaseNotPresentException; import it.integry.ems.migration._base.IntegryCustomerDB; import it.integry.ems.production.dto.*; import it.integry.ems.production.event.ProductionOrderPausedEvent; import it.integry.ems.production.event.ProductionOrderStartedEvent; import it.integry.ems.production.event.ProductionUlCreatedEvent; +import it.integry.ems.production.utility.MesUtility; import it.integry.ems.report.dto.JasperDTO; import it.integry.ems.report.dto.PairsDTO; import it.integry.ems.retail.pvmRetail.service.PvmService; @@ -234,36 +234,6 @@ public class MesProductionServiceV2 { } else throw new Exception("Nessun pannello supervisore trovato con il seguente codJfas: " + codJfas); } - public List getOpenedSteps(String codJfas) throws Exception { - - String whereCondCodJfas = ""; - - if (!UtilityString.isNullOrEmpty(codJfas)) { - whereCondCodJfas = " AND cod_jfas = " + UtilityDB.valueToString(codJfas); - } - - String sql = "SELECT * " + - "FROM dtb_ord_steps " + - "WHERE id_step > 0 " + - "AND data_fine IS NULL " + - whereCondCodJfas; - - return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class); - } - - public DtbOrdSteps getOrderOpenStepOnFase(DtbOrdt order, String codJfas) throws Exception { - String sql = "SELECT * " + - " FROM dtb_ord_steps " + - " WHERE id_step > 0 " + - " AND data_ord = " + UtilityDB.valueToString(order.getDataOrd()) + - " AND gestione = " + UtilityDB.valueToString(order.getGestione()) + - " AND num_ord = " + UtilityDB.valueToString(order.getNumOrd()) + - " AND cod_jfas = " + UtilityDB.valueToString(codJfas) + - " ORDER BY ISNULL(data_fine,GETDATE()) desc"; - - return UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class); - } - public void openStep(LocalDate dataOrd, int numOrd, String gestioneOrd, String codJfas, int hrNum) throws Exception { openStep(dataOrd, numOrd, gestioneOrd, codJfas, hrNum, null); } @@ -1131,10 +1101,10 @@ public class MesProductionServiceV2 { MtbColr udcRow; try { - DtbOrdSteps stepAttivo = getOrderOpenStepOnFase(ordineLav, dto.getCodJfas()); + DtbOrdSteps stepAttivo = MesUtility.getOpenOrderStepOnFase(ordineLav, dto.getCodJfas(), multiDBTransactionManager.getPrimaryConnection()); if (stepAttivo != null) { - int finalStep = getMaxFaseOrdine(ordineLav); + int finalStep = MesUtility.getMaxFaseOrdine(ordineLav, multiDBTransactionManager.getPrimaryConnection()); ordineLav.setOperation(OperationType.NO_OP); ordineLav.getDtbOrdSteps().add(stepAttivo); stepAttivo.setQtaLav((UtilityBigDecimal.isNull(stepAttivo.getQtaLav(), BigDecimal.ZERO)).add(dto.getQtaCollo().divide(UtilityBigDecimal.isNull(stepAttivo.getRapConvLav(), BigDecimal.ONE), 2, RoundingMode.HALF_UP))); @@ -1305,16 +1275,6 @@ public class MesProductionServiceV2 { return udc; } - private int getMaxFaseOrdine(DtbOrdt ordineLav) throws SQLException, PrimaryDatabaseNotPresentException { - String sql = "select top 1 num_fase \n" + - "from dtb_ord_steps \n" + - "where data_ord = " + UtilityDB.valueToString(ordineLav.getDataOrd()) + - " and num_ord = " + UtilityDB.valueToString(ordineLav.getNumOrd()) + - " and gestione = " + UtilityDB.valueToString(ordineLav.getGestione()) + - " order by num_fase desc "; - return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); - } - public void createColloCaricoProdottoFinito(String codMdep, String codJfas, LocalDate dataOrd, int numOrd, String gestione, BigDecimal qta) throws Exception { CaricoProdottoFinitoDTO dto = new CaricoProdottoFinitoDTO(); dto.setCodMdep(codMdep); @@ -2184,9 +2144,9 @@ public class MesProductionServiceV2 { .setDataOrd(UtilityLocalDate.localDateToDate(ordineLav.getDataOrd())) .setNumOrd(ordineLav.getNumOrd()); - DtbOrdSteps stepAttivo = getOrderOpenStepOnFase(dtbOrdt, ordineLav.getCodJfas()); + DtbOrdSteps stepAttivo = MesUtility.getOpenOrderStepOnFase(dtbOrdt, ordineLav.getCodJfas(), multiDBTransactionManager.getPrimaryConnection()); - int finalStep = getMaxFaseOrdine(dtbOrdt); + int finalStep = MesUtility.getMaxFaseOrdine(dtbOrdt, multiDBTransactionManager.getPrimaryConnection()); dtbOrdt.setOperation(OperationType.NO_OP); dtbOrdt.getDtbOrdSteps().add(stepAttivo); stepAttivo.setQtaLav((UtilityBigDecimal.isNull(stepAttivo.getQtaLav(), BigDecimal.ZERO)).add(ordineLav.getQtaProd())); diff --git a/ems-engine/src/main/java/it/integry/ems/production/service/ProductionWarehouseService.java b/ems-engine/src/main/java/it/integry/ems/production/service/ProductionWarehouseService.java index 69323b2e8f..9b058decf2 100644 --- a/ems-engine/src/main/java/it/integry/ems/production/service/ProductionWarehouseService.java +++ b/ems-engine/src/main/java/it/integry/ems/production/service/ProductionWarehouseService.java @@ -3,6 +3,7 @@ package it.integry.ems.production.service; import it.integry.ems.production.dto.DeleteCaricoDaProduzioneRequestDTO; import it.integry.ems.production.dto.RettificaProdDTO; import it.integry.ems.retail.wms.Utility.WMSUtility; +import it.integry.ems.production.utility.MesUtility; import it.integry.ems.retail.wms.generic.dto.RettificaULDTO; import it.integry.ems.retail.wms.generic.service.WMSGenericService; import it.integry.ems.rules.businessLogic.LoadColliService; @@ -16,6 +17,8 @@ import it.integry.ems_model.entity.DtbDoct; import it.integry.ems_model.entity.MtbColr; import it.integry.ems_model.entity.MtbColt; import it.integry.ems_model.entity.key.MtbColtKey; +import it.integry.ems_model.entity.*; +import it.integry.ems_model.entity.key.DtbOrdtKey; import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.types.OperationType; import it.integry.ems_model.utility.UtilityDB; @@ -159,5 +162,14 @@ public class ProductionWarehouseService { + } + + public void updateDestinazioneOrdine(DtbOrdt ordineLav, String codJfas, String posizione) throws Exception{ + DtbOrdSteps lastStep = MesUtility.getOrderLastStep(ordineLav,codJfas, multiDBTransactionManager.getPrimaryConnection()); + + lastStep + .setPosizioneOut(posizione) + .setOperation(OperationType.UPDATE); + } } diff --git a/ems-engine/src/main/java/it/integry/ems/production/utility/MesUtility.java b/ems-engine/src/main/java/it/integry/ems/production/utility/MesUtility.java new file mode 100644 index 0000000000..dfd0017797 --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/production/utility/MesUtility.java @@ -0,0 +1,128 @@ +package it.integry.ems.production.utility; + +import it.integry.ems.exception.PrimaryDatabaseNotPresentException; +import it.integry.ems.sync.MultiDBTransaction.Connection; +import it.integry.ems_model.db.ResultSetMapper; +import it.integry.ems_model.entity.DtbOrdSteps; +import it.integry.ems_model.entity.DtbOrdt; +import it.integry.ems_model.utility.UtilityDB; +import it.integry.ems_model.utility.UtilityString; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +public class MesUtility { + + public static int getMaxFaseOrdine(DtbOrdt ordineLav, Connection connection) throws SQLException, PrimaryDatabaseNotPresentException { + String sql = "select top 1 num_fase \n" + + "from dtb_ord_steps \n" + + "where data_ord = " + UtilityDB.valueToString(ordineLav.getDataOrd()) + + " and num_ord = " + UtilityDB.valueToString(ordineLav.getNumOrd()) + + " and gestione = " + UtilityDB.valueToString(ordineLav.getGestione()) + + " order by num_fase desc "; + return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql); + } + + public static List getOpenedSteps(String codJfas, Connection connection) throws Exception { + + String whereCondCodJfas = ""; + + if (!UtilityString.isNullOrEmpty(codJfas)) { + whereCondCodJfas = " AND cod_jfas = " + UtilityDB.valueToString(codJfas); + } + + String sql = "SELECT * " + + "FROM dtb_ord_steps " + + "WHERE id_step > 0 " + + "AND data_fine IS NULL " + + whereCondCodJfas; + + return UtilityDB.executeSimpleQueryDTO(connection, sql, DtbOrdSteps.class); + } + + + public static DtbOrdSteps getOpenOrderStepOnFase(DtbOrdt order, String codJfas, Connection connection) throws Exception { + String sql = "SELECT * " + + " FROM dtb_ord_steps " + + " WHERE id_step > 0 " + + " AND data_ord = " + UtilityDB.valueToString(order.getDataOrd()) + + " AND gestione = " + UtilityDB.valueToString(order.getGestione()) + + " AND num_ord = " + UtilityDB.valueToString(order.getNumOrd()) + + " AND cod_jfas = " + UtilityDB.valueToString(codJfas) + + " ORDER BY ISNULL(data_fine,GETDATE()) desc"; + + return UtilityDB.executeSimpleQueryOnlyFirstRowDTO(connection, sql, DtbOrdSteps.class); + } + + public static DtbOrdSteps getOrderLastStep(DtbOrdt order, String codJfas, Connection connection) throws Exception { + String whereCondCodJfas = ""; + + if (!UtilityString.isNullOrEmpty(codJfas)) { + whereCondCodJfas = " AND cod_jfas = " + UtilityDB.valueToString(codJfas); + } + + String sql = "SELECT TOP 1 * FROM (\n" + + " SELECT gestione,\n" + + " data_ord,\n" + + " num_ord,\n" + + " MAX(id_step) OVER ( PARTITION BY gestione, data_ord, num_ord) + 1 as id_step,\n" + + " id_riga,\n" + + " cod_jfas,\n" + + " null as data_iniz,\n" + + " null as data_fine,\n" + + " qta_prod,\n" + + " qta_allocata,\n" + + " descrizione_attivita,\n" + + " note,\n" + + " qta_trasferite,\n" + + " qta_scartate,\n" + + " qta_in_prod,\n" + + " qta_disp,\n" + + " qta_immesse,\n" + + " qta_disp_immessa,\n" + + " cod_mdep,\n" + + " cod_dtip,\n" + + " cod_anag,\n" + + " data_doc,\n" + + " ser_doc,\n" + + " num_doc,\n" + + " id_riga_doc,\n" + + " num_fase,\n" + + " flag_tipo_tempo,\n" + + " hr_time,\n" + + " hr_num,\n" + + " qta_lav,\n" + + " unt_mis_lav,\n" + + " rap_conv_lav,\n" + + " cod_prod_pri,\n" + + " activity_id " + + "FROM ( " + + " SELECT * " + + " FROM dtb_ord_steps " + + " WHERE num_ord = " + UtilityDB.valueToString(numOrd) + + " AND gestione = " + UtilityDB.valueToString(gestioneOrd) + + " AND data_ord = " + UtilityDB.valueToString(dataOrd) + + whereCondCodJfas + + " UNION ALL " + + " SELECT * " + + " FROM dtb_ord_steps " + + " WHERE num_ord = " + UtilityDB.valueToString(numOrd) + + " AND gestione = " + UtilityDB.valueToString(gestioneOrd) + + " AND data_ord = " + UtilityDB.valueToString(dataOrd) + + " ) tmp " + + " ) tmp"; + + PreparedStatement ps = multiDBTransactionManager.prepareStatement(sql); + ResultSet rs = ps.executeQuery(); + + ResultSetMapper rsSteps = new ResultSetMapper(); + DtbOrdSteps lastStep = rsSteps.mapResultSetToObject(rs, DtbOrdSteps.class); + + rs.close(); + ps.close(); + + return UtilityDB.executeSimpleQueryOnlyFirstRowDTO(connection, sql, DtbOrdSteps.class); + } +}