Fix su query di calcolo fabbisogno linee prod per WMS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-12-04 17:54:08 +01:00
parent 149bdc36b3
commit 118d2d83d5
2 changed files with 32 additions and 21 deletions

View File

@@ -8,32 +8,46 @@ import java.util.Date;
public class WMSApprovvigionamentoLineeDTO {
@SqlField(value = "cod_mart")
private String codMart;
@SqlField(value = "cod_jfas")
private String codJfas;
@SqlField(value = "qta_ord")
private BigDecimal qtaOrd;
@SqlField(value = "num_cnf_ord")
private BigDecimal numCnfOrd;
@SqlField(value = "unt_mis")
private String untMis;
@SqlField(value = "qta_col_versata")
private BigDecimal qtaColVersata;
@SqlField(value = "num_cnf_versata")
private BigDecimal numCnfVersata;
@SqlField(value = "qta_fabbisogno")
private BigDecimal qtaFabbisogno;
@SqlField(value = "num_cnf_fabbisogno")
private BigDecimal numCnfFabbisogno;
@SqlField(value = "data_inizio")
private Date dataInizio;
@SqlField(value = "data_fine")
private Date dataFine;
@SqlField(value = "cod_mgrp")
private String codMgrp;
@SqlField(value = "descrizione_mgrp")
private String descrizioneMgrp;
@SqlField(value = "cod_msgr")
private String codMsgr;
@SqlField(value = "descrizione_msgr")
private String descrizioneMsgr;

View File

@@ -2,6 +2,7 @@ package it.integry.ems.retail.wms.lavorazione.service;
import it.integry.ems.retail.wms.lavorazione.dto.WMSApprovvigionamentoLineeDTO;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
@@ -17,10 +18,7 @@ public class WMSApprovvigionamentoLineeService {
private MultiDBTransactionManager multiDBTransactionManager;
public List<WMSApprovvigionamentoLineeDTO> retrieveFabbisogno(String numOrd, String codMdep) throws Exception {
String sql = "declare @codMdep varchar(5)\n" +
"set @codMdep = " + UtilityDB.valueToString(codMdep) + ";\n" +
" \n" +
" \n" +
String sql = Query.format(
"WITH withdraw_mtb_colr AS (SELECT cod_mart,\n" +
" SUM(ISNULL(qta_col, 0)) AS qta_col,\n" +
" SUM(ISNULL(num_cnf, 0)) AS num_cnf,\n" +
@@ -36,7 +34,7 @@ public class WMSApprovvigionamentoLineeService {
" AND cod_dtip IS NULL\n" +
" GROUP BY cod_mart, mtb_colr.data_ord, mtb_colr.num_ord, mtb_colr.gestione),\n" +
" custom_mtb_colr AS (SELECT cod_mart, SUM(qta_col) AS qta_col, SUM(num_cnf) AS num_cnf, posizione\n" +
" FROM mvw_sitart_udc_det_inventario\t\t\t\t\t\t \n" +
" FROM mvw_sitart_udc_det_inventario\n" +
" GROUP BY cod_mart, posizione),\n" +
" grouped_ord AS (SELECT dtb_ordr.cod_mart,\n" +
" dtb_ordt.cod_jfas,\n" +
@@ -60,8 +58,8 @@ public class WMSApprovvigionamentoLineeService {
" AND flag_evaso_prod = 'I'\n" +
" AND dtb_ordr.flag_evaso_forzato = 'N'\n" +
" AND flag_annulla = 'N'\n" +
" AND dtb_ordt.cod_mdep = @codMdep\n" +
"\t\t\t\t\t AND dtb_ordt.num_ord in (" + numOrd + ")\n" +
" AND dtb_ordt.cod_mdep = {}\n" +
" AND dtb_ordt.num_ord IN (" + numOrd + ")\n" +
" GROUP BY dtb_ordr.cod_mart, dtb_ordt.cod_jfas, dtb_ordt.cod_mdep, dtb_ordt.gestione),\n" +
" tmp_ord AS (SELECT grouped_ord.cod_mart,\n" +
" mtb_aart.unt_mis,\n" +
@@ -70,26 +68,25 @@ public class WMSApprovvigionamentoLineeService {
" SUM(num_cnf_ord) - SUM(num_cnf_scaricata) AS num_cnf_ord\n" +
" FROM grouped_ord\n" +
" INNER JOIN mtb_aart ON grouped_ord.cod_mart = mtb_aart.cod_mart\n" +
" GROUP BY grouped_ord.cod_mart, mtb_aart.unt_mis, grouped_ord.cod_jfas)\t\t\t\t\n" +
"\t\t\t\t ,\n" +
" GROUP BY grouped_ord.cod_mart, mtb_aart.unt_mis, grouped_ord.cod_jfas),\n" +
" ord_without_positioned_mtb_colt AS (SELECT DISTINCT tmp_ord.cod_mart,\n" +
" tmp_ord.cod_jfas,\n" +
" ISNULL(custom_mtb_colr_on_linea.posizione, tmp_ord.cod_jfas) AS posizione,\n" +
" unt_mis,\n" +
" qta_ord AS qta_ord_calc,\n" +
" num_cnf_ord AS num_cnf_ord_calc,\n" +
" ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_gia_posizionata,\n" +
" ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_gia_posizionata,\n" +
" qta_ord - ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_fabbisogno,\n" +
" num_cnf_ord - ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_fabbisogno\n" +
" tmp_ord.cod_jfas,\n" +
" unt_mis,\n" +
" qta_ord AS qta_ord_calc,\n" +
" num_cnf_ord AS num_cnf_ord_calc,\n" +
" SUM(ISNULL(custom_mtb_colr_on_linea.qta_col, 0)) AS qta_gia_posizionata,\n" +
" SUM(ISNULL(custom_mtb_colr_on_linea.num_cnf, 0)) AS num_cnf_gia_posizionata,\n" +
" qta_ord - SUM(ISNULL(custom_mtb_colr_on_linea.qta_col, 0)) AS qta_fabbisogno,\n" +
" num_cnf_ord - SUM(ISNULL(custom_mtb_colr_on_linea.num_cnf, 0)) AS num_cnf_fabbisogno\n" +
" FROM tmp_ord\n" +
" INNER JOIN jrl_fase_posizioni\n" +
" ON tmp_ord.cod_jfas = jrl_fase_posizioni.cod_jfas \n" +
" ON tmp_ord.cod_jfas = jrl_fase_posizioni.cod_jfas\n" +
" LEFT OUTER JOIN custom_mtb_colr custom_mtb_colr_on_linea\n" +
" ON tmp_ord.cod_mart =\n" +
" custom_mtb_colr_on_linea.cod_mart AND\n" +
" jrl_fase_posizioni.posizione =\n" +
" custom_mtb_colr_on_linea.posizione)\n" +
" custom_mtb_colr_on_linea.posizione\n" +
" GROUP BY tmp_ord.cod_mart, tmp_ord.cod_jfas, unt_mis, qta_ord, num_cnf_ord)\n" +
"SELECT t.cod_mart,\n" +
" t.unt_mis,\n" +
" SUM(qta_ord_calc) AS qta_ord,\n" +
@@ -109,7 +106,7 @@ public class WMSApprovvigionamentoLineeService {
"GROUP BY t.cod_mart, t.unt_mis, mtb_aart.cod_mgrp, mtb_grup.descrizione, mtb_aart.cod_msgr, mtb_sgrp.descrizione\n" +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0\n" +
" AND SUM(num_cnf_ord_calc - num_cnf_gia_posizionata) > 0\n" +
"ORDER BY t.cod_mart";
"ORDER BY t.cod_mart", codMdep);
return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, WMSApprovvigionamentoLineeDTO.class);
}