diff --git a/ems-core/src/main/java/it/integry/ems/dynamic_cache/EntityCacheComponent.java b/ems-core/src/main/java/it/integry/ems/dynamic_cache/EntityCacheComponent.java index f054f9eb4d..beecf08127 100644 --- a/ems-core/src/main/java/it/integry/ems/dynamic_cache/EntityCacheComponent.java +++ b/ems-core/src/main/java/it/integry/ems/dynamic_cache/EntityCacheComponent.java @@ -120,12 +120,14 @@ public class EntityCacheComponent implements ApplicationListener { } } - return entityCache.get(customerDB).get(tableName) + Stream tStream = entityCache.get(customerDB).get(tableName) .values() .parallelStream() - .map(x -> (T) x) - .filter(filterPredicate) - .map(x -> (T) x.clone()); + .map(x -> (T) x); + if (filterPredicate != null) + tStream = tStream.filter(filterPredicate); + + return tStream.map(x -> (T) x.clone()); } diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdt.java b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdt.java index 8624bcdc53..fb984e90d2 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdt.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdt.java @@ -14,6 +14,7 @@ import it.integry.ems_model.business_logic.ProductionBusinessLogic; import it.integry.ems_model.db.ResultSetMapper; import it.integry.ems_model.entity.common.DtbDocOrdR; import it.integry.ems_model.entity.common.DtbDocOrdT; +import it.integry.ems_model.entity.key.DtbOrdtKey; import it.integry.ems_model.types.ApplicationName; import it.integry.ems_model.types.OperationType; import it.integry.ems_model.utility.Query; @@ -1953,4 +1954,14 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface getSetupList(Connection conn, String gestName, String section, String keySection, String separator) throws Exception { + String setup = getSetup(conn,gestName,section,keySection); + if (UtilityString.isNullOrEmpty(setup)) return new ArrayList<>(); + return Arrays.asList(setup.split(separator)); + } } 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 c66c1562e0..2eb41e1168 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 @@ -14,8 +14,8 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.LocalTime; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; @@ -66,6 +66,11 @@ public class ToscaProductionService { } } + sql = "SELECT MIN(CAST(ora AS TIME)) AS ora\n" + + " FROM stb_calr_ore_gg\n" + + " WHERE cod_cal = 'DEFAULT'\n" + + " AND flag_tipo_ora = 'L'"; + LocalTime workStartTime = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); String sqlLastWorkedOrder = "SELECT TOP 1 note, descrizione_attivita, num_ord, data_ord\n" + "FROM dtb_ord_steps\n" + "WHERE gestione = 'L'\n" + " AND cod_jfas = " + UtilityDB.valueToString(codJfas) + " ORDER BY data_ord DESC, num_ord DESC, id_riga desc"; final HashMap stringObjectHashMap = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), sqlLastWorkedOrder); 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 5df3ad88c9..0ed7c39741 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 @@ -436,7 +436,7 @@ public class MesProductionControllerV2 { @RequestMapping("getSetupLinea/{codJfas}") public @ResponseBody - ServiceRestResponse getSetupLinea(@PathVariable String codJfas, @RequestParam String codMdep) throws Exception { + ServiceRestResponse getSetupLinea(@PathVariable String codJfas, @RequestParam(required = false) String codMdep) throws Exception { return ServiceRestResponse.createPositiveResponse(mesProductionService.getSetupLinea(codJfas, codMdep, requestDataDTO.getUsername())); } @@ -528,4 +528,9 @@ public class MesProductionControllerV2 { throw e; } } + + @PostMapping("ordine/materiali") + public ServiceRestResponse getMaterialiOrdineLav(@RequestBody MateriaPrimaOrdineLavorazioneRequestDTO dto) throws Exception { + return ServiceRestResponse.createPositiveResponse(mesProductionService.getMaterialiOrdineLav(dto)); + } } diff --git a/ems-engine/src/main/java/it/integry/ems/production/dto/MES/ArticoloQuantitaDTO.java b/ems-engine/src/main/java/it/integry/ems/production/dto/MES/ArticoloQuantitaDTO.java new file mode 100644 index 0000000000..d3aef36634 --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/production/dto/MES/ArticoloQuantitaDTO.java @@ -0,0 +1,27 @@ +package it.integry.ems.production.dto.MES; + +import java.math.BigDecimal; + +public class ArticoloQuantitaDTO { + private String codArt; + private BigDecimal quantita; + + + public String getCodArt() { + return codArt; + } + + public ArticoloQuantitaDTO setCodArt(String codArt) { + this.codArt = codArt; + return this; + } + + public BigDecimal getQuantita() { + return quantita; + } + + public ArticoloQuantitaDTO setQuantita(BigDecimal quantita) { + this.quantita = quantita; + return this; + } +} diff --git a/ems-engine/src/main/java/it/integry/ems/production/dto/MateriaPrimaOrdineLavorazioneDTO.java b/ems-engine/src/main/java/it/integry/ems/production/dto/MateriaPrimaOrdineLavorazioneDTO.java new file mode 100644 index 0000000000..b0c52f7c9e --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/production/dto/MateriaPrimaOrdineLavorazioneDTO.java @@ -0,0 +1,173 @@ +package it.integry.ems.production.dto; + +import it.integry.ems_model.entity.MtbAart; +import it.integry.ems_model.entity.MtbUntMis; + +import java.math.BigDecimal; + +public class MateriaPrimaOrdineLavorazioneDTO { + + private Integer rigaOrd; + private String codMart; + private String descrizione; + private String descrizioneEstesa; + private BigDecimal qtaGiac; + private BigDecimal qtaLinea; + private BigDecimal qtaOrd; + private BigDecimal qtaScar; + private String untMis; + private BigDecimal rapConv; + private Integer cifreDec; + private String codMgrp; + private String codMsgr; + private String codMsfa; + private String annotazioni; + private boolean compatibile = false; + + + public Integer getRigaOrd() { + return rigaOrd; + } + + public MateriaPrimaOrdineLavorazioneDTO setRigaOrd(Integer rigaOrd) { + this.rigaOrd = rigaOrd; + return this; + } + + public String getCodMart() { + return codMart; + } + + public MateriaPrimaOrdineLavorazioneDTO setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public MateriaPrimaOrdineLavorazioneDTO setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public MateriaPrimaOrdineLavorazioneDTO setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + return this; + } + + public BigDecimal getQtaGiac() { + return qtaGiac; + } + + public MateriaPrimaOrdineLavorazioneDTO setQtaGiac(BigDecimal qtaGiac) { + this.qtaGiac = qtaGiac; + return this; + } + + public BigDecimal getQtaLinea() { + return qtaLinea; + } + + public MateriaPrimaOrdineLavorazioneDTO setQtaLinea(BigDecimal qtaLinea) { + this.qtaLinea = qtaLinea; + return this; + } + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public MateriaPrimaOrdineLavorazioneDTO setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public BigDecimal getQtaScar() { + return qtaScar; + } + + public MateriaPrimaOrdineLavorazioneDTO setQtaScar(BigDecimal qtaScar) { + this.qtaScar = qtaScar; + return this; + } + + public String getUntMis() { + return untMis; + } + + public MateriaPrimaOrdineLavorazioneDTO setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public BigDecimal getRapConv() { + return rapConv; + } + + public MateriaPrimaOrdineLavorazioneDTO setRapConv(BigDecimal rapConv) { + this.rapConv = rapConv; + return this; + } + + public Integer getCifreDec() { + return cifreDec; + } + + public MateriaPrimaOrdineLavorazioneDTO setCifreDec(Integer cifreDec) { + this.cifreDec = cifreDec; + return this; + } + + public String getCodMgrp() { + return codMgrp; + } + + public MateriaPrimaOrdineLavorazioneDTO setCodMgrp(String codMgrp) { + this.codMgrp = codMgrp; + return this; + } + + public String getCodMsgr() { + return codMsgr; + } + + public MateriaPrimaOrdineLavorazioneDTO setCodMsgr(String codMsgr) { + this.codMsgr = codMsgr; + return this; + } + + public String getCodMsfa() { + return codMsfa; + } + + public MateriaPrimaOrdineLavorazioneDTO setCodMsfa(String codMsfa) { + this.codMsfa = codMsfa; + return this; + } + + public String getAnnotazioni() { + return annotazioni; + } + + public MateriaPrimaOrdineLavorazioneDTO setAnnotazioni(String annotazioni) { + this.annotazioni = annotazioni; + return this; + } + + public boolean isCompatibile() { + return compatibile; + } + + public MateriaPrimaOrdineLavorazioneDTO setCompatibile(boolean compatibile) { + this.compatibile = compatibile; + return this; + } + + +} diff --git a/ems-engine/src/main/java/it/integry/ems/production/dto/MateriaPrimaOrdineLavorazioneRequestDTO.java b/ems-engine/src/main/java/it/integry/ems/production/dto/MateriaPrimaOrdineLavorazioneRequestDTO.java new file mode 100644 index 0000000000..cb06de4a6b --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/production/dto/MateriaPrimaOrdineLavorazioneRequestDTO.java @@ -0,0 +1,68 @@ +package it.integry.ems.production.dto; + +import java.time.LocalDate; + +public class MateriaPrimaOrdineLavorazioneRequestDTO { + + private String codJfas; + private String gestione; + private LocalDate dataOrd; + private Integer numOrd; + private Integer idLotto; + private boolean includeMaterialiInLinea = false; + + + public String getCodJfas() { + return codJfas; + } + + public MateriaPrimaOrdineLavorazioneRequestDTO setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public String getGestione() { + return gestione; + } + + public MateriaPrimaOrdineLavorazioneRequestDTO setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public LocalDate getDataOrd() { + return dataOrd; + } + + public MateriaPrimaOrdineLavorazioneRequestDTO setDataOrd(LocalDate dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public Integer getNumOrd() { + return numOrd; + } + + public MateriaPrimaOrdineLavorazioneRequestDTO setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + return this; + } + + public Integer getIdLotto() { + return idLotto; + } + + public MateriaPrimaOrdineLavorazioneRequestDTO setIdLotto(Integer idLotto) { + this.idLotto = idLotto; + return this; + } + + public boolean isIncludeMaterialiInLinea() { + return includeMaterialiInLinea; + } + + public MateriaPrimaOrdineLavorazioneRequestDTO setIncludeMaterialiInLinea(boolean includeMaterialiInLinea) { + this.includeMaterialiInLinea = includeMaterialiInLinea; + return this; + } +} 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 0efac066d3..0c73f48c3f 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 @@ -12,6 +12,7 @@ import it.integry.ems.document.dto.ChiusuraLavorazioneDTO; 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.dynamic_cache.EntityCacheComponent; import it.integry.ems.exception.MissingDataException; import it.integry.ems.migration._base.IntegryCustomerDB; import it.integry.ems.production.dto.*; @@ -19,6 +20,7 @@ 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.production.utility.ProductionContabilityUtility; import it.integry.ems.report.dto.JasperDTO; import it.integry.ems.report.dto.PairsDTO; import it.integry.ems.retail.pvmRetail.service.PvmService; @@ -40,6 +42,7 @@ import it.integry.ems.service.dto.production.InsertPartitaMagRequestDTO; import it.integry.ems.service.dto.production.OrdineLavorazioneDTO; import it.integry.ems.service.exception.EmptyReportException; import it.integry.ems.service.production.ProductionOrderDataHandlerService; +import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.utility.UtilityDebug; import it.integry.ems.utility.UtilityEntity; @@ -130,6 +133,8 @@ public class MesProductionServiceV2 { @Autowired private ApplicationEventPublisher applicationEventPublisher; + @Autowired + private EntityCacheComponent entityCacheComponent; public BasePanelAnswerDTO callSupervisorServiceGET(String serviceIp, int servicePort, String serviceName, HashMap queryParams) throws Exception { Integer timeout = setupGest.getSetupInteger(multiDBTransactionManager.getPrimaryConnection(), "MES", "HMI", "TIMEOUT_MACHINE_CONNECTION", 5); @@ -1332,7 +1337,9 @@ public class MesProductionServiceV2 { } public List getSetupLinea(String codJfas, String codMdep, String username) throws Exception { - + if (UtilityString.isNullOrEmpty(codMdep)) { + codMdep = MesUtility.getDepoLinea(codJfas,multiDBTransactionManager.getPrimaryConnection()); + } String sql = Query.format("SELECT stb_gest_setup.gest_name,\n" + " stb_gest_setup.section,\n" + " stb_gest_setup.key_section,\n" + @@ -2562,4 +2569,214 @@ public class MesProductionServiceV2 { return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdCqr.class); } + + public List getMaterialiOrdineLav(MateriaPrimaOrdineLavorazioneRequestDTO dto) throws Exception { + + Map> mapArticoli = new HashMap<>(); + + Connection connection = multiDBTransactionManager.getPrimaryConnection(); + + +// boolean viewMovimentiDaDoc = setupGest.getSetupDepoBoolean(connection, "PVM", "MONITORAGGIO_LINEE_V2", "VISUALIZZA_CARICHI-SCARICHI_TEORICI", codMdep); + String codMdep = MesUtility.getDepoLinea(dto.getCodJfas(), connection); + DtbOrdt ordine = new DtbOrdt(dto.getGestione(), dto.getDataOrd(), dto.getNumOrd()); + ordine.setOperation(OperationType.SELECT_OBJECT); + entityProcessor.processEntity(ordine, true, multiDBTransactionManager); + List articoliEsclusiWMS = wmsLavorazioneService.getArticoliEsclusiWMS(connection, codMdep); + + List articoliInOrdineWms = new ArrayList<>(); + List articoliInOrdineFisc = new ArrayList<>(); + + // + List righeOrdine = UtilityDB.executeSimpleQueryDTO(connection, + Query.format("SELECT * from dtb_ordr where data_ord = {} and num_ord = {} and gestione = {} order by riga_ord", dto.getDataOrd(), dto.getNumOrd(), dto.getGestione()), + DtbOrdr.class); + + if (!UtilityList.isNullOrEmpty(righeOrdine)) { + righeOrdine.forEach(d -> { + List list = mapArticoli.getOrDefault(d.getCodMart(), new ArrayList<>()); + MateriaPrimaOrdineLavorazioneDTO dtoMateri = new MateriaPrimaOrdineLavorazioneDTO(); + dtoMateri.setCodMart(d.getCodMart()) + .setQtaOrd(UtilityBigDecimal.decEnull(dtoMateri.getQtaOrd()).add(d.getQtaOrd())) + .setRapConv(d.getRapConv()) + .setCompatibile(true) + .setRigaOrd(d.getRigaOrd()) + .setAnnotazioni(d.getNote()) + .setUntMis(d.getUntOrd()); + if (articoliEsclusiWMS.contains(d.getCodMart())) { + articoliInOrdineFisc.add(d.getCodMart()); + } else { + articoliInOrdineWms.add(d.getCodMart()); + } + + list.add(dtoMateri); + mapArticoli.put(d.getCodMart(), list); + }); + } + // + + // + HashMap qtaScaricataOrdine = getScarichiOrdine(connection, ordine.getKey()); + + if (!(qtaScaricataOrdine.isEmpty())) { + qtaScaricataOrdine.forEach((codMart, quantity) -> { + List list = mapArticoli.getOrDefault(codMart, Collections.singletonList(new MateriaPrimaOrdineLavorazioneDTO().setCodMart(codMart))); + MateriaPrimaOrdineLavorazioneDTO dtoMateri = list.get(0); + BigDecimal rapConv = UtilityBigDecimal.isNull(dtoMateri.getRapConv(), BigDecimal.ONE); + quantity = quantity.divide(rapConv, 5, RoundingMode.HALF_UP); + + dtoMateri + .setCodMart(codMart) + .setQtaScar(UtilityBigDecimal.decEnull(dtoMateri.getQtaScar()).add(quantity)); + if (articoliEsclusiWMS.contains(codMart)) { + articoliInOrdineFisc.add(codMart); + } else { + articoliInOrdineWms.add(codMart); + } + mapArticoli.put(codMart, list); + }); + } + // + + // + List bufferLinea = setupGest.getSetupList(connection, "MES", "SETUP", dto.getCodJfas() + "_POS_BUFFER", ";"); + + if (!ordine.getFlagEvasoProd().equalsIgnoreCase("E")) { + List articoliOrdineAMagazzinoWms = wmsGiacenzaULService.retrieveArtsInGiacenzaByIdList(connection, articoliInOrdineWms, codMdep); + List articoliOrdineAMagazzinoFisc = ProductionContabilityUtility.getGiacenzaArticoli(connection, articoliInOrdineFisc, codMdep); + + if (!UtilityList.isNullOrEmpty(articoliOrdineAMagazzinoWms)) { + articoliOrdineAMagazzinoWms.forEach(articolo -> { + + List list = mapArticoli.getOrDefault(articolo.getCodMart(), Collections.singletonList(new MateriaPrimaOrdineLavorazioneDTO().setCodMart(articolo.getCodMart()))); + list.forEach(dtoMate -> { + BigDecimal qtaCol = articolo.getQtaCol(); + BigDecimal rapConv = UtilityBigDecimal.isNull(dtoMate.getRapConv(), BigDecimal.ONE); + qtaCol = qtaCol.divide(rapConv, 5, RoundingMode.HALF_UP); + dtoMate.setCodMart(articolo.getCodMart()); + dtoMate.setQtaGiac(UtilityBigDecimal.decEnull(dtoMate.getQtaGiac()).add(qtaCol)); + if (!UtilityList.isNullOrEmpty(bufferLinea) && bufferLinea.contains(articolo.getPosizione())) { + dtoMate.setQtaLinea(UtilityBigDecimal.decEnull(dtoMate.getQtaLinea()).add(articolo.getQtaCol())); + } + }); + + mapArticoli.put(articolo.getCodMart(), list); + }); + } + if (!UtilityList.isNullOrEmpty(articoliOrdineAMagazzinoFisc)) { + articoliOrdineAMagazzinoFisc.forEach(articolo -> { + + + List list = mapArticoli.getOrDefault(articolo.getCodMart(), Collections.singletonList(new MateriaPrimaOrdineLavorazioneDTO().setCodMart(articolo.getCodMart()))); + list.forEach(dtoMate -> { + BigDecimal qtaCol = articolo.getQtaEsistente(); + BigDecimal rapConv = UtilityBigDecimal.isNull(dtoMate.getRapConv(), BigDecimal.ONE); + qtaCol = qtaCol.divide(rapConv, 5, RoundingMode.HALF_UP); + dtoMate.setCodMart(articolo.getCodMart()); + dtoMate.setQtaGiac(UtilityBigDecimal.decEnull(dtoMate.getQtaGiac()).add(qtaCol)); + if (!dto.isIncludeMaterialiInLinea() && !UtilityList.isNullOrEmpty(bufferLinea)) { + dtoMate.setQtaLinea(UtilityBigDecimal.decEnull(dtoMate.getQtaLinea()).add(qtaCol)); + } + }); + + mapArticoli.put(articolo.getCodMart(), list); + }); + } + if (!UtilityList.isNullOrEmpty(bufferLinea) && dto.isIncludeMaterialiInLinea()) { + + List articoliInLinea = wmsGiacenzaULService.retrieveArtsInGiacenzaByPositions(connection, bufferLinea, false); + + if (!UtilityList.isNullOrEmpty(articoliInLinea)) { + articoliInLinea.stream().filter(x -> !mapArticoli.containsKey(x.getCodMart())).forEach(articolo -> { + + List list = mapArticoli.getOrDefault(articolo.getCodMart(), Collections.singletonList(new MateriaPrimaOrdineLavorazioneDTO().setCodMart(articolo.getCodMart()))); + list.forEach(dtoMate -> { + BigDecimal qtaCol = articolo.getQtaCol(); + BigDecimal rapConv = UtilityBigDecimal.isNull(dtoMate.getRapConv(), BigDecimal.ONE); + qtaCol = qtaCol.divide(rapConv, 5, RoundingMode.HALF_UP); + dtoMate.setCodMart(articolo.getCodMart()); + dtoMate.setQtaLinea(UtilityBigDecimal.decEnull(dtoMate.getQtaLinea()).add(qtaCol)); + }); + mapArticoli.put(articolo.getCodMart(), list); + }); + } + } + } + // + + // + Map articoliMap = entityCacheComponent.getCachedEntitiesStream( + connection.getIntegryCustomerDB(), + MtbAart.ENTITY, + x -> mapArticoli.containsKey(x.getCodMart())) + .collect(java.util.stream.Collectors.toMap(MtbAart::getCodMart, x -> x)); + + Map untMisMap = entityCacheComponent.getCachedEntitiesStream( + connection.getIntegryCustomerDB(), + MtbUntMis.ENTITY, + null) + .collect(java.util.stream.Collectors.toMap(MtbUntMis::getUntMis, x -> x)); + + List result = new ArrayList<>(); + mapArticoli.forEach((codMart,list)->{ + list.forEach(materiaPrimaDto->{ + MtbAart aart = articoliMap.get(materiaPrimaDto.getCodMart()); + if (UtilityString.isNullOrEmpty(materiaPrimaDto.getUntMis())){ + materiaPrimaDto.setUntMis(aart.getUntMis()); + } + MtbUntMis untMis = untMisMap.get(materiaPrimaDto.getUntMis()); + int cifreDec = 3; + if (untMis != null) { + cifreDec = untMis.getFlagDig().equalsIgnoreCase("S") ? 0 : untMis.getCifreDec().intValue(); + } + materiaPrimaDto.setDescrizione(aart.getDescrizione()) + .setCodMgrp(aart.getCodMgrp()) + .setCodMsgr(aart.getCodMsgr()) + .setCodMsfa(aart.getCodMsfa()) + .setCifreDec(cifreDec) + .setUntMis(UtilityString.isNull(materiaPrimaDto.getUntMis(), materiaPrimaDto.getUntMis())) + .setRapConv(UtilityBigDecimal.isNull(materiaPrimaDto.getRapConv(), BigDecimal.ONE)); + + result.add(materiaPrimaDto); + }); + }); + + // + + + // + if (dto.isIncludeMaterialiInLinea()){ + List articoliOrdine = result.stream().filter(x -> x.getRigaOrd() != null).collect(java.util.stream.Collectors.toList()); + result.stream().filter(x->x.getRigaOrd() == null).forEach(x->{ + if (articoliOrdine.stream().anyMatch(y->MesUtility.checkCompatibilitArticolo(x,y))) + x.setCompatibile(true); + }); + } + // + return result; + } + + private HashMap getScarichiOrdine(Connection connection, DtbOrdtKey ordine) throws Exception { + + String codDtipScar = setupGest.getSetup(connection, "W_pordi_rc", "SETUP_DOCUMENTI", "COD_DTIP_SCAR"); + + List docScarichi = ProductionContabilityUtility.getMovimentiSuOrdine(connection, ordine, codDtipScar); + HashMap mapScarichi = new HashMap<>(); + if (!UtilityList.isNullOrEmpty(docScarichi)) { + + docScarichi.forEach(d -> { + BigDecimal qtaScar = mapScarichi.getOrDefault(d.getCodMart(), BigDecimal.ZERO); + mapScarichi.put(d.getCodMart(), qtaScar.add(d.getQtaDoc().multiply(d.getRapConv()))); + }); + } + List scarichiSenzaDoc = wmsLavorazioneService.getScarichiOrdine(connection, ordine, false); + if (!UtilityList.isNullOrEmpty(scarichiSenzaDoc)) { + scarichiSenzaDoc.forEach(d -> { + BigDecimal qtaScar = mapScarichi.getOrDefault(d.getCodMart(), BigDecimal.ZERO); + mapScarichi.put(d.getCodMart(), qtaScar.add(d.getQtaCol())); + }); + } + return mapScarichi; + } + } 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 index ba9395bcd2..268fdd1ced 100644 --- 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 @@ -1,10 +1,12 @@ package it.integry.ems.production.utility; import it.integry.ems.exception.PrimaryDatabaseNotPresentException; +import it.integry.ems.production.dto.MateriaPrimaOrdineLavorazioneDTO; import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems_model.entity.DtbOrdSteps; import it.integry.ems_model.entity.DtbOrdt; import it.integry.ems_model.entity.key.DtbOrdtKey; +import it.integry.ems_model.utility.Query; import it.integry.ems_model.utility.UtilityDB; import it.integry.ems_model.utility.UtilityString; @@ -114,6 +116,21 @@ public class MesUtility { } public static DtbOrdSteps getOrderLastStep(Connection primaryConnection, DtbOrdt ordine, String codJfas) throws Exception { - return getOrderLastStep(primaryConnection,new DtbOrdtKey(ordine.getGestione(),ordine.getDataOrd(),ordine.getNumOrd()),codJfas); + return getOrderLastStep(primaryConnection, new DtbOrdtKey(ordine.getGestione(), ordine.getDataOrd(), ordine.getNumOrd()), codJfas); + } + + public static String getDepoLinea(String codJfas, + Connection connection) throws Exception { + + String selectSql = Query.format("SELECT cod_mdep_lav FROM jtb_fasi " + + "WHERE cod_jfas = {}", codJfas); + + return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, selectSql); + } + + public static boolean checkCompatibilitArticolo(MateriaPrimaOrdineLavorazioneDTO x, MateriaPrimaOrdineLavorazioneDTO y) { + return UtilityString.isNull(x.getCodMgrp(), "").equalsIgnoreCase(UtilityString.isNull(y.getCodMgrp(), "")) + && UtilityString.isNull(x.getCodMsgr(), "").equalsIgnoreCase(UtilityString.isNull(y.getCodMsgr(), "")) + && UtilityString.isNull(x.getCodMsfa(), "").equalsIgnoreCase(UtilityString.isNull(y.getCodMsfa(), "")); } } diff --git a/ems-engine/src/main/java/it/integry/ems/production/utility/ProductionContabilityUtility.java b/ems-engine/src/main/java/it/integry/ems/production/utility/ProductionContabilityUtility.java new file mode 100644 index 0000000000..32cdaecc06 --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/production/utility/ProductionContabilityUtility.java @@ -0,0 +1,48 @@ +package it.integry.ems.production.utility; + +import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO; +import it.integry.ems.sync.MultiDBTransaction.Connection; +import it.integry.ems_model.entity.DtbDocr; +import it.integry.ems_model.entity.DtbOrdt; +import it.integry.ems_model.entity.MtbPartDt; +import it.integry.ems_model.entity.key.DtbOrdtKey; +import it.integry.ems_model.utility.Query; +import it.integry.ems_model.utility.UtilityDB; +import it.integry.ems_model.utility.UtilityList; +import it.integry.ems_model.utility.UtilityString; + +import java.util.ArrayList; +import java.util.List; + +public class ProductionContabilityUtility { + + public static List getMovimentiSuOrdine(Connection connection, DtbOrdtKey ordineLav, String codDtip) throws Exception { + String sql = Query.format("select dtb_docr.*\n" + + "from dtb_doct\n" + + " inner join dtb_docr on dtb_doct.cod_anag = dtb_docr.cod_anag and dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" + + " dtb_doct.data_doc = dtb_docr.data_doc and dtb_doct.ser_doc = dtb_docr.ser_doc and\n" + + " dtb_doct.num_doc = dtb_docr.num_doc\n" + + "\n" + + "where dtb_docr.data_ord = {}\n" + + "and dtb_docr.num_ord = {}\n" + + "and gestione = {}", ordineLav.getDataOrd(), ordineLav.getNumOrd(), ordineLav.getGestione()); + + if (!UtilityString.isNullOrEmpty(codDtip)) { + sql = UtilityDB.addwhereCond(sql, Query.format("dtb_doct.cod_dtip = {}", codDtip), true); + } + + return UtilityDB.executeSimpleQueryDTO(connection, sql, DtbDocr.class); + } + + public static List getGiacenzaArticoli(Connection connection, List articoli, String codMdep) throws Exception{ + if (UtilityList.isNullOrEmpty(articoli)) + return new ArrayList<>(); + String sql = "select *\n" + + "from mtb_part_dt\n" + + "where cod_mart in (" + UtilityDB.listValueToString(articoli) + ")\n" + + " and cod_mdep = " + UtilityDB.valueToString(codMdep) + "\n" + + "and qta_esistente > 0"; + + return UtilityDB.executeSimpleQueryDTO(connection,sql, MtbPartDt.class); + } +} 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 fa9077621a..047d7ccdad 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 @@ -37,6 +37,7 @@ import it.integry.ems.service.EntityProcessor; import it.integry.ems.service.PrinterService; import it.integry.ems.service.dto.production.AvailableClassMercDTO; import it.integry.ems.service.dto.production.OrdineInevasoGroupMercDTO; +import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.user.UserSession; import it.integry.ems.utility.UtilityEntity; @@ -3158,4 +3159,15 @@ public class WMSGenericService { entityProcessor.processEntity(internalMovement, multiDBTransactionManager); } + + public List getUdsForOrder(Connection connection,DtbOrdt ordine) throws Exception { + String sql = Query.format("select mtb_colr.*\n" + + "from 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.num_collo = mtb_colr.num_collo and mtb_colt.ser_collo = mtb_colr.ser_collo\n" + + "where mtb_colr.data_ord = {} and mtb_colr.num_ord = {} and mtb_colr.gestione = {} and segno = -1", + ordine.getDataOrd(), ordine.getNumOrd(), ordine.getGestione()); + + return UtilityDB.executeSimpleQueryDTO(connection,sql,MtbColr.class); + } } 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 29e11bace5..61577b0070 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 @@ -4,10 +4,7 @@ import core.utility.StringUtils; import it.integry.ems.retail.wms.generic.dto.*; import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems_model.config.EmsRestConstants; -import it.integry.ems_model.utility.UtilityDB; -import it.integry.ems_model.utility.UtilityHashMap; -import it.integry.ems_model.utility.UtilityQuery; -import it.integry.ems_model.utility.UtilityString; +import it.integry.ems_model.utility.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Service; @@ -382,7 +379,6 @@ public class WMSGiacenzaULService { return UtilityDB.executeSimpleQueryDTO(connection, sql, MvwSitArtUdcDetInventarioDTO.class); } - public HashMap checkIfUlsAreInGiacenza(Connection connection, List barcodeUls) throws Exception { if (barcodeUls == null || barcodeUls.isEmpty()) return new HashMap<>(); @@ -427,4 +423,17 @@ public class WMSGiacenzaULService { return resultMap; } + public List retrieveArtsInGiacenzaByIdList(Connection connection, List codMartList, String codMdep) throws Exception { + + if (UtilityList.isNullOrEmpty(codMartList)) + return new ArrayList<>(); + + String sql = createBaseQuery(false) + + " AND sit_art.cod_mart in (" + UtilityDB.listValueToString(codMartList)+")"; + + if (!UtilityString.isNullOrEmpty(codMdep)) + sql += " AND sit_art.cod_mdep = " + UtilityDB.valueToString(codMdep); + + return UtilityDB.executeSimpleQueryDTO(connection, sql, MvwSitArtUdcDetInventarioDTO.class); + } } diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/service/WMSLavorazioneService.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/service/WMSLavorazioneService.java index 0cc8474739..58df3f0aa4 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/service/WMSLavorazioneService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/service/WMSLavorazioneService.java @@ -18,11 +18,13 @@ import it.integry.ems.rules.businessLogic.dto.LoadColliDTO; import it.integry.ems.service.AziendaService; import it.integry.ems.service.EntityProcessor; import it.integry.ems.service.production.ProductionOrderDataHandlerService; +import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.user.UserSession; import it.integry.ems.utility.UtilityEntity; import it.integry.ems_model.entity.*; import it.integry.ems_model.entity._enum.GestioneEnum; +import it.integry.ems_model.entity.key.DtbOrdtKey; import it.integry.ems_model.rulescompleting.DroolsDataCompleting; import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.types.OperationType; @@ -962,4 +964,33 @@ public class WMSLavorazioneService { return new CreateUDSResponseDTO() .setMtbColt(uds); } + + public List getScarichiOrdine(Connection connection, DtbOrdtKey ordine) throws Exception { + return getScarichiOrdine(connection,ordine,true); + } + public List getScarichiOrdine(Connection connection, DtbOrdtKey ordine, boolean includiMovimentiConDoc) throws Exception { + String sql = Query.format("select mtb_colr.*\n" + + "from 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.num_collo = mtb_colr.num_collo and mtb_colt.ser_collo = mtb_colr.ser_collo\n" + + "\n" + + "where segno = -1\n" + + "and mtb_colr.data_ord = {}\n" + + "and mtb_colr.num_ord = {}\n" + + "and mtb_colr.gestione = {}",ordine.getDataOrd(),ordine.getNumOrd(),ordine.getGestione()); + if (!includiMovimentiConDoc){ + sql+=" and mtb_colt.cod_dtip is null"; + } + + return UtilityDB.executeSimpleQueryDTO(connection,sql,MtbColr.class); + } + + public List getArticoliEsclusiWMS(Connection connection, String codMdep) throws Exception { + String sql = Query.format( + "SELECT cod_mart from mvw_articoli_esclusi_wms where cod_mdep = {} and flag_escludi_lav = 1", + codMdep + ); + + return UtilityDB.executeSimpleQueryOnlyFirstColumn(connection,sql); + } } diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/ordini_acquisto/service/WMSOrdiniAcquistoService.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/ordini_acquisto/service/WMSOrdiniAcquistoService.java index 9130c0657b..9d35bff3cf 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/ordini_acquisto/service/WMSOrdiniAcquistoService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/ordini_acquisto/service/WMSOrdiniAcquistoService.java @@ -10,6 +10,7 @@ import it.integry.ems.retail.wms.ordini_acquisto.dto.BarcodeOrdiniAcquistoDTO; import it.integry.ems.retail.wms.ordini_acquisto.dto.MerceOrdiniAcquistoDTO; import it.integry.ems.retail.wms.ordini_acquisto.dto.OrdiniAcquistoGrigliaDTO; import it.integry.ems.service.EntityProcessor; +import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.utility.UtilityDirs; import it.integry.ems.utility.UtilityEntity; @@ -592,4 +593,13 @@ public class WMSOrdiniAcquistoService { return dtbOrdt; } + + public List getArticoliEsclusiWMS(Connection connection, String codMdep) throws Exception { + String sql = Query.format( + "SELECT cod_mart from mvw_articoli_esclusi_wms where cod_mdep = {} and flag_escludi_acq = 1", + codMdep + ); + + return UtilityDB.executeSimpleQueryOnlyFirstColumn(connection,sql); + } } diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/vendita/service/WMSSpedizioneService.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/vendita/service/WMSSpedizioneService.java index ae25ce76e9..7140018215 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/vendita/service/WMSSpedizioneService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/vendita/service/WMSSpedizioneService.java @@ -16,6 +16,7 @@ import it.integry.ems.retail.wms.exceptions.UDSQuantityOverflowException; import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO; import it.integry.ems.retail.wms.generic.service.WMSGiacenzaULService; import it.integry.ems.service.EntityProcessor; +import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.user.UserSession; import it.integry.ems.utility.UtilityEntity; @@ -612,4 +613,13 @@ public class WMSSpedizioneService { return new CreateUDSResponseDTO() .setMtbColt(uds); } + + public List getArticoliEsclusiWMS(Connection connection, String codMdep) throws Exception { + String sql = Query.format( + "SELECT cod_mart from mvw_articoli_esclusi_wms where cod_mdep = {} and flag_escludi_ven = 1", + codMdep + ); + + return UtilityDB.executeSimpleQueryOnlyFirstColumn(connection,sql); + } }