Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-11-24 17:04:01 +01:00
4 changed files with 152 additions and 72 deletions

View File

@@ -482,7 +482,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
super(logger);
}
public DtbOrdt(String gestione, LocalDate dataOrd,Integer numOrd) {
public DtbOrdt(String gestione, LocalDate dataOrd, Integer numOrd) {
super(logger);
this.gestione = gestione;
this.dataOrd = UtilityLocalDate.localDateToDate(dataOrd);
@@ -1789,7 +1789,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
@Override
public void checkPreSave() throws Exception {
switch(getOperation()) {
switch (getOperation()) {
case NO_OP:
case SELECT_OBJECT:
case SELECT:
@@ -1935,7 +1935,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
if (this == other)
return true;
if(hashCodeKey() != other.hashCodeKey())
if (hashCodeKey() != other.hashCodeKey())
return false;
return getDataOrd().equals(other.getDataOrd()) && getGestione().equals(other.getGestione()) && Objects.equals(getNumOrd(), other.getNumOrd());
@@ -1953,4 +1953,17 @@ 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 void clearChilds() {
setDtbOrdr(new ArrayList<>());
setDtbOrds(new ArrayList<>());
setDtbOrdL(new ArrayList<>());
setDtbOrdMacc(new ArrayList<>());
setDtbOrdSteps(new ArrayList<>());
setDtbOrdCq(new ArrayList<>());
setDtbOrdCqr(new ArrayList<>());
setJrlDisOrd(new ArrayList<>());
setDrlOrdAttached(new ArrayList<>());
setArlSchaccOrd(new ArrayList<>());
}
}

View File

@@ -495,7 +495,7 @@ public class MesProductionControllerV2 {
@PostMapping(value = "ordine/ripianifica")
public @ResponseBody
ServiceRestResponse ripianifica(@RequestBody RipianificaOrdineLavRequestDTO dto) throws Exception {
productionOrdersLifecycleService.ripianificaOrdLav(dto);
productionOrdersLifecycleService.ripianificaOrdLav(multiDBTransactionManager,dto);
return ServiceRestResponse.createPositiveResponse();
}

View File

@@ -353,6 +353,16 @@ public class MesProductionServiceV2 {
));
}
if (lastStep.getDataIniz() != null && lastStep.getDataFine() == null) {
throw new Exception(String.format(
"L'ordine selezionato è già in corso su questa linea. (Gestione %s, data ord. %s, num ord. %d, linea %s)",
gestioneOrd,
CommonConstants.DATE_DMY_SLASHED_FORMATTER.format(dataOrd),
numOrd,
codJfas
));
}
Date dataIniz;
if (dataInizLav == null) {
dataIniz = new Date();

View File

@@ -16,6 +16,7 @@ import it.integry.ems.production.dto.ReopenOrdineLavRequestDTO;
import it.integry.ems.production.event.ProductionOrderClosedEvent;
import it.integry.ems.service.AziendaService;
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.UtilityDebug;
import it.integry.ems.utility.UtilityEntity;
@@ -27,11 +28,13 @@ import it.integry.ems_model.utility.*;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.docx4j.org.apache.xpath.operations.Mult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -347,25 +350,64 @@ public class ProductionOrdersLifecycleService {
}
}
public void ripianificaOrdLav(RipianificaOrdineLavRequestDTO ripianificaOrdineLavRequestDTO) throws Exception {
public void ripianificaOrdLav(MultiDBTransactionManager multiDBTransactionManager, RipianificaOrdineLavRequestDTO ripianificaOrdineLavRequestDTO) throws Exception {
//<editor-fold desc="Retrieve impostazioni e variabili base">
Connection connection = multiDBTransactionManager.getPrimaryConnection();
DtbOrdt ordL = new DtbOrdt(ripianificaOrdineLavRequestDTO.getGestione(), ripianificaOrdineLavRequestDTO.getDataOrd(), ripianificaOrdineLavRequestDTO.getNumOrd());
ordL.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(ordL, true, multiDBTransactionManager);
LocalDate dataPianificazione = UtilityLocalDate.isNull(ripianificaOrdineLavRequestDTO.getDataPianificazione(), ripianificaOrdineLavRequestDTO.getDataOrd());
String codJfas = UtilityString.isNull(ripianificaOrdineLavRequestDTO.getCodJfasNew(), ripianificaOrdineLavRequestDTO.getCodJfasOld());
boolean reimpostaLotto = setupGest.getSetupDepoBoolean("PVM", "MONITORAGGIO_LINEE_V2", "REIMPOSTA_LOTTO_ORDINE_RIPIANIFICATO", ordL.getCodMdep());
boolean flagEditedCodJfas = !ripianificaOrdineLavRequestDTO.getCodJfasOld().equalsIgnoreCase(ripianificaOrdineLavRequestDTO.getCodJfasNew());
boolean flagEditedDataOrd = !UtilityLocalDate.isSameDay(ripianificaOrdineLavRequestDTO.getDataOrd(), ripianificaOrdineLavRequestDTO.getDataPianificazione());
//</editor-fold>
if (!flagEditedCodJfas && !flagEditedDataOrd) {
throw new Exception("Nessuna modifica da apportare.");
}
//<editor-fold desc="Cambio data di produzione">
if (flagEditedDataOrd) {
ripianificaDataOrdLav(connection, ordL, ripianificaOrdineLavRequestDTO.getDataPianificazione());
ordL.clearChilds();
ordL.setOldPk(null);
}
//</editor-fold>
//<editor-fold desc="Cambio linea">
if (flagEditedCodJfas) {
ripianificaLineaOrdLav(connection, ordL, codJfas);
}
//</editor-fold>
//<editor-fold desc="Ricalcolo dati ordine di produzione">
DtbOrdr oldRigaProd = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(connection, Query.format(
"SELECT * from dtb_ordr where gestione = {} and data_ord = {} and num_ord = {} and riga_ord = {}",
ordL.getGestioneRif(),
ordL.getDataOrdRif(),
ordL.getNumOrdRif(),
ordL.getRigaOrdRif()
), DtbOrdr.class);
if (oldRigaProd == null)
throw new Exception("Riga ordine di produzione originale non trovata.");
DtbOrdt dtbOrdtP = new DtbOrdt()
.setCodJfas(UtilityString.isNull(ripianificaOrdineLavRequestDTO.getCodJfasNew(), ripianificaOrdineLavRequestDTO.getCodJfasOld()))
.setDataOrd(UtilityLocalDate.localDateToDate(ripianificaOrdineLavRequestDTO.getDataPianificazione() == null ?
ripianificaOrdineLavRequestDTO.getDataOrd() :
ripianificaOrdineLavRequestDTO.getDataPianificazione())
)
.setCodJfas(codJfas)
.setDataOrd(UtilityLocalDate.localDateToDate(dataPianificazione))
.setGestione("A")
.setGestioneRif("A")
.setGeneraOrdLavDaProd(false)
.setOrdTrasf(false);
dtbOrdtP.setOperation(OperationType.SELECT_OBJECT);
dtbOrdtP.setOnlyPkMaster(false);
entityProcessor.processEntity(dtbOrdtP, multiDBTransactionManager);
boolean reimpostaLotto = setupGest.getSetupDepoBoolean("PVM", "MONITORAGGIO_LINEE_V2", "REIMPOSTA_LOTTO_ORDINE_RIPIANIFICATO", dtbOrdtP.getCodMdep());
boolean flagEditedCodJfas = !ripianificaOrdineLavRequestDTO.getCodJfasOld().equalsIgnoreCase(ripianificaOrdineLavRequestDTO.getCodJfasNew());
boolean flagEditedDataOrd = !UtilityLocalDate.isSameDay(ripianificaOrdineLavRequestDTO.getDataOrd(), ripianificaOrdineLavRequestDTO.getDataPianificazione());
entityProcessor.processEntity(dtbOrdtP, true, multiDBTransactionManager);
if (dtbOrdtP.getNumOrd() == null) {
@@ -375,15 +417,15 @@ public class ProductionOrdersLifecycleService {
" FROM dtb_ordt " +
"WHERE EXISTS (SELECT * FROM dtb_ordt orl WHERE dtb_ordt.gestione = orl.gestione_rif AND dtb_ordt.data_ord = orl.data_ord_rif AND " +
"dtb_ordt.num_ord = orl.num_ord_rif and gestione = %s and data_ord = %s and num_ord = %s)",
ripianificaOrdineLavRequestDTO.getGestione(),
ripianificaOrdineLavRequestDTO.getDataOrd(),
ripianificaOrdineLavRequestDTO.getNumOrd()
ordL.getGestione(),
ordL.getDataOrd(),
ordL.getNumOrd()
);
dtbOrdtP = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdt.class);
dtbOrdtP
.setCodJfas(ripianificaOrdineLavRequestDTO.getCodJfasNew() == null ? dtbOrdtP.getCodJfas() : ripianificaOrdineLavRequestDTO.getCodJfasNew())
.setDataOrd(ripianificaOrdineLavRequestDTO.getDataPianificazione() == null ? dtbOrdtP.getDataOrd() : UtilityLocalDate.localDateToDate(ripianificaOrdineLavRequestDTO.getDataPianificazione()))
.setCodJfas(codJfas)
.setDataOrd(UtilityLocalDate.localDateToDate(dataPianificazione))
.setNumOrd(null)
.setGeneraOrdLavDaProd(false)
.setOrdTrasf(false);
@@ -392,66 +434,46 @@ public class ProductionOrdersLifecycleService {
entityProcessor.processEntity(dtbOrdtP, true, multiDBTransactionManager);
}
String sql =
Query.format("SELECT ISNULL(MAX(riga_ord), 0) + 1 FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s",
dtbOrdtP.getGestione(),
dtbOrdtP.getDataOrd(),
dtbOrdtP.getNumOrd());
dtbOrdtP.setOperation(OperationType.UPDATE);
dtbOrdtP.getDtbOrdr().add(oldRigaProd);
Integer rigaOrdProd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
Integer rigaOrdProd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT ISNULL(MAX(riga_ord), 0) + 1 FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s",
dtbOrdtP.getGestione(),
dtbOrdtP.getDataOrd(),
dtbOrdtP.getNumOrd()));
HashMap<String, Object> oldPk = new HashMap<>();
Date dataOrd = UtilityLocalDate.localDateToDate(ripianificaOrdineLavRequestDTO.getDataOrd());
if (ripianificaOrdineLavRequestDTO.getDataPianificazione() != null &&
!ripianificaOrdineLavRequestDTO.getDataOrd().equals(ripianificaOrdineLavRequestDTO.getDataPianificazione())) {
oldPk.put("dataOrd", ripianificaOrdineLavRequestDTO.getDataOrd());
dataOrd = UtilityLocalDate.localDateToDate(ripianificaOrdineLavRequestDTO.getDataPianificazione());
}
DtbOrdt dtbOrdl = new DtbOrdt()
.setDataOrd(dataOrd)
.setGestione(ripianificaOrdineLavRequestDTO.getGestione())
.setNumOrd(ripianificaOrdineLavRequestDTO.getNumOrd())
oldRigaProd
.setOldPk(new HashMap<String, Object>() {{
put("dataOrd", oldRigaProd.getDataOrd());
put("gestione", oldRigaProd.getGestione());
put("numOrd", oldRigaProd.getNumOrd());
put("rigaOrd", oldRigaProd.getRigaOrd());
}});
oldRigaProd.setRigaOrd(rigaOrdProd)
.setCodJfas(codJfas)
.setDataOrd(dtbOrdtP.getDataOrd())
.setNumOrd(dtbOrdtP.getNumOrd())
.setGestione(dtbOrdtP.getGestione())
.setOperation(OperationType.SUBSTITUTE);
ordL
.setGestioneRif(dtbOrdtP.getGestione())
.setDataOrdRif(dtbOrdtP.getDataOrd())
.setNumOrdRif(dtbOrdtP.getNumOrd())
.setDataConsProd(dataOrd)
.setRigaOrdRif(rigaOrdProd);
if (!oldPk.isEmpty()) {
dtbOrdl.setOldPk(oldPk);
dtbOrdl.setOperation(OperationType.SUBSTITUTE);
} else {
dtbOrdl.setOperation(OperationType.UPDATE);
.setDataConsProd(UtilityLocalDate.localDateToDate(dataPianificazione))
.setRigaOrdRif(rigaOrdProd)
.setDtbOrdtProd(null);
//</editor-fold>
//<editor-fold desc="Altre operazioni">
if (reimpostaLotto) {
ordL.setPartitaMag(EmsRestConstants.NULL);
}
//</editor-fold>
if (reimpostaLotto && (flagEditedCodJfas || flagEditedDataOrd)) {
dtbOrdl.setPartitaMag(EmsRestConstants.NULL);
}
ordL.setOperation(OperationType.UPDATE);
if (!UtilityString.equalsIgnoreCase(ripianificaOrdineLavRequestDTO.getCodJfasNew(), ripianificaOrdineLavRequestDTO.getCodJfasOld())) {
sql =
Query.format(
"SELECT * FROM dtb_ord_steps WHERE gestione = %s AND data_ord = %s AND num_ord = %s ORDER BY data_fine desc",
ripianificaOrdineLavRequestDTO.getGestione(),
ripianificaOrdineLavRequestDTO.getDataOrd(),
ripianificaOrdineLavRequestDTO.getNumOrd());
DtbOrdSteps lastStep = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class);
lastStep.setFlagStepAttivo("N");
lastStep.setOperation(OperationType.INSERT_OR_UPDATE);
dtbOrdl.getDtbOrdSteps().add(lastStep);
DtbOrdSteps dtbOrdSteps = (DtbOrdSteps) lastStep.deepClone();
dtbOrdSteps
.setCodJfas(ripianificaOrdineLavRequestDTO.getCodJfasNew())
.setIdRiga(0)
.setDataIniz(new Date())
.setDataFine(new Date())
.setFlagStepAttivo("S");
dtbOrdSteps.setOperation(OperationType.INSERT);
dtbOrdl.getDtbOrdSteps().add(dtbOrdSteps);
}
entityProcessor.processEntity(dtbOrdl, true, multiDBTransactionManager);
entityProcessor.processEntity(dtbOrdtP, true, multiDBTransactionManager);
entityProcessor.processEntity(ordL, true, multiDBTransactionManager);
}
@@ -484,4 +506,39 @@ public class ProductionOrdersLifecycleService {
throw e;
}
}
private void ripianificaDataOrdLav(Connection connection, DtbOrdt ordLav, LocalDate dataPianificazione) throws Exception {
HashMap<String, Object> oldPk = new HashMap<>();
oldPk.put("dataOrd", ordLav.getDataOrd());
ordLav
.setDataOrd(UtilityLocalDate.localDateToDate(dataPianificazione))
.setOldPk(oldPk);
ordLav.setOperation(OperationType.SUBSTITUTE);
entityProcessor.processEntity(ordLav, true, multiDBTransactionManager);
}
private void ripianificaLineaOrdLav(Connection connection, DtbOrdt dtbOrdt, String codJfas) throws Exception {
String sql =
Query.format(
"SELECT * FROM dtb_ord_steps WHERE gestione = %s AND data_ord = %s AND num_ord = %s ORDER BY data_fine desc, id_step DESC, id_riga DESC",
dtbOrdt.getGestione(),
dtbOrdt.getDataOrd(),
dtbOrdt.getNumOrd());
DtbOrdSteps lastStep = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class);
lastStep.setFlagStepAttivo("N");
lastStep.setOperation(OperationType.INSERT_OR_UPDATE);
dtbOrdt.getDtbOrdSteps().add(lastStep);
DtbOrdSteps dtbOrdSteps = (DtbOrdSteps) lastStep.deepClone();
dtbOrdSteps
.setCodJfas(codJfas)
.setIdRiga(0)
.setDataIniz(new Date())
.setDataFine(new Date())
.setFlagStepAttivo("S");
dtbOrdSteps.setOperation(OperationType.INSERT);
dtbOrdt.getDtbOrdSteps().add(dtbOrdSteps);
}
}