From 8601f4fd902eeeea88c7aaae246244abdda5713e Mon Sep 17 00:00:00 2001 From: Valerio Castellana Date: Fri, 18 Apr 2025 14:54:35 +0200 Subject: [PATCH] gestione documenti di trasferimento in emissione documenti di vendita --- .../service/DocumentiDirettiService.java | 177 +++--------------- .../ems/retail/wms/Utility/WMSUtility.java | 2 +- .../generic/service/WMSGenericService.java | 11 +- .../generic/service/WMSGiacenzaULService.java | 9 +- 4 files changed, 38 insertions(+), 161 deletions(-) diff --git a/ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java b/ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java index 59798ea1ae..2a8a1ebb57 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java +++ b/ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java @@ -11,6 +11,8 @@ import it.integry.ems.retail.wms.accettazione.service.WMSAccettazioneService; import it.integry.ems.retail.wms.dto.*; import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO; import it.integry.ems.retail.wms.generic.dto.RetrieveArtsInGiacenzaByArtRequestDTO; +import it.integry.ems.retail.wms.generic.dto.SpostaUlRequestDTO; +import it.integry.ems.retail.wms.generic.service.WMSGenericService; import it.integry.ems.retail.wms.generic.service.WMSGiacenzaULService; import it.integry.ems.retail.wms.vendita.service.WMSSpedizioneService; import it.integry.ems.rules.businessLogic.enums.TipoEmissione; @@ -55,6 +57,8 @@ public class DocumentiDirettiService { private WMSSpedizioneService wmsSpedizioneService; @Autowired private WMSGiacenzaULService wmsGiacenzaULService; + @Autowired + private WMSGenericService wmsGenericService; public List save(DtbDoct dtbDoct, boolean isInsert) throws Exception { List entityList = new ArrayList<>(); @@ -79,7 +83,7 @@ public class DocumentiDirettiService { } //controllo packingList documento per eventuali trasferimenti - checkUDSForTransfer(dtbDoct, entityList, isInsert); + List ulTrasferiete = checkUDSForTransfer(dtbDoct, entityList, isInsert); if (UtilityString.equalsIgnoreCase((String) datiTipoDoc.get("gestione"), "A")) { if (!isInsert && dtbDoct.getOldPk() != null) { @@ -130,12 +134,9 @@ public class DocumentiDirettiService { } - private DtbDoct checkUDSForTransfer(DtbDoct dtbDoct, List entityList, boolean isNewDoc) throws Exception { + private List checkUDSForTransfer(DtbDoct dtbDoct, List entityList, boolean isNewDoc) throws Exception { if (dtbDoct.getMtbColt().isEmpty() && isNewDoc) return null; - String codDtipTrasf = setupGest.getSetupDepo(multiDBTransactionManager.getPrimaryConnection(), "PICKING", "LOGISTICA", "COD_DTIP_DOC_TRASF_INTERNI", dtbDoct.getCodMdep()); - if (UtilityString.isNullOrEmpty(codDtipTrasf)) - return null; // String whereCondColli = StringUtils.join(dtbDoct.getMtbColt().stream().filter(x -> x.getOperation() == null || !x.getOperation().equals(OperationType.DELETE)).map(ul -> { try { @@ -144,160 +145,32 @@ public class DocumentiDirettiService { throw new RuntimeException(e); } }).collect(Collectors.toList()), " OR "); - List artsToTransfer; + + List ulsToTransfer; if (UtilityString.isNullOrEmpty(whereCondColli)) { - artsToTransfer = new ArrayList<>(); - } else { - artsToTransfer = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format("WITH uds AS (SELECT *\n" + - " FROM mtb_colt\n" + - " WHERE cod_mdep <> {}\n" + - " AND (" + whereCondColli + "))\n" + - "\n" + - "SELECT mtb_colt.data_collo,\n" + - " mtb_colt.ser_collo,\n" + - " mtb_colt.gestione,\n" + - " mtb_colt.num_collo,\n" + - " cod_mdep,\n" + - " cod_mart,\n" + - " partita_mag,\n" + - " mtb_colt.cod_tcol,\n" + - " SUM(qta_col) AS qta_col,\n" + - " SUM(num_cnf) AS num_cnf\n" + - "FROM uds mtb_colt\n" + - " INNER JOIN mtb_colr ON mtb_colt.gestione = mtb_colr.gestione AND mtb_colt.data_collo = mtb_colr.data_collo AND\n" + - " mtb_colt.ser_collo = mtb_colr.ser_collo AND mtb_colt.num_collo = mtb_colr.num_collo\n" + - "GROUP BY mtb_colt.data_collo, mtb_colt.ser_collo, mtb_colt.gestione, mtb_colt.num_collo, cod_mdep, partita_mag,cod_mart, mtb_colt.cod_tcol\n", dtbDoct.getCodMdep(), whereCondColli) - , UlVenditaDTO.class); - if (artsToTransfer == null) artsToTransfer = new ArrayList<>(); + return null; } + ulsToTransfer = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format( + "SELECT gestione,data_collo,ser_collo,num_collo,barcode_ul,cod_mdep from mvw_sitart_udc_det_inventario where cod_mdep <> {} and (" + whereCondColli + ")",dtbDoct.getCodMdep() + ), MtbColt.class); + + if (UtilityList.isNullOrEmpty(ulsToTransfer)) return null; + // - // - MtbDepo mtbDepo = new MtbDepo(); - mtbDepo.setCodMdep(dtbDoct.getCodMdep()) - .setOperation(OperationType.SELECT_OBJECT); - entityProcessor.processEntity(mtbDepo, multiDBTransactionManager); - final String gestName = "DTB_DOCT"; - final String sectionVendita = "VENDITA"; - final String keySectionTipoAttivita = "TIPO_ATTIVITA"; - String activityTypeId = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, sectionVendita, keySectionTipoAttivita); - if (UtilityString.isNullOrEmpty(activityTypeId)) - throw new Exception(String.format("Tipo attività non configurato %s -> %s -> %s", gestName, sectionVendita, keySectionTipoAttivita)); - // - // - String activityId = dtbDoct.getActivityId(); - if (!isNewDoc) { - if (UtilityString.isNullOrEmpty(activityId)) { - String sql = Query.format("SELECT activity_id FROM dtb_doct WHERE cod_anag = %s AND cod_dtip = %s AND data_doc = %s AND ser_doc = %s AND num_doc = %s", - dtbDoct.getCodAnag(), - dtbDoct.getCodDtip(), - dtbDoct.getDataDoc(), - dtbDoct.getSerDoc(), - dtbDoct.getNumDoc()); - activityId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); - } - } - if (UtilityString.isNullOrEmpty(activityId)) { - StbActivity activity = createStbActivity(activityTypeId); - entityList.add(0, activity); - activityId = activity.getActivityId(); - dtbDoct.setActivityId(activityId); - } - // - - List docTrasfList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT cod_anag,data_doc,ser_doc,num_doc,cod_dtip,cod_mdep from dtb_doct where activity_id = {} and cod_dtip = {} ", activityId, codDtipTrasf), DtbDoct.class); - if (docTrasfList == null) docTrasfList = new ArrayList<>(); - docTrasfList = docTrasfList.stream().peek(x -> x.setOperation(OperationType.DELETE)).collect(Collectors.toList()); - - List depositiPartenza = artsToTransfer.stream().map(UlVenditaDTO::getCodMdep).distinct().collect(Collectors.toList()); + List depositiPartenza = ulsToTransfer.stream().map(MtbColt::getCodMdep).distinct().collect(Collectors.toList()); for (String codMdep : depositiPartenza) { - // - DtbDoct docTrasf = null; - - if (!isNewDoc) { - docTrasf = docTrasfList.stream().filter(x -> x.getCodMdep().equals(codMdep)).findFirst().orElse(null); - if (docTrasf != null) { - docTrasf.setOperation(OperationType.UPDATE); - List oldDocRows = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), "SELECT * from dtb_docr where " + docTrasf.getPkWhereCond(), DtbDocr.class); - - if (!UtilityList.isNullOrEmpty(oldDocRows)) { - docTrasf.getDtbDocr().addAll(oldDocRows.stream().peek(row -> row.setQtaDoc(BigDecimal.ZERO).setOperation(OperationType.UPDATE)).collect(Collectors.toList())); - } - } - } - if (docTrasf == null) { - docTrasf = new DtbDoct(); - docTrasf - .setCodMdep(codMdep) - .setCodVdes(mtbDepo.getCodVdes()) - .setCodAnag(mtbDepo.getCodAnag()) - .setCodDtip(codDtipTrasf) - .setActivityId(activityId); - docTrasf.setOperation(OperationType.INSERT); - docTrasfList.add(docTrasf); - } - // - // - Map> ulToTransf = artsToTransfer.stream() - .filter(ul -> ul.getCodMdep().equalsIgnoreCase(codMdep)) - .collect(groupingBy(UlVenditaDTO::getArticoloPartita)); - // - // - - for (ArticoloPartitaDTO articoloPartitaDTO : ulToTransf.keySet()) { - DtbDocr row = docTrasf.getDtbDocr().stream().filter(docR -> docR.getCodMart().equalsIgnoreCase(articoloPartitaDTO.getCodMart()) && docR.getPartitaMag().equalsIgnoreCase(articoloPartitaDTO.getPartitaMag())).findFirst().orElse(null); - if (row == null) { - row = new DtbDocr(); - row.setCodMart(articoloPartitaDTO.getCodMart()) - .setPartitaMag(articoloPartitaDTO.getPartitaMag()) - .setQtaDoc(BigDecimal.ZERO) - .setNumCnf(BigDecimal.ZERO) - .setOperation(OperationType.INSERT); - docTrasf.getDtbDocr().add(row); - } - - row - .setQtaDoc(ulToTransf.get(articoloPartitaDTO).stream().map(UlVenditaDTO::getQtaCol).reduce(BigDecimal.ZERO, BigDecimal::add)) - .setNumCnf(ulToTransf.get(articoloPartitaDTO).stream().map(UlVenditaDTO::getNumCnf).reduce(BigDecimal.ZERO, BigDecimal::add)); - } - - // - Map> ulForCodTcol = artsToTransfer.stream().filter(x -> !UtilityString.isNullOrEmpty(x.getCodTcol())).collect(groupingBy(UlVenditaDTO::getCodTcol)); - for (String codTcol : ulForCodTcol.keySet()) { - MtbAart mtbAart = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT * from mtb_tcol where cod_tcol = {}", codTcol), MtbAart.class); - if (mtbAart == null || UtilityString.isNullOrEmpty(mtbAart.getCodMart())) - continue; - DtbDocr row = docTrasf.getDtbDocr().stream().filter(docR -> docR.getCodMart().equalsIgnoreCase(mtbAart.getCodMart())).findFirst().orElse(null); - if (row == null) { - row = new DtbDocr(); - row.setCodMart(mtbAart.getCodMart()) - .setQtaDoc(BigDecimal.ZERO) - .setQtaCnf(mtbAart.getQtaCnf()) - .setOperation(OperationType.INSERT); - docTrasf.getDtbDocr().add(row); - } - row.setQtaDoc(BigDecimal.valueOf(ulForCodTcol.get(codTcol).size())); - } - - // - - - // - // - for (DtbDocr docR : docTrasf.getDtbDocr()) { - if (UtilityBigDecimal.equalsTo(docR.getQtaDoc(), BigDecimal.ZERO)) - docR.setOperation(OperationType.DELETE); - } - if (docTrasf.getDtbDocr().stream().allMatch(row -> row.getOperation().equals(OperationType.DELETE))) - docTrasf.setOperation(OperationType.DELETE); - // - + SpostaUlRequestDTO transferRequest = new SpostaUlRequestDTO(); + transferRequest + .setCodMdep(dtbDoct.getCodMdep()) + .setCreateDocAutomatically(true) + .setAnnotazioni(String.format("Trasferimento per ordine di vendita n.%d del %s",dtbDoct.getNumOrd(),UtilityDate.formatDate(dtbDoct.getDataOrd(),CommonConstants.DATE_FORMAT_DMY))) + .setMtbColtsToMove(ulsToTransfer.stream().filter(u -> u.getCodMdep().equals(codMdep)).collect(Collectors.toList())); + wmsGenericService.spostaUL(transferRequest); } - entityList.addAll(docTrasfList); - - return dtbDoct; + return dtbDoct.getMtbColt(); } private HashMap getOldPkDoc(DtbDoct dtbDoct) throws IOException { @@ -688,7 +561,7 @@ public class DocumentiDirettiService { List createUDSRequestOrderDTO = Collections.emptyList(); - if (createUDSFromDocuments.isMonoUl()){ + if (createUDSFromDocuments.isMonoUl()) { createUDSRequestOrderDTO = createUDSFromDocuments.getUlRows().stream() .map( x -> { diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/Utility/WMSUtility.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/Utility/WMSUtility.java index badee53425..973220952d 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/Utility/WMSUtility.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/Utility/WMSUtility.java @@ -155,7 +155,7 @@ public class WMSUtility { WMSGiacenzaULService wmsGiacenzaULService = ApplicationContextProvider.getApplicationContext().getBean(WMSGiacenzaULService.class); final List mvwSitArtUdcDetInventarioDTOS = - wmsGiacenzaULService.retrieveArtsInGiacenzaByBarcodeUls(connection, ssccList); + wmsGiacenzaULService.retrieveArtsInGiacenzaByBarcodeUls(connection, ssccList,true); if (mvwSitArtUdcDetInventarioDTOS.isEmpty()) throw new Exception("Nessun articolo trovato per il barcode: " + ssccList); diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java index 3c78f3beee..98f974a06a 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java @@ -2025,13 +2025,15 @@ public class WMSGenericService { final List currentItemSituationList = wmsGiacenzaULService.retrieveArtsInGiacenzaByBarcodeUls(multiDBTransactionManager.getPrimaryConnection(), - ulToMove); + ulToMove,true); List codMdeps = currentItemSituationList.stream() .map(MvwSitArtUdcDetInventarioDTO::getCodMdep) .distinct() .collect(Collectors.toList()); - + if (UtilityList.isNullOrEmpty(currentItemSituationList)){ + throw new Exception("Nessuna UL trovata in giacenza"); + } if (codMdeps.isEmpty()) { throw new Exception("Nessun deposito di partenza selezionato!"); } @@ -2060,7 +2062,7 @@ public class WMSGenericService { } } String codMdepPartenza = codMdeps.get(0); -// List entitiesToSave = new ArrayList<>(); + String codMdepDoc = codMdepPartenza; LoadColliDTO docTrasfRequest = null; // @@ -2074,7 +2076,6 @@ public class WMSGenericService { String codAnag = mtbDepoArrivo.getCodAnag(); String codVdes = mtbDepoArrivo.getCodVdes(); - String codMdepDoc = codMdepPartenza; String sql = Query.format( "SELECT segno_qta_car - segno_qta_scar FROM dtb_tipi WHERE cod_dtip = %s", @@ -2113,7 +2114,7 @@ public class WMSGenericService { // if (gestisciColli) { - movimento = WMSUtility.createInternalMovement(codMdepPartenza); + movimento = WMSUtility.createInternalMovement(codMdepDoc); // entitiesToSave.add(movimento); final List cambiaPosizioneUlMovements = WMSUtility.createCambiaPosizioneUlMovements(multiDBTransactionManager.getPrimaryConnection(), diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGiacenzaULService.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGiacenzaULService.java index 48a23f1466..2d04621841 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGiacenzaULService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGiacenzaULService.java @@ -22,6 +22,9 @@ import java.util.stream.Collectors; public class WMSGiacenzaULService { private String createBaseQuery(boolean withTestataCollo) { + return createBaseQuery(withTestataCollo,false); + } + private String createBaseQuery(boolean withTestataCollo, boolean withUscite) { return "SELECT sit_art.gestione,\n" + " sit_art.data_collo,\n" + " sit_art.ser_collo,\n" + @@ -59,7 +62,7 @@ public class WMSGiacenzaULService { " sit_art.num_collo = mtb_colt.num_collo AND\n" + " sit_art.gestione = mtb_colt.gestione AND\n" + " sit_art.ser_collo = mtb_colt.ser_collo\n" : "") + - " WHERE sit_art.segno = 1\n"; + " WHERE "+(withUscite?"1=1":"sit_art.segno = 1\n"); } public List retrieveArtsInGiacenzaByPosition(Connection connection, String position) throws Exception { @@ -262,9 +265,9 @@ public class WMSGiacenzaULService { return UtilityDB.executeSimpleQueryDTO(connection, sql, MvwSitArtUdcDetInventarioDTO.class); } - public List retrieveArtsInGiacenzaByBarcodeUls(Connection connection, List barcodeUls) throws Exception { + public List retrieveArtsInGiacenzaByBarcodeUls(Connection connection, List barcodeUls, boolean includeUscite) throws Exception { - String sql = createBaseQuery(true) + + String sql = createBaseQuery(true,includeUscite) + " AND sit_art.barcode_ul IN (" + UtilityQuery.concatStringFieldsWithSeparator(barcodeUls, ", ") + ")"; return UtilityDB.executeSimpleQueryDTO(connection, sql, MvwSitArtUdcDetInventarioDTO.class);