- nuovo servizio di retrieve materiali ordine di lavorazione
This commit is contained in:
2025-11-21 17:33:47 +01:00
parent b7ac9ce072
commit 5fc6be6acf
16 changed files with 664 additions and 13 deletions

View File

@@ -120,12 +120,14 @@ public class EntityCacheComponent implements ApplicationListener {
}
}
return entityCache.get(customerDB).get(tableName)
Stream<T> 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());
}

View File

@@ -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<DtbO
public int hashCode() {
return Objects.hash(getDataOrd(), getGestione(), getNumOrd(), getAcconto(), getActivityId(), getActivityTypeId(), getAspettoBeni(), getCausaleTrasp(), getCodAbi(), getCodAnag(), getCodAuto(), getCodBanc(), getCodBancAzi(), getCodCab(), getCodDgrpArt(), getCodDivi(), getCodEtic(), getCodFornTd(), getCodJcom(), getCodJfas(), getCodMdep(), getCodPaga(), getCodProd(), getCodTcolUi(), getCodTcolUl(), getCodVage(), getCodVage2(), getCodVdes(), getCodVvet(), getCodVvet2(), getCodVzon(), getColliPedana(), getCompilatoDa(), getControllatoDa(), getDataConsProd(), getDataConsProdMax(), getDataEsportazione(), getDataConferma(), getDataInizProd(), getDataInizTrasp(), getDataInsOrd(), getDataOrdRif(), getRifDataOrd(), getDataRicezione(), getDataRifScad(), getDataUltMod(), getDescrEstesaProd(), getDescrizionePaga(), getDescrizioneProd(), getEanFidelity(), getFlagAnnulla(), getFlagEscRoyal(), getFlagEvasoForzato(), getFlagEvasoProd(), getFlagPrzScontati(), getFlagSospeso(), getFlagTipologia(), getGestioneRif(), getItemId(), getListino(), getLivello(), getMezzo(), getModificatoDa(), getNettoMerce(), getNolo(), getNolo2(), getNote(), getNumColli(), getNumCons(), getNumFase(), getNumOrdProvv(), getNumOrdRif(), getRifNumOrd(), getPartitaMag(), getPercEsclStat(), getPersonaRif(), getPeso(), getPorto(), getQtaEvasaProd(), getQtaPrenotataRep(), getQtaProd(), getRapConvProd(), getRfid(), getRifOrd(), getRigaOrdRif(), getSconto1(), getSconto2(), getSconto3(), getSconto4(), getSerie(), getTermCons(), getTipoAnag(), getTotFasi(), getTotImponib(), getTotIva(), getTotMerce(), getTotOmaggi(), getTotProvvig(), getUntMisProd(), getFlagPrzIva(), getNoteConferma(), getCodJflav(), getTarga(), getPostiPallet(), getFlagBudget(), getDataConsRich(), getNoteExport(), getNumCnfProd(), getCodLingua(), getCambio(), getUserName(), getFlagTd(), getGestisciStralciOrdV(), getIdViaggioTestata(), getExplodeKit(), getGestisciOrdLavTx(), getOrdTrasf(), isGeneraOrdLavDaProd());
}
public DtbOrdtKey getKey() {
return UtilityString.isNullOrEmpty(gestione) ||
dataOrd == null ||
numOrd == null ?
null :
new DtbOrdtKey(gestione, getDataOrd(), numOrd);
}
}

View File

@@ -438,4 +438,10 @@ public class SetupGest {
public boolean getSetupDetBoolean(Connection conn, String gestName, String section, String keySection, String colRif) throws Exception {
return "S".equalsIgnoreCase(getSetupDet(conn, gestName, section, keySection, colRif));
}
public List<String> 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));
}
}

View File

@@ -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<String, Object> stringObjectHashMap = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), sqlLastWorkedOrder);

View File

@@ -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));
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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<String, String> queryParams) throws Exception {
Integer timeout = setupGest.getSetupInteger(multiDBTransactionManager.getPrimaryConnection(), "MES", "HMI", "TIMEOUT_MACHINE_CONNECTION", 5);
@@ -1332,7 +1337,9 @@ public class MesProductionServiceV2 {
}
public List<StbGestSetup> 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<MateriaPrimaOrdineLavorazioneDTO> getMaterialiOrdineLav(MateriaPrimaOrdineLavorazioneRequestDTO dto) throws Exception {
Map<String, List<MateriaPrimaOrdineLavorazioneDTO>> 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<String> articoliEsclusiWMS = wmsLavorazioneService.getArticoliEsclusiWMS(connection, codMdep);
List<String> articoliInOrdineWms = new ArrayList<>();
List<String> articoliInOrdineFisc = new ArrayList<>();
//<editor-fold desc="Retrieve righe ordine">
List<DtbOrdr> 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<MateriaPrimaOrdineLavorazioneDTO> 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);
});
}
//</editor-fold>
//<editor-fold desc="Calcolo scarichi su ordine">
HashMap<String, BigDecimal> qtaScaricataOrdine = getScarichiOrdine(connection, ordine.getKey());
if (!(qtaScaricataOrdine.isEmpty())) {
qtaScaricataOrdine.forEach((codMart, quantity) -> {
List<MateriaPrimaOrdineLavorazioneDTO> 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);
});
}
//</editor-fold>
//<editor-fold desc="Calcolo Giacenze">
List<String> bufferLinea = setupGest.getSetupList(connection, "MES", "SETUP", dto.getCodJfas() + "_POS_BUFFER", ";");
if (!ordine.getFlagEvasoProd().equalsIgnoreCase("E")) {
List<MvwSitArtUdcDetInventarioDTO> articoliOrdineAMagazzinoWms = wmsGiacenzaULService.retrieveArtsInGiacenzaByIdList(connection, articoliInOrdineWms, codMdep);
List<MtbPartDt> articoliOrdineAMagazzinoFisc = ProductionContabilityUtility.getGiacenzaArticoli(connection, articoliInOrdineFisc, codMdep);
if (!UtilityList.isNullOrEmpty(articoliOrdineAMagazzinoWms)) {
articoliOrdineAMagazzinoWms.forEach(articolo -> {
List<MateriaPrimaOrdineLavorazioneDTO> 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<MateriaPrimaOrdineLavorazioneDTO> 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<MvwSitArtUdcDetInventarioDTO> articoliInLinea = wmsGiacenzaULService.retrieveArtsInGiacenzaByPositions(connection, bufferLinea, false);
if (!UtilityList.isNullOrEmpty(articoliInLinea)) {
articoliInLinea.stream().filter(x -> !mapArticoli.containsKey(x.getCodMart())).forEach(articolo -> {
List<MateriaPrimaOrdineLavorazioneDTO> 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);
});
}
}
}
//</editor-fold>
//<editor-fold desc="Completamento Dati Articoli">
Map<String, MtbAart> articoliMap = entityCacheComponent.<MtbAart>getCachedEntitiesStream(
connection.getIntegryCustomerDB(),
MtbAart.ENTITY,
x -> mapArticoli.containsKey(x.getCodMart()))
.collect(java.util.stream.Collectors.toMap(MtbAart::getCodMart, x -> x));
Map<String, MtbUntMis> untMisMap = entityCacheComponent.<MtbUntMis>getCachedEntitiesStream(
connection.getIntegryCustomerDB(),
MtbUntMis.ENTITY,
null)
.collect(java.util.stream.Collectors.toMap(MtbUntMis::getUntMis, x -> x));
List<MateriaPrimaOrdineLavorazioneDTO> 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);
});
});
//</editor-fold>
//<editor-fold desc="Aggiorno compatibilità articoli extra">
if (dto.isIncludeMaterialiInLinea()){
List<MateriaPrimaOrdineLavorazioneDTO> 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);
});
}
//</editor-fold>
return result;
}
private HashMap<String, BigDecimal> getScarichiOrdine(Connection connection, DtbOrdtKey ordine) throws Exception {
String codDtipScar = setupGest.getSetup(connection, "W_pordi_rc", "SETUP_DOCUMENTI", "COD_DTIP_SCAR");
List<DtbDocr> docScarichi = ProductionContabilityUtility.getMovimentiSuOrdine(connection, ordine, codDtipScar);
HashMap<String, BigDecimal> 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<MtbColr> 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;
}
}

View File

@@ -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(), ""));
}
}

View File

@@ -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<DtbDocr> 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<MtbPartDt> getGiacenzaArticoli(Connection connection, List<String> 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);
}
}

View File

@@ -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<MtbColr> 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);
}
}

View File

@@ -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<String, Boolean> checkIfUlsAreInGiacenza(Connection connection, List<String> barcodeUls) throws Exception {
if (barcodeUls == null || barcodeUls.isEmpty())
return new HashMap<>();
@@ -427,4 +423,17 @@ public class WMSGiacenzaULService {
return resultMap;
}
public List<MvwSitArtUdcDetInventarioDTO> retrieveArtsInGiacenzaByIdList(Connection connection, List<String> 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);
}
}

View File

@@ -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<MtbColr> getScarichiOrdine(Connection connection, DtbOrdtKey ordine) throws Exception {
return getScarichiOrdine(connection,ordine,true);
}
public List<MtbColr> 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<String> 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);
}
}

View File

@@ -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<String> 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);
}
}

View File

@@ -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<String> 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);
}
}