From 6c445cc0e433c0079c53245d283f34c5c15e5398 Mon Sep 17 00:00:00 2001 From: ValerioC Date: Mon, 30 Sep 2024 10:07:12 +0200 Subject: [PATCH] [ROSSOGARGANO] cambio ordine di raccolta su certificato --- .../it/integry/ems_model/entity/MtbColt.java | 4 + .../controller/OrtoFruttaController.java | 8 + .../service/OrtoFruttaProductionService.java | 156 ++++++++++++------ .../WMSMagazzinoBufferController.java | 9 + .../service/WMSMagazzinoBufferService.java | 25 ++- 5 files changed, 151 insertions(+), 51 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/MtbColt.java b/ems-core/src/main/java/it/integry/ems_model/entity/MtbColt.java index bffec87c99..64038fc39a 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/MtbColt.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/MtbColt.java @@ -737,4 +737,8 @@ public class MtbColt extends EntityBase implements EquatableEntityInterface x.getCodMart().equalsIgnoreCase(dto.getCodMart())).findFirst().orElse(new MtbColr()); if (row.getNumOrd() == null) { collo.getMtbColr().add(row); } row + .setNumOrd(dto.getNumOrd()) + .setDataOrd(UtilityLocalDate.localDateToDate(dto.getDataOrd())) .setQtaCol(dto.getQtaCol()) + .setPartitaMag(dto.getPartitaRaccolta()) .setPesoNettoKg(dto.getPesoNettoPedane()) .setPesoLordoKg(dto.getPesoLordoCamion()) .setOperation(OperationType.INSERT_OR_UPDATE); if (!UtilityBigDecimal.isNullOrZero(dto.getNumCnf())) row.setNumCnf(dto.getNumCnf()) .setQtaCnf(dto.getQtaCol().divide(dto.getNumCnf(), 2, RoundingMode.HALF_UP)); - sql = "SELECT art_tcol.* from mtb_aart " + " inner join mtb_tcol on mtb_tcol.cod_tcol = mtb_aart.cod_tcol_UI " + " inner join mtb_aart art_tcol on art_tcol.cod_mart = mtb_tcol.cod_mart " + @@ -351,7 +349,6 @@ public class OrtoFruttaProductionService { colloDest = wmsLavorazioneService.createUDC(new CreateUDCRequestDTO().setCodMdep(posizione.getCodMdep()).setPosizione(posizione.getPosizione())); } wmsGenericService.spostaArtsTraUL(collo, colloDest); - } @@ -426,14 +423,7 @@ public class OrtoFruttaProductionService { "SETUP", "SER_DOC_SCAR"); - String sql = "SELECT riga_ord from dtb_ordr where gestione = " + UtilityDB.valueToString(dto.getGestione()) + " " + - " and data_ord =" + UtilityDB.valueToString(dataOrd) + " " + - "AND num_ord = " + UtilityDB.valueToString(dto.getNumOrd()) + " " + - "AND cod_mart = " + UtilityDB.valueToString(ordAcq.getDtbOrdr().get(0).getCodMart()) + " " + - "AND partita_mag = " + UtilityDB.valueToString(ordAcq.getDtbOrdr().get(0).getPartitaMag()); - Integer rigaOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); - - sql = Query.format("SELECT * from dtb_doct where cod_anag = %s AND cod_dtip = %s and activity_id = %s ", dto.getCodAnag(), codDtip, activityId); + String sql = Query.format("SELECT * from dtb_doct where cod_anag = %s AND cod_dtip = %s and activity_id = %s ", dto.getCodAnag(), codDtip, activityId); PreparedStatement ps = multiDBTransactionManager.getPrimaryConnection().prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); DtbDoct slav = UtilityDB.executePreparedStatementDTOOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), ps, DtbDoct.class); @@ -458,6 +448,15 @@ public class OrtoFruttaProductionService { .setCodMdep(ordAcq.getCodMdep()) ; + sql = "SELECT riga_ord from dtb_ordr where gestione = " + UtilityDB.valueToString(dto.getGestione()) + " " + + " and data_ord =" + UtilityDB.valueToString(dataOrd) + " " + + "AND num_ord = " + UtilityDB.valueToString(dto.getNumOrd()) + " " + + "AND cod_mart = " + UtilityDB.valueToString(ordAcq.getDtbOrdr().get(0).getCodMart()) + " " + + "AND partita_mag = " + UtilityDB.valueToString(ordAcq.getDtbOrdr().get(0).getPartitaMag()); + Integer rigaOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + + + BigDecimal qtaScarto = !UtilityBigDecimal.isNullOrZero(dto.getTassoRiduzione()) ? dto.getQtaCol().multiply(dto.getTassoRiduzione()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP) : BigDecimal.ZERO; BigDecimal qtaCnf = dto.getQtaCol().divide(dto.getNumCnf(), 3, RoundingMode.HALF_UP); BigDecimal qtaDoc = dto.getQtaCol().subtract(qtaScarto); @@ -487,15 +486,14 @@ public class OrtoFruttaProductionService { if (dto.getOriginal() != null && dto.isDDTEdited()) { - DtbDoct oldDoc = new DtbDoct(); - oldDoc - .setCodAnag(dto.getOriginal().getCodAnag()) - .setCodDtip(dto.getOriginal().getCodDtipProvv()) - .setDataDoc(UtilityLocalDate.localDateToDate(dto.getOriginal().getDataDocProvv())) - .setSerDoc(dto.getOriginal().getSerDocProvv()) - .setNumDoc(dto.getOriginal().getNumDocProvv()) - .setOperation(OperationType.DELETE); - entityProcessor.processEntity(oldDoc, true, multiDBTransactionManager); + String sql = Query.format("SELECT * from dtb_doct where cod_anag = %s AND cod_dtip = %s and activity_id = %s ", dto.getOriginal().getCodAnag(), dto.getOriginal().getCodDtipProvv(), activityId); + PreparedStatement ps = multiDBTransactionManager.getPrimaryConnection().prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); + DtbDoct oldDoc = UtilityDB.executePreparedStatementDTOOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), ps, DtbDoct.class); + + if (oldDoc != null) { + oldDoc.setOperation(OperationType.DELETE); + entityProcessor.processEntity(oldDoc, true, multiDBTransactionManager); + } } String sql = Query.format("SELECT * from dtb_doct where data_doc = %s and num_doc = %s AND ser_doc = %s and cod_anag = %s AND cod_dtip = %s and activity_id = %s ", @@ -609,6 +607,16 @@ public class OrtoFruttaProductionService { //controllo versamenti certificato + checkVersamenti(activityId); + deleteDocumentiEntrata(activityId); + deleteCaratEntrata(activityId); + deleteColliEntrata(activityId); + + + return collo; + } + + private void checkVersamenti(String activityId) throws Exception { String checkVersamentiSql = Query.format("SELECT count(distinct mtb_colr.num_collo) as nVersamenti\n" + "FROM mtb_colt collo\n" + " inner JOIN mtb_colr\n" + @@ -622,17 +630,41 @@ public class OrtoFruttaProductionService { if (!UtilityInteger.isNullOrZero(nVersamenti)) throw new Exception("Non è consentito eliminare un certificato già versato, correggere gli scarichi e riprovare!"); + } - + private void deleteDocumentiEntrata(String activityId) throws Exception { List docs = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT * from dtb_doct where activity_id = {}", activityId), DtbDoct.class); if (!UtilityList.isNullOrEmpty(docs)) { docs = docs.stream().peek(x -> x.setOperation(OperationType.DELETE)).collect(Collectors.toList()); - entityProcessor.processEntityList(docs, true); + entityProcessor.processEntityList(docs, multiDBTransactionManager,true); UtilityEntity.throwEntitiesException(docs); } + } + + private void deleteCaratEntrata(String activityId) throws Exception { + List carats = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), + Query.format("SELECT * from mtb_partita_mag_carat where activity_id = {}", activityId), + MtbPartitaMagCarat.class); + + //todo: usare mtbPartitaMag come contenitore per + + if (!UtilityList.isNullOrEmpty(carats)) { + + carats = carats.stream().peek(x -> x.setOperation(OperationType.DELETE)).collect(Collectors.toList()); + MtbPartitaMag partita = new MtbPartitaMag(); + partita.setCodMart(carats.get(0).getCodMart()) + .setPartitaMag(carats.get(0).getPartitaMag()) + .setMtbPartitaMagCarat(carats) + .setOperation(OperationType.UPDATE); + entityProcessor.processEntity(partita, true,multiDBTransactionManager); + } + + } + + private void deleteColliEntrata(String activityId) throws Exception { List colts = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT * from mtb_colt where activity_id = {}", activityId), @@ -644,16 +676,46 @@ public class OrtoFruttaProductionService { UtilityEntity.throwEntitiesException(colts); } - List carats = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), - Query.format("SELECT * from mtb_colt where activity_id = {}", activityId), - MtbPartitaMagCarat.class); + } - if (!UtilityList.isNullOrEmpty(carats)) { - carats = carats.stream().peek(x -> x.setOperation(OperationType.DELETE)).collect(Collectors.toList()); - entityProcessor.processEntityList(carats, true); - UtilityEntity.throwEntitiesException(carats); + + public AccettazioneOrtoFruttaDTO accettazioneCambioLotto(AccettazioneOrtoFruttaDTO dto) throws Exception { + String activityId = dto.getActivityId(); + if (UtilityString.isNullOrEmpty(activityId)) { + String sql = Query.format("SELECT activity_id from mtb_colt where data_collo = {} and ser_collo = {} and num_collo = {} and gestione = {}", dto.getDataCollo(), dto.getSerCollo(), dto.getNumCollo(), dto.getGestione()); + activityId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); } + if (UtilityString.isNullOrEmpty(activityId)) + throw new Exception("Dati incompleti per la cencellazione del certificato!"); - return collo; + deleteDocumentiEntrata(activityId); + deleteCaratEntrata(activityId); + accettazioneDaRaccolta(dto); + updateVersamenti(dto); + return dto; + } + + private void updateVersamenti(AccettazioneOrtoFruttaDTO dto) throws Exception { + + + String sql = Query.format("SELECT * from mtb_colr where data_collo_rif = {} and ser_collo_rif = {} and num_collo_rif = {} and gestione_rif = {}", dto.getDataCollo(), dto.getSerCollo(), dto.getNumCollo(), dto.getGestione()); + + List righeScarichi = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, MtbColr.class); + + if (UtilityList.isNullOrEmpty(righeScarichi)) { + return; + } + righeScarichi.stream().peek(x -> x.setPartitaMag(dto.getPartitaMag()).setCodMart(dto.getCodMart()).setOperation(OperationType.UPDATE)).collect(Collectors.toList()); + + + Map> mapScarichi = righeScarichi.stream().collect(Collectors.groupingBy(MtbColt::fromMtbColr)); + + List scarichi = mapScarichi.keySet().stream().peek(x -> { + x.getMtbColr().addAll(mapScarichi.get(x)); + x.setOperation(OperationType.UPDATE); + }).collect(Collectors.toList()); + + entityProcessor.processEntityList(scarichi, true); + UtilityEntity.throwEntitiesException(scarichi); } } diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSMagazzinoBufferController.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSMagazzinoBufferController.java index 31c5fcaca6..bf40003109 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSMagazzinoBufferController.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSMagazzinoBufferController.java @@ -51,6 +51,15 @@ public class WMSMagazzinoBufferController { @RequestBody MagazzinoBufferVersamentoMaterialeCloseRequestDTO magazzinoBufferVersamentoMaterialeCloseRequestDTO) throws Exception { wmsMagazzinoBufferService.endVersamentoMateriale(magazzinoBufferVersamentoMaterialeCloseRequestDTO, posizione); + return ServiceRestResponse.createPositiveResponse(); + } + @RequestMapping(value = "{posizione}/cancelVersamentoMateriale", method = RequestMethod.POST) + public @ResponseBody + ServiceRestResponse cancelVersamentoMateriale(@RequestParam(CommonConstants.PROFILE_DB) String profileDB, + @PathVariable String posizione, + @RequestBody MagazzinoBufferVersamentoMaterialeRequestDTO dto) throws Exception { + wmsMagazzinoBufferService.cancelVersamentoMateriale(dto, posizione); + return ServiceRestResponse.createPositiveResponse(); } } diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSMagazzinoBufferService.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSMagazzinoBufferService.java index 8fb6976cb8..6769778be7 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSMagazzinoBufferService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSMagazzinoBufferService.java @@ -16,10 +16,7 @@ import it.integry.ems_model.entity.MtbColr; import it.integry.ems_model.entity.MtbColt; import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.types.OperationType; -import it.integry.ems_model.utility.UtilityBigDecimal; -import it.integry.ems_model.utility.UtilityDB; -import it.integry.ems_model.utility.UtilityDate; -import it.integry.ems_model.utility.UtilityLocalDate; +import it.integry.ems_model.utility.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; @@ -205,4 +202,24 @@ public class WMSMagazzinoBufferService { DtbDoct doc = loadColliService.createDocFromColli(multiDBTransactionManager, loadColliDTO); entityProcessor.processEntity(doc,true,multiDBTransactionManager); } + + public void cancelVersamentoMateriale(MagazzinoBufferVersamentoMaterialeRequestDTO dto, String posizione) throws Exception { + MtbColt colloVersato = dto.getInputMtbColt(); + String sql = Query.format("SELECT mtb_colt.gestione,mtb_colt.num_collo,mtb_colt.data_collo,mtb_colt.ser_collo,mtb_colt.posizione,mtb_colt.cod_jfas\n" + + "FROM mtb_colr\n" + + " INNER JOIN mtb_colt ON mtb_colr.gestione = mtb_colt.gestione AND mtb_colr.data_collo = mtb_colt.data_collo AND\n" + + " mtb_colr.ser_collo = mtb_colt.ser_collo AND mtb_colr.num_collo = mtb_colt.num_collo\n" + + "WHERE mtb_colt.segno = -1\n" + + " AND mtb_colr.data_collo_rif = {}\n" + + " AND mtb_colr.ser_collo_rif = {}\n" + + " AND mtb_colr.num_collo_rif = {}\n" + + " AND mtb_colr.gestione_rif = {}\n" + + "and mtb_colt.posizione = {}\n" + + " GROUP BY mtb_colt.num_collo, mtb_colt.gestione, mtb_colt.ser_collo, mtb_colt.data_collo, posizione, cod_jfas\n" + + "having sum(mtb_colr.qta_col) = 0\n", colloVersato.getDataCollo(),colloVersato.getSerCollo(),colloVersato.getNumCollo(),colloVersato.getGestione(),posizione); + + MtbColt colloScarico = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(),sql,MtbColt.class); + colloScarico.setOperation(OperationType.DELETE); + entityProcessor.processEntity(colloScarico,false,multiDBTransactionManager); + } }