Migliorie su servizio di riproporzionamento scarichi produzione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
This commit is contained in:
@@ -217,6 +217,16 @@ public class MtbColt extends EntityBase implements EquatableEntityInterface<MtbC
|
|||||||
this.numCollo = numCollo;
|
this.numCollo = numCollo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MtbColtKey getKey() {
|
||||||
|
return UtilityString.isNullOrEmpty(gestione) ||
|
||||||
|
UtilityString.isNullOrEmpty(dataCollo) ||
|
||||||
|
dataCollo == null ||
|
||||||
|
numCollo == null ?
|
||||||
|
null :
|
||||||
|
new MtbColtKey(gestione, serCollo, getDataCollo(), numCollo);
|
||||||
|
}
|
||||||
|
|
||||||
public String getGestione() {
|
public String getGestione() {
|
||||||
return gestione;
|
return gestione;
|
||||||
}
|
}
|
||||||
@@ -705,21 +715,32 @@ public class MtbColt extends EntityBase implements EquatableEntityInterface<MtbC
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execStoredProcedure() throws Exception {
|
public void execStoredProcedure() throws Exception {
|
||||||
if (this.getOperation() != OperationType.DELETE && dataCollo != null) {
|
if (this.getOperation() != OperationType.DELETE &&
|
||||||
|
getOperation() != OperationType.SELECT_OBJECT &&
|
||||||
|
getOperation() != OperationType.SELECT &&
|
||||||
|
getKey() != null) {
|
||||||
if (this.getCalcPeso()) {
|
if (this.getCalcPeso()) {
|
||||||
|
|
||||||
String updateSql = Query.format("UPDATE mtb_colt\n" +
|
String updateSql = Query.format("UPDATE mtb_colt\n" +
|
||||||
"SET peso_kg = ISNULL(SUM(mtb_colr.peso_lordo_kg), 0),\n" +
|
"SET peso_kg = ISNULL(mtb_colr.peso_lordo_kg, 0),\n" +
|
||||||
" peso_netto_kg = ISNULL(SUM(mtb_colr.peso_netto_kg), 0)\n" +
|
" peso_netto_kg = ISNULL(mtb_colr.peso_netto_kg, 0)\n" +
|
||||||
"FROM mtb_colt\n" +
|
"FROM mtb_colt\n" +
|
||||||
" INNER JOIN mtb_colr ON mtb_colt.gestione = mtb_colr.gestione AND\n" +
|
" INNER JOIN (SELECT gestione,\n" +
|
||||||
|
" data_collo,\n" +
|
||||||
|
" ser_collo,\n" +
|
||||||
|
" num_collo,\n" +
|
||||||
|
" SUM(mtb_colr.peso_lordo_kg) AS peso_lordo_kg,\n" +
|
||||||
|
" SUM(mtb_colr.peso_netto_kg) AS peso_netto_kg\n" +
|
||||||
|
" FROM mtb_colr\n" +
|
||||||
|
" GROUP BY gestione, data_collo, ser_collo, num_collo) mtb_colr ON\n" +
|
||||||
|
" mtb_colt.gestione = mtb_colr.gestione AND\n" +
|
||||||
" mtb_colt.ser_collo = mtb_colr.ser_collo AND\n" +
|
" mtb_colt.ser_collo = mtb_colr.ser_collo AND\n" +
|
||||||
" mtb_colt.num_collo = mtb_colr.num_collo AND\n" +
|
" mtb_colt.num_collo = mtb_colr.num_collo AND\n" +
|
||||||
" mtb_colt.data_collo = mtb_colr.data_collo\n" +
|
" mtb_colt.data_collo = mtb_colr.data_collo\n" +
|
||||||
" WHERE mtb_colt.gestione = %s\n" +
|
" WHERE mtb_colt.gestione = %s\n" +
|
||||||
" AND data_collo > %s\n" +
|
" AND mtb_colt.data_collo = %s\n" +
|
||||||
" AND ser_collo = %s\n" +
|
" AND mtb_colt.ser_collo = %s\n" +
|
||||||
" AND num_collo = %s",
|
" AND mtb_colt.num_collo = %s",
|
||||||
getGestione(), getDataCollo(), getSerCollo(), getNumCollo());
|
getGestione(), getDataCollo(), getSerCollo(), getNumCollo());
|
||||||
|
|
||||||
UtilityDB.executeSimpleUpdate(connection, updateSql);
|
UtilityDB.executeSimpleUpdate(connection, updateSql);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class MtbColtKey {
|
|||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || (getClass() != o.getClass() && !getClass().isAssignableFrom(o.getClass()))) return false;
|
||||||
MtbColtKey that = (MtbColtKey) o;
|
MtbColtKey that = (MtbColtKey) o;
|
||||||
return Objects.equals(dataCollo, that.dataCollo) &&
|
return Objects.equals(dataCollo, that.dataCollo) &&
|
||||||
Objects.equals(gestione, that.gestione) &&
|
Objects.equals(gestione, that.gestione) &&
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package it.integry.ems_model.utility;
|
package it.integry.ems_model.utility;
|
||||||
|
|
||||||
|
import it.integry.ems_model.base.EntityInterface;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
public class UtilityList {
|
public class UtilityList {
|
||||||
@@ -15,4 +18,20 @@ public class UtilityList {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
return listToCheck;
|
return listToCheck;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static <T extends EntityInterface> List<T> clone(List<T> listToClone) {
|
||||||
|
if (listToClone == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new ArrayList<>(listToClone.stream()
|
||||||
|
.map(x -> {
|
||||||
|
try {
|
||||||
|
return (T) x.clone();
|
||||||
|
} catch (CloneNotSupportedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2939,8 +2939,8 @@ public class DocumentProdService {
|
|||||||
documentiCarico.add(generaDocumentiCaricoDaTeorico(dto));
|
documentiCarico.add(generaDocumentiCaricoDaTeorico(dto));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dto.isSalvaDocumenti()){
|
if (dto.isSalvaDocumenti()) {
|
||||||
entityProcessor.processEntityList(documentiCarico,multiDBTransactionManager,true);
|
entityProcessor.processEntityList(documentiCarico, multiDBTransactionManager, true);
|
||||||
UtilityEntity.throwEntitiesException(documentiCarico);
|
UtilityEntity.throwEntitiesException(documentiCarico);
|
||||||
}
|
}
|
||||||
return documentiCarico;
|
return documentiCarico;
|
||||||
@@ -2951,8 +2951,8 @@ public class DocumentProdService {
|
|||||||
ScaricoLavorazioneDTO dtoScarico = dto.getScaricoLavorazioneDTO();
|
ScaricoLavorazioneDTO dtoScarico = dto.getScaricoLavorazioneDTO();
|
||||||
if (dtoScarico.isScaricoDaCollo()) {
|
if (dtoScarico.isScaricoDaCollo()) {
|
||||||
List<DtbDoct> scarichiDaCollo = generaDocumentiScaricoOrdineDaColli(dto);
|
List<DtbDoct> scarichiDaCollo = generaDocumentiScaricoOrdineDaColli(dto);
|
||||||
if (dto.isSalvaDocumenti()){
|
if (dto.isSalvaDocumenti()) {
|
||||||
entityProcessor.processEntityList(scarichiDaCollo,multiDBTransactionManager,true);
|
entityProcessor.processEntityList(scarichiDaCollo, multiDBTransactionManager, true);
|
||||||
UtilityEntity.throwEntitiesException(scarichiDaCollo);
|
UtilityEntity.throwEntitiesException(scarichiDaCollo);
|
||||||
}
|
}
|
||||||
documentiScarico.addAll(scarichiDaCollo);
|
documentiScarico.addAll(scarichiDaCollo);
|
||||||
@@ -2963,8 +2963,8 @@ public class DocumentProdService {
|
|||||||
// dei carichi/scarichi deve essere fatta utilizzando la data dei colli di versamento o carico">
|
// dei carichi/scarichi deve essere fatta utilizzando la data dei colli di versamento o carico">
|
||||||
for (ArticoloProdottoDTO produzione : dto.getProduzioniOrdine()) {
|
for (ArticoloProdottoDTO produzione : dto.getProduzioniOrdine()) {
|
||||||
List<DtbDoct> scarichi = generaDocumentiScaricoMateriali(dto, produzione);
|
List<DtbDoct> scarichi = generaDocumentiScaricoMateriali(dto, produzione);
|
||||||
if (dto.isSalvaDocumenti()){
|
if (dto.isSalvaDocumenti()) {
|
||||||
entityProcessor.processEntityList(scarichi,multiDBTransactionManager,true);
|
entityProcessor.processEntityList(scarichi, multiDBTransactionManager, true);
|
||||||
UtilityEntity.throwEntitiesException(scarichi);
|
UtilityEntity.throwEntitiesException(scarichi);
|
||||||
}
|
}
|
||||||
documentiScarico.addAll(scarichi);
|
documentiScarico.addAll(scarichi);
|
||||||
@@ -2980,8 +2980,7 @@ public class DocumentProdService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* @param ordine ordine da controllare
|
||||||
* @param ordine ordine da controllare
|
|
||||||
* @param separaPerData separa le produzioni per data collo
|
* @param separaPerData separa le produzioni per data collo
|
||||||
* @return Recupera tutte le produzioni senza documento dell'ordine suddivise per articolo, partita e (se necessario) data di produzione
|
* @return Recupera tutte le produzioni senza documento dell'ordine suddivise per articolo, partita e (se necessario) data di produzione
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
@@ -3006,12 +3005,10 @@ public class DocumentProdService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BigDecimal qtaProdotta = produzioni.stream().map(ArticoloProdottoDTO::getQuantita).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal qtaProdotta = produzioni.stream().map(ArticoloProdottoDTO::getQuantita).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
produzioni.forEach(x ->
|
produzioni.forEach(x -> {
|
||||||
{
|
x.setPesoProduzione(BigDecimal.valueOf(100).multiply(x.getQuantita()).divide(qtaProdotta, 3, RoundingMode.HALF_EVEN));
|
||||||
x.setPesoProduzione(BigDecimal.valueOf(100).multiply(x.getQuantita()).divide(qtaProdotta, 3, RoundingMode.HALF_EVEN));
|
x.setOrdine(ordine);
|
||||||
x.setOrdine(ordine);
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
return produzioni;
|
return produzioni;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3244,7 +3241,8 @@ public class DocumentProdService {
|
|||||||
"SELECT DISTINCT mtb_colt.gestione, " +
|
"SELECT DISTINCT mtb_colt.gestione, " +
|
||||||
" mtb_colt.data_collo, " +
|
" mtb_colt.data_collo, " +
|
||||||
" mtb_colt.ser_collo, " +
|
" mtb_colt.ser_collo, " +
|
||||||
" mtb_colt.num_collo " +
|
" mtb_colt.num_collo, " +
|
||||||
|
" mtb_colt.segno " +
|
||||||
" FROM mtb_colt, " +
|
" FROM mtb_colt, " +
|
||||||
" mtb_colr " +
|
" mtb_colr " +
|
||||||
" WHERE mtb_colr.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
|
" WHERE mtb_colr.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ package it.integry.ems.retail.wms.Utility;
|
|||||||
|
|
||||||
import com.annimon.stream.Optional;
|
import com.annimon.stream.Optional;
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
|
import groovy.lang.Tuple2;
|
||||||
import it.integry.ems._context.ApplicationContextProvider;
|
import it.integry.ems._context.ApplicationContextProvider;
|
||||||
import it.integry.ems.exception.MissingDataException;
|
import it.integry.ems.exception.MissingDataException;
|
||||||
import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
|
|
||||||
import it.integry.ems.javabeans.RequestDataDTO;
|
import it.integry.ems.javabeans.RequestDataDTO;
|
||||||
import it.integry.ems.retail.wms.dto.InsertUDCRowRequestDTO;
|
import it.integry.ems.retail.wms.dto.InsertUDCRowRequestDTO;
|
||||||
import it.integry.ems.retail.wms.dto.InsertUDCRowResponseDTO;
|
import it.integry.ems.retail.wms.dto.InsertUDCRowResponseDTO;
|
||||||
@@ -24,7 +24,6 @@ import it.integry.ems_model.utility.*;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@@ -239,6 +238,122 @@ public class WMSUtility {
|
|||||||
entityProcessor.processEntity(mtbColt, true, multiDBTransactionManager);
|
entityProcessor.processEntity(mtbColt, true, multiDBTransactionManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Tuple2<ArrayList<MtbColr>, ArrayList<MtbColr>> generateSpostaArtsTraUlMovements(MtbColt sourceMtbColt, MtbColt destinationMtbColt, boolean flagForceUseRefs, RequestDataDTO requestDataDTO) throws Exception {
|
||||||
|
String destinationBarcodeUl = destinationMtbColt.getBarcodeUl();
|
||||||
|
String destinationCodMdep = destinationMtbColt.getCodMdep();
|
||||||
|
String destinationPosizione = destinationMtbColt.getPosizione();
|
||||||
|
String destinationGestione = destinationMtbColt.getGestione();
|
||||||
|
|
||||||
|
if (UtilityString.isNullOrEmpty(destinationBarcodeUl))
|
||||||
|
throw new MissingDataException("SSCC di destinazione non presente");
|
||||||
|
|
||||||
|
if (UtilityString.isNullOrEmpty(destinationGestione))
|
||||||
|
throw new MissingDataException("Gestione UL di destinazione non presente");
|
||||||
|
|
||||||
|
List<MtbColr> mtbColrsToMove = sourceMtbColt.getMtbColr();
|
||||||
|
|
||||||
|
if (mtbColrsToMove != null && !mtbColrsToMove.isEmpty()) {
|
||||||
|
|
||||||
|
ArrayList<MtbColr> mtbColrSourceList = new ArrayList<>();
|
||||||
|
ArrayList<MtbColr> mtbColrDestList = new ArrayList<>();
|
||||||
|
|
||||||
|
for (MtbColr mtbColr : mtbColrsToMove) {
|
||||||
|
MtbColr cloneMtbColr = (MtbColr) mtbColr.clone();
|
||||||
|
|
||||||
|
boolean destroyMtbColrReferences = false;
|
||||||
|
|
||||||
|
//Se la sorgente è un collo di scarico allora faccio lo storno sulla sorgente e aggiungo le qta a quella di destinazione
|
||||||
|
if (!flagForceUseRefs &&
|
||||||
|
(sourceMtbColt.getSegno() == -1 && UtilityString.equalsIgnoreCase(destinationGestione, "L"))) {
|
||||||
|
destroyMtbColrReferences = true;
|
||||||
|
|
||||||
|
MtbColr stornoSourceMtbColr = (MtbColr) mtbColr.clone();
|
||||||
|
|
||||||
|
stornoSourceMtbColr
|
||||||
|
.setGestione(null)
|
||||||
|
.setNumCollo(null)
|
||||||
|
.setSerCollo(null)
|
||||||
|
.setDataCollo(null)
|
||||||
|
.setRiga(null)
|
||||||
|
.setGestioneRif(cloneMtbColr.getGestioneRif())
|
||||||
|
.setNumColloRif(cloneMtbColr.getNumColloRif())
|
||||||
|
.setSerColloRif(cloneMtbColr.getSerColloRif())
|
||||||
|
.setDataColloRif(cloneMtbColr.getDataColloRif())
|
||||||
|
.setCausale(MtbColr.Causale.VERSAMENTO)
|
||||||
|
.setUtente(requestDataDTO.getUsername())
|
||||||
|
|
||||||
|
.setQtaCol(stornoSourceMtbColr.getQtaCol().multiply(new BigDecimal(-1)))
|
||||||
|
.setNumCnf(stornoSourceMtbColr.getNumCnf().multiply(new BigDecimal(-1)))
|
||||||
|
|
||||||
|
//Lavoro al contrario per compatibilità
|
||||||
|
.setBarcodeUlOut(cloneMtbColr.getBarcodeUlIn())
|
||||||
|
.setCodMdepOut(cloneMtbColr.getCodMdepOut())
|
||||||
|
.setPosizioneOut(cloneMtbColr.getPosizioneOut())
|
||||||
|
|
||||||
|
.setBarcodeUlIn(destinationBarcodeUl)
|
||||||
|
.setCodMdepIn(destinationCodMdep)
|
||||||
|
.setPosizioneIn(destinationPosizione)
|
||||||
|
|
||||||
|
.setOperation(OperationType.UPDATE);
|
||||||
|
|
||||||
|
mtbColrSourceList.add(stornoSourceMtbColr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!destroyMtbColrReferences) {
|
||||||
|
//Copio i campi gestione, num_collo, ser_collo e data_collo in rif perché dopo verranno azzerati
|
||||||
|
cloneMtbColr
|
||||||
|
.setGestioneRif(cloneMtbColr.getGestione())
|
||||||
|
.setSerColloRif(cloneMtbColr.getSerCollo())
|
||||||
|
.setNumColloRif(cloneMtbColr.getNumCollo())
|
||||||
|
.setDataColloRif(cloneMtbColr.getDataCollo());
|
||||||
|
|
||||||
|
cloneMtbColr
|
||||||
|
.setBarcodeUlOut(cloneMtbColr.getBarcodeUlIn())
|
||||||
|
.setBarcodeUlIn(destinationBarcodeUl)
|
||||||
|
.setPosizioneOut(cloneMtbColr.getPosizioneIn())
|
||||||
|
.setPosizioneIn(destinationPosizione)
|
||||||
|
.setCodMdepOut(cloneMtbColr.getCodMdepIn())
|
||||||
|
.setCodMdepOut(destinationCodMdep);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sourceMtbColt.getGestione().equalsIgnoreCase("V") && sourceMtbColt.getSegno() == +1) {
|
||||||
|
cloneMtbColr.setCodJcom(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
cloneMtbColr
|
||||||
|
.setGestione(null)
|
||||||
|
.setSerCollo(null)
|
||||||
|
.setNumCollo(null)
|
||||||
|
.setDataCollo(null)
|
||||||
|
.setRiga(null)
|
||||||
|
.setBarcodeUlIn(destinationBarcodeUl)
|
||||||
|
.setCodMdepIn(destinationCodMdep)
|
||||||
|
.setPosizioneIn(destinationPosizione)
|
||||||
|
.setUtente(requestDataDTO.getUsername())
|
||||||
|
.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||||
|
|
||||||
|
if (!StringUtils.equalsIgnoreCase(destinationGestione, "V")) {
|
||||||
|
cloneMtbColr
|
||||||
|
.setCausale(MtbColr.Causale.VERSAMENTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
mtbColrDestList.add(cloneMtbColr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sourceMtbColt.setMtbColr(mtbColrSourceList);
|
||||||
|
// destinationMtbColt.setMtbColr(mtbColrDestList);
|
||||||
|
|
||||||
|
|
||||||
|
if (destinationMtbColt.getMtbCols().stream().noneMatch(x -> x.getOperation() == OperationType.INSERT || x.getOperation() == OperationType.INSERT_OR_UPDATE)) {
|
||||||
|
destinationMtbColt.setMtbCols(new ArrayList<>());
|
||||||
|
PackagesRules.insertMtbCols(destinationMtbColt, MtbCols.Causale.VERSAMENTO);
|
||||||
|
}
|
||||||
|
return new Tuple2<>(mtbColrSourceList, mtbColrDestList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Tuple2<>(new ArrayList<>(), new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
public static SpostaArtsTraULResponseDTO spostaArtsTraUL(Connection connection, MtbColt sourceMtbColt, String destinationSscc, boolean flagForceUseRefs, EntityProcessor entityProcessor, RequestDataDTO requestDataDTO) throws Exception {
|
public static SpostaArtsTraULResponseDTO spostaArtsTraUL(Connection connection, MtbColt sourceMtbColt, String destinationSscc, boolean flagForceUseRefs, EntityProcessor entityProcessor, RequestDataDTO requestDataDTO) throws Exception {
|
||||||
String destinationMtbColtQuery = Query.format("SELECT * " +
|
String destinationMtbColtQuery = Query.format("SELECT * " +
|
||||||
"FROM " + MtbColt.ENTITY + " " +
|
"FROM " + MtbColt.ENTITY + " " +
|
||||||
@@ -571,7 +686,7 @@ public class WMSUtility {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static List<String> retrieveBarcodesInPosizione(Connection connection, String posizione) throws SQLException, IOException, PrimaryDatabaseNotPresentException {
|
public static List<String> retrieveBarcodesInPosizione(Connection connection, String posizione) throws SQLException {
|
||||||
String sql = "SELECT * FROM (" +
|
String sql = "SELECT * FROM (" +
|
||||||
"SELECT barcode_ul FROM mtb_colt WHERE posizione = " + UtilityDB.valueToString(posizione) +
|
"SELECT barcode_ul FROM mtb_colt WHERE posizione = " + UtilityDB.valueToString(posizione) +
|
||||||
" UNION " +
|
" UNION " +
|
||||||
@@ -597,7 +712,7 @@ public class WMSUtility {
|
|||||||
|
|
||||||
|
|
||||||
public static MtbDepoPosizioni getPosizioneFromName(Connection conn, String posizione) throws Exception {
|
public static MtbDepoPosizioni getPosizioneFromName(Connection conn, String posizione) throws Exception {
|
||||||
MtbDepoPosizioni mtbDepoPosizioni = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn,Query.format("SELECT * from "+MtbDepoPosizioni.ENTITY+" where posizione = {}",posizione),MtbDepoPosizioni.class);
|
MtbDepoPosizioni mtbDepoPosizioni = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, Query.format("SELECT * from " + MtbDepoPosizioni.ENTITY + " where posizione = {}", posizione), MtbDepoPosizioni.class);
|
||||||
return mtbDepoPosizioni;
|
return mtbDepoPosizioni;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import it.integry.ems.service.AziendaService;
|
|||||||
import it.integry.ems.service.EntityProcessor;
|
import it.integry.ems.service.EntityProcessor;
|
||||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||||
import it.integry.ems_model.base.EntityBase;
|
import it.integry.ems_model.base.EntityBase;
|
||||||
import it.integry.ems_model.config.EmsRestConstants;
|
|
||||||
import it.integry.ems_model.entity.DtbDoct;
|
import it.integry.ems_model.entity.DtbDoct;
|
||||||
import it.integry.ems_model.entity.MtbColr;
|
import it.integry.ems_model.entity.MtbColr;
|
||||||
import it.integry.ems_model.entity.MtbColt;
|
import it.integry.ems_model.entity.MtbColt;
|
||||||
@@ -29,7 +28,10 @@ import org.springframework.stereotype.Service;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package it.integry.ems.retail.wms.lavorazione.service;
|
package it.integry.ems.retail.wms.lavorazione.service;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
|
import groovy.lang.Tuple2;
|
||||||
import it.integry.ems.document.dto.ArticoloProdottoDTO;
|
import it.integry.ems.document.dto.ArticoloProdottoDTO;
|
||||||
import it.integry.ems.document.dto.ScarichiMateriaPrimaDTO;
|
|
||||||
import it.integry.ems.javabeans.RequestDataDTO;
|
import it.integry.ems.javabeans.RequestDataDTO;
|
||||||
import it.integry.ems.logistic.dto.sm2.FiltroDistribuzioneColloDTO;
|
import it.integry.ems.logistic.dto.sm2.FiltroDistribuzioneColloDTO;
|
||||||
import it.integry.ems.product.importaz.service.ProductServices;
|
import it.integry.ems.product.importaz.service.ProductServices;
|
||||||
@@ -13,10 +13,10 @@ import it.integry.ems.retail.wms.exceptions.InvalidArticoloException;
|
|||||||
import it.integry.ems.retail.wms.exceptions.InvalidUDSQuantityException;
|
import it.integry.ems.retail.wms.exceptions.InvalidUDSQuantityException;
|
||||||
import it.integry.ems.retail.wms.exceptions.UDSQuantityOverflowException;
|
import it.integry.ems.retail.wms.exceptions.UDSQuantityOverflowException;
|
||||||
import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO;
|
import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO;
|
||||||
import it.integry.ems.retail.wms.generic.dto.SpostaArtsTraULResponseDTO;
|
|
||||||
import it.integry.ems.retail.wms.generic.service.WMSGiacenzaULService;
|
import it.integry.ems.retail.wms.generic.service.WMSGiacenzaULService;
|
||||||
import it.integry.ems.rules.businessLogic.LoadColliService;
|
import it.integry.ems.rules.businessLogic.LoadColliService;
|
||||||
import it.integry.ems.rules.businessLogic.dto.LoadColliDTO;
|
import it.integry.ems.rules.businessLogic.dto.LoadColliDTO;
|
||||||
|
import it.integry.ems.rules.completing.PackagesRules;
|
||||||
import it.integry.ems.service.AziendaService;
|
import it.integry.ems.service.AziendaService;
|
||||||
import it.integry.ems.service.EntityProcessor;
|
import it.integry.ems.service.EntityProcessor;
|
||||||
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
|
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
|
||||||
@@ -78,6 +78,17 @@ public class WMSLavorazioneService {
|
|||||||
private AziendaService aziendaService;
|
private AziendaService aziendaService;
|
||||||
|
|
||||||
public MtbColt createUDS(CreateUDSRequestDTO createUDSRequestDTO) throws Exception {
|
public MtbColt createUDS(CreateUDSRequestDTO createUDSRequestDTO) throws Exception {
|
||||||
|
MtbColt generatedMtbColt = createUDSMovement(createUDSRequestDTO);
|
||||||
|
|
||||||
|
generatedMtbColt.setOperation(OperationType.INSERT);
|
||||||
|
entityProcessor.processEntity(generatedMtbColt, true, multiDBTransactionManager);
|
||||||
|
|
||||||
|
generatedMtbColt.setOnlyPkMaster(false);
|
||||||
|
|
||||||
|
return generatedMtbColt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MtbColt createUDSMovement(CreateUDSRequestDTO createUDSRequestDTO) throws Exception {
|
||||||
|
|
||||||
if (!userSession.isAttivo()) {
|
if (!userSession.isAttivo()) {
|
||||||
throw new UsernameNotFoundException("Utente " + userSession.getUsername() + " non riconosciuto!");
|
throw new UsernameNotFoundException("Utente " + userSession.getUsername() + " non riconosciuto!");
|
||||||
@@ -95,9 +106,10 @@ public class WMSLavorazioneService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MtbColt udsMtbColt = new MtbColt()
|
MtbColt udsMtbColt = new MtbColt()
|
||||||
.setGestione(GestioneEnum.LAVORAZIONE.getText())
|
.setGestione(GestioneEnum.LAVORAZIONE.getText())
|
||||||
.setDataCollo(createUDSRequestDTO.getDataCollo())
|
.setDataCollo(createUDSRequestDTO.getDataCollo() != null ? createUDSRequestDTO.getDataCollo() : UtilityLocalDate.getNow())
|
||||||
.setNumCollo(createUDSRequestDTO.getNumCollo())
|
.setNumCollo(createUDSRequestDTO.getNumCollo())
|
||||||
.setSerCollo(createUDSRequestDTO.getSerCollo())
|
.setSerCollo(createUDSRequestDTO.getSerCollo())
|
||||||
.setCodMdep(createUDSRequestDTO.getCodMdep())
|
.setCodMdep(createUDSRequestDTO.getCodMdep())
|
||||||
@@ -130,6 +142,26 @@ public class WMSLavorazioneService {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (UtilityString.isNullOrEmpty(udsMtbColt.getSerCollo())) {
|
||||||
|
udsMtbColt.setSerCollo(PackagesRules.getSerCollo(
|
||||||
|
multiDBTransactionManager.getPrimaryConnection(),
|
||||||
|
createUDSRequestDTO.getCodMdep()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (udsMtbColt.getNumCollo() == null) {
|
||||||
|
int numCollo = PackagesRules.completeNumCollo(multiDBTransactionManager.getPrimaryConnection(),
|
||||||
|
udsMtbColt.getSerCollo(),
|
||||||
|
udsMtbColt.getDataCollo(),
|
||||||
|
udsMtbColt.getGestione());
|
||||||
|
udsMtbColt.setNumCollo(numCollo);
|
||||||
|
}
|
||||||
|
|
||||||
|
String barcodeUl = PackagesRules.completeBarcodeUl(multiDBTransactionManager.getPrimaryConnection(),
|
||||||
|
udsMtbColt.getGestione(),
|
||||||
|
udsMtbColt.getDataCollo(),
|
||||||
|
udsMtbColt.getSerCollo(),
|
||||||
|
udsMtbColt.getNumCollo(), udsMtbColt.getCodJfas());
|
||||||
|
udsMtbColt.setBarcodeUl(barcodeUl);
|
||||||
|
|
||||||
if (foundDtbOrdts.size() == 1) {
|
if (foundDtbOrdts.size() == 1) {
|
||||||
DtbOrdt foundDtbOrdt = foundDtbOrdts.get(0);
|
DtbOrdt foundDtbOrdt = foundDtbOrdts.get(0);
|
||||||
@@ -186,11 +218,6 @@ public class WMSLavorazioneService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
udsMtbColt.setOperation(OperationType.INSERT);
|
|
||||||
entityProcessor.processEntity(udsMtbColt, true, multiDBTransactionManager);
|
|
||||||
|
|
||||||
udsMtbColt.setOnlyPkMaster(false);
|
|
||||||
|
|
||||||
return udsMtbColt;
|
return udsMtbColt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -816,17 +843,24 @@ public class WMSLavorazioneService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void riproporzionaScarichiLavorazione(List<ArticoloProdottoDTO> articoliProdotti, List<MtbColt> scarichi) throws Exception {
|
public void riproporzionaScarichiLavorazione(List<ArticoloProdottoDTO> articoliProdotti, List<MtbColt> udsMateriaPrima) throws Exception {
|
||||||
if (UtilityList.isNullOrEmpty(articoliProdotti) || UtilityList.isNullOrEmpty(scarichi)) {
|
if (UtilityList.isNullOrEmpty(articoliProdotti) || UtilityList.isNullOrEmpty(udsMateriaPrima)) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (articoliProdotti.size() == 1) {
|
|
||||||
articoliProdotti.get(0).setScarichiProduzione(scarichi);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String sqlSelectMtbColrRows = "SELECT * FROM " + MtbColr.ENTITY + " WHERE ";
|
if (articoliProdotti.size() == 1) {
|
||||||
sqlSelectMtbColrRows += UtilityQuery.concatFieldListInWhereCond(scarichi.stream()
|
articoliProdotti.get(0).setScarichiProduzione(udsMateriaPrima);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
udsMateriaPrima.forEach(x -> {
|
||||||
|
x.setCalcPeso(false);
|
||||||
|
x.setOperation(OperationType.UPDATE);
|
||||||
|
});
|
||||||
|
|
||||||
|
String sqlSelectMtbColrRows = "SELECT *\n" +
|
||||||
|
" FROM " + MtbColr.ENTITY + " WHERE ";
|
||||||
|
sqlSelectMtbColrRows += UtilityQuery.concatFieldListInWhereCond(udsMateriaPrima.stream()
|
||||||
.map(scarico -> new HashMap<String, Object>() {{
|
.map(scarico -> new HashMap<String, Object>() {{
|
||||||
put("gestione", scarico.getGestione());
|
put("gestione", scarico.getGestione());
|
||||||
put("data_collo", scarico.getDataCollo());
|
put("data_collo", scarico.getDataCollo());
|
||||||
@@ -835,119 +869,172 @@ public class WMSLavorazioneService {
|
|||||||
}})
|
}})
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
List<MtbColr> allScaricoRows = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sqlSelectMtbColrRows, MtbColr.class);
|
List<MtbColr> udsMateriaPrimaRows = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sqlSelectMtbColrRows, MtbColr.class);
|
||||||
|
|
||||||
if (allScaricoRows == null || allScaricoRows.isEmpty()) {
|
if (udsMateriaPrimaRows == null || udsMateriaPrimaRows.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
HashMap<String, ScarichiMateriaPrimaDTO> scarichiMateriaPrima = new HashMap<>();
|
udsMateriaPrimaRows.forEach(x -> x.setOperation(OperationType.NO_OP));
|
||||||
for (MtbColt scarico : scarichi) {
|
|
||||||
|
|
||||||
allScaricoRows.stream()
|
|
||||||
.filter(x -> x.getGestione().equals(scarico.getGestione()) &&
|
|
||||||
x.getDataCollo().equals(scarico.getDataCollo()) &&
|
|
||||||
x.getSerCollo().equals(scarico.getSerCollo()) &&
|
|
||||||
x.getNumCollo().equals(scarico.getNumCollo()))
|
|
||||||
.forEach(row -> {
|
|
||||||
ScarichiMateriaPrimaDTO dtoScarico = scarichiMateriaPrima.get(row.getCodMart());
|
|
||||||
if (dtoScarico == null) {
|
|
||||||
dtoScarico = new ScarichiMateriaPrimaDTO();
|
|
||||||
dtoScarico.setCodMart(row.getCodMart())
|
|
||||||
.setQtaScaricata(BigDecimal.ZERO)
|
|
||||||
.setScarichi(new ArrayList<>());
|
|
||||||
}
|
|
||||||
|
|
||||||
dtoScarico.setQtaScaricata(dtoScarico.getQtaScaricata().add(row.getQtaCol()));
|
// List<MtbColt> originalUdsMateriaPrima = UtilityList.clone(udsMateriaPrima);
|
||||||
dtoScarico.getScarichi().add(row);
|
// originalUdsMateriaPrima
|
||||||
scarichiMateriaPrima.put(row.getCodMart(), dtoScarico);
|
// .forEach(mtbColt -> mtbColt.setMtbColr(udsMateriaPrimaRows.stream()
|
||||||
});
|
// .filter(mtbColr -> mtbColt.getKey().equals(mtbColr.getKey()))
|
||||||
|
// .map(x -> (MtbColr) x.clone())
|
||||||
|
// .collect(Collectors.toList())));
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Iterator<ArticoloProdottoDTO> iteratorProduzioni = articoliProdotti.iterator();
|
final List<MtbColt> newUdsToSave = new ArrayList<>();
|
||||||
|
|
||||||
final List<String> codMarts = new ArrayList<>(scarichiMateriaPrima.keySet());
|
final List<String> codMarts = udsMateriaPrimaRows.stream()
|
||||||
|
.map(MtbColr::getCodMart)
|
||||||
|
.distinct().collect(Collectors.toList());
|
||||||
|
|
||||||
final HashMap<String, MtbAart> mtbAarts = WMSUtility.getArticoliByCodMartsAsMap(codMarts, multiDBTransactionManager.getPrimaryConnection());
|
final HashMap<String, MtbAart> mtbAarts = WMSUtility.getArticoliByCodMartsAsMap(codMarts, multiDBTransactionManager.getPrimaryConnection());
|
||||||
|
|
||||||
while (iteratorProduzioni.hasNext()) {
|
final Map<String, BigDecimal> totalQtaScaricataByCodMart = udsMateriaPrimaRows.stream()
|
||||||
ArticoloProdottoDTO produzione = iteratorProduzioni.next();
|
.collect(Collectors.groupingBy(MtbColr::getCodMart,
|
||||||
boolean isLastProduzione = !iteratorProduzioni.hasNext();
|
Collectors.reducing(BigDecimal.ZERO, MtbColr::getQtaCol, BigDecimal::add)));
|
||||||
if (UtilityBigDecimal.isNullOrZero(produzione.getPesoProduzione()))
|
|
||||||
continue;
|
|
||||||
DtbOrdt ordine = produzione.getOrdine();
|
|
||||||
//<editor-fold desc="Creazione UDS">
|
|
||||||
|
|
||||||
|
|
||||||
|
//Riproporzionamento degli scarichi
|
||||||
|
for (ArticoloProdottoDTO articoloProdotto : articoliProdotti) {
|
||||||
|
BigDecimal pesoProduzione = articoloProdotto.getPesoProduzione() != null ? articoloProdotto.getPesoProduzione() : BigDecimal.ZERO;
|
||||||
|
|
||||||
|
if (pesoProduzione.intValue() == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
//Per ogni lotto prodotto creo una UDS dedicata
|
||||||
CreateUDSRequestDTO createUdsRequestDTO = new CreateUDSRequestDTO()
|
CreateUDSRequestDTO createUdsRequestDTO = new CreateUDSRequestDTO()
|
||||||
.setCodMdep(ordine.getCodMdep())
|
.setCodMdep(articoloProdotto.getOrdine().getCodMdep())
|
||||||
.setCausaleCollo(CreateUDSRequestDTO.Causale.SCARICO)
|
.setCausaleCollo(CreateUDSRequestDTO.Causale.SCARICO)
|
||||||
|
.setDataCollo(articoloProdotto.getDataProd())
|
||||||
.setSegno(-1)
|
.setSegno(-1)
|
||||||
.setOrders(Collections.singletonList(new CreateUDSRequestOrderDTO()
|
.setOrders(Collections.singletonList(new CreateUDSRequestOrderDTO()
|
||||||
.setNumOrd(ordine.getNumOrd())
|
.setNumOrd(articoloProdotto.getOrdine().getNumOrd())
|
||||||
.setDataOrd(UtilityLocalDate.localDateFromDate(ordine.getDataOrd()))
|
.setDataOrd(UtilityLocalDate.localDateFromDate(articoloProdotto.getOrdine().getDataOrd()))
|
||||||
.setGestione(ordine.getGestione())));
|
.setGestione(articoloProdotto.getOrdine().getGestione())));
|
||||||
|
|
||||||
if (produzione.getDataProd() != null) {
|
|
||||||
createUdsRequestDTO.setDataCollo(produzione.getDataProd());
|
|
||||||
}
|
|
||||||
|
|
||||||
MtbColt uds = createUDS(createUdsRequestDTO);
|
MtbColt newUds = createUDSMovement(createUdsRequestDTO);
|
||||||
//</editor-fold>
|
newUds.setOperation(OperationType.INSERT);
|
||||||
//<editor-fold desc="per ogni articolo ripartisco gli scarichi">
|
newUdsToSave.add(newUds);
|
||||||
for (ScarichiMateriaPrimaDTO scarichiMp : scarichiMateriaPrima.values()) {
|
articoloProdotto.setScarichiProduzione(Collections.singletonList(newUds));
|
||||||
String codMart = scarichiMp.getCodMart();
|
|
||||||
MtbAart mtbAart = mtbAarts.getOrDefault(codMart, null);
|
|
||||||
|
|
||||||
if (mtbAart == null || UtilityList.isNullOrEmpty(mtbAart.getMtbUntMis())) {
|
|
||||||
throw new InvalidArticoloException(codMart);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
for (MtbAart mtbAart : mtbAarts.values()) {
|
||||||
BigDecimal cifreDecPrimaUntMis = mtbAart.getMtbUntMis().get(0).getCifreDec();
|
BigDecimal cifreDecPrimaUntMis = mtbAart.getMtbUntMis().get(0).getCifreDec();
|
||||||
|
|
||||||
BigDecimal qtaDaScaricare = UtilityBigDecimal.calculatePercentage(scarichiMp.getQtaScaricata(), produzione.getPesoProduzione().doubleValue(), cifreDecPrimaUntMis.intValue());
|
List<MtbColr> allScarichiByCodMart = udsMateriaPrimaRows.stream()
|
||||||
|
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart()) &&
|
||||||
|
UtilityBigDecimal.greaterThan(x.getQtaCol(), BigDecimal.ZERO))
|
||||||
|
.sorted(Comparator.comparing(MtbColr::getDatetimeRow))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
if (UtilityBigDecimal.equalsTo(qtaDaScaricare, BigDecimal.ZERO)) {
|
BigDecimal totalQtaScaricata = totalQtaScaricataByCodMart.get(mtbAart.getCodMart());
|
||||||
|
|
||||||
|
BigDecimal totalQtaDaScaricare = UtilityBigDecimal.calculatePercentage(totalQtaScaricata,
|
||||||
|
articoloProdotto.getPesoProduzione().doubleValue(), cifreDecPrimaUntMis.intValue());
|
||||||
|
|
||||||
|
if (UtilityBigDecimal.equalsTo(totalQtaDaScaricare, BigDecimal.ZERO)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
scarichiMp.getScarichi()
|
BigDecimal totalQtaRiproporzionata = BigDecimal.ZERO;
|
||||||
.sort(Comparator.comparing(MtbColr::getDatetimeRow));
|
|
||||||
|
|
||||||
Iterator<MtbColr> rowsIterator = scarichiMp.getScarichi().iterator();
|
for (int i = 0; i < allScarichiByCodMart.size() && UtilityBigDecimal.lowerThan(totalQtaRiproporzionata, totalQtaDaScaricare); i++) {
|
||||||
do {
|
|
||||||
MtbColr nextScar = rowsIterator.next();
|
BigDecimal qtaDaRiproporzionare = totalQtaDaScaricare.subtract(totalQtaRiproporzionata);
|
||||||
MtbColr mtbColrToMove = (MtbColr) nextScar.clone();
|
|
||||||
if (UtilityBigDecimal.equalsTo(mtbColrToMove.getQtaCol(), BigDecimal.ZERO))
|
MtbColr oldScarico = allScarichiByCodMart.get(i);
|
||||||
|
BigDecimal qtaDaScaricare = UtilityBigDecimal.getLowerBetween(oldScarico.getQtaCol(), qtaDaRiproporzionare);
|
||||||
|
|
||||||
|
if (!UtilityBigDecimal.greaterThan(qtaDaScaricare, BigDecimal.ZERO))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
MtbColt mtbColtToMove = new MtbColt(mtbColrToMove.getKey());
|
MtbColr oldScaricoClone = (MtbColr) oldScarico.clone();
|
||||||
mtbColtToMove.setOperation(OperationType.SELECT_OBJECT);
|
oldScaricoClone
|
||||||
entityProcessor.processEntity(mtbColtToMove, true, multiDBTransactionManager);
|
.setQtaCol(qtaDaScaricare)
|
||||||
mtbColtToMove.getMtbColr().add(mtbColrToMove);
|
.setNumCnf(UtilityBigDecimal.multiply(qtaDaScaricare, oldScaricoClone.getQtaCnf()));
|
||||||
|
|
||||||
|
//Movements here
|
||||||
|
MtbColt udsMtbColtClone = (MtbColt) udsMateriaPrima.stream()
|
||||||
|
.filter(x -> x.getKey().equals(oldScaricoClone.getKey()))
|
||||||
|
.findFirst()
|
||||||
|
.get()
|
||||||
|
.clone();
|
||||||
|
udsMtbColtClone.setMtbColr(Collections.singletonList(oldScaricoClone));
|
||||||
|
|
||||||
|
final Tuple2<ArrayList<MtbColr>, ArrayList<MtbColr>> generatedMovements = WMSUtility.generateSpostaArtsTraUlMovements(udsMtbColtClone, newUds, false, requestDataDTO);
|
||||||
|
//List<MtbColr> generatedMovementsInOriginalUds = generatedMovements.getFirst();
|
||||||
|
List<MtbColr> generatedMovementsInNewUds = generatedMovements.getSecond();
|
||||||
|
|
||||||
|
//generatedMovementsInOriginalUds.forEach(x -> x.setOperation(OperationType.INSERT));
|
||||||
|
generatedMovementsInNewUds.forEach(x -> x.setOperation(OperationType.INSERT));
|
||||||
|
|
||||||
|
oldScarico.setQtaCol(oldScarico.getQtaCol().subtract(qtaDaScaricare));
|
||||||
|
oldScarico.setNumCnf(UtilityBigDecimal.multiply(oldScarico.getQtaCol(), oldScarico.getQtaCnf()));
|
||||||
|
oldScarico.setOperation(OperationType.UPDATE);
|
||||||
|
|
||||||
|
udsMateriaPrima.stream()
|
||||||
|
.filter(x -> x.getKey().equals(oldScarico.getKey()))
|
||||||
|
.findFirst()
|
||||||
|
.ifPresent(x -> {
|
||||||
|
if (x.getMtbColr().stream().noneMatch(y -> y.getKey().equals(x.getKey()))) {
|
||||||
|
x.getMtbColr().add(oldScarico);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
newUds.getMtbColr().addAll(generatedMovementsInNewUds);
|
||||||
|
|
||||||
|
|
||||||
BigDecimal qtaPrelevata = isLastProduzione ? mtbColrToMove.getQtaCol() : UtilityBigDecimal.getLowerBetween(mtbColrToMove.getQtaCol(), qtaDaScaricare);
|
totalQtaRiproporzionata = totalQtaRiproporzionata.add(qtaDaScaricare);
|
||||||
mtbColrToMove.setQtaCol(qtaPrelevata);
|
|
||||||
|
|
||||||
final SpostaArtsTraULResponseDTO spostaArtsTraULResponseDTO = WMSUtility.spostaArtsTraUL(multiDBTransactionManager.getPrimaryConnection(),
|
|
||||||
mtbColtToMove, uds.getBarcodeUl(), false, entityProcessor, requestDataDTO);
|
|
||||||
|
|
||||||
qtaDaScaricare = qtaDaScaricare.subtract(qtaPrelevata);
|
|
||||||
nextScar.setQtaCol(mtbColrToMove.getQtaCol().subtract(qtaPrelevata));
|
|
||||||
|
|
||||||
uds.getMtbColr()
|
|
||||||
.addAll(spostaArtsTraULResponseDTO.getGeneratedMtbColr());
|
|
||||||
}
|
}
|
||||||
while ((UtilityBigDecimal.greaterThan(qtaDaScaricare, BigDecimal.ZERO) || isLastProduzione) && rowsIterator.hasNext());
|
|
||||||
}
|
}
|
||||||
produzione.getScarichiProduzione().add(uds);
|
|
||||||
//</editor-fold>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MtbColt originalScarico : scarichi) {
|
|
||||||
|
//Elaboro anche eventuali residui (frutto di calcoli con i decimali)
|
||||||
|
final List<MtbColr> notProcessedRows = udsMateriaPrimaRows.stream()
|
||||||
|
.filter(x -> UtilityBigDecimal.greaterThan(x.getQtaCol(), BigDecimal.ZERO))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (!notProcessedRows.isEmpty()) {
|
||||||
|
for (MtbColr notProcessedRow : notProcessedRows) {
|
||||||
|
MtbColt udsMtbColtClone = (MtbColt) udsMateriaPrima.stream()
|
||||||
|
.filter(x -> x.getKey().equals(notProcessedRow.getKey()))
|
||||||
|
.findFirst()
|
||||||
|
.get()
|
||||||
|
.clone();
|
||||||
|
udsMtbColtClone.setMtbColr(Collections.singletonList(notProcessedRow));
|
||||||
|
|
||||||
|
MtbColt latestUdsGenerated = newUdsToSave.get(newUdsToSave.size() - 1);
|
||||||
|
|
||||||
|
final Tuple2<ArrayList<MtbColr>, ArrayList<MtbColr>> generatedMovements =
|
||||||
|
WMSUtility.generateSpostaArtsTraUlMovements(udsMtbColtClone, latestUdsGenerated, false, requestDataDTO);
|
||||||
|
|
||||||
|
notProcessedRow.setQtaCol(notProcessedRow.getQtaCol().subtract(notProcessedRow.getQtaCol()));
|
||||||
|
notProcessedRow.setNumCnf(UtilityBigDecimal.multiply(notProcessedRow.getQtaCol(), notProcessedRow.getQtaCnf()));
|
||||||
|
notProcessedRow.setOperation(OperationType.UPDATE);
|
||||||
|
latestUdsGenerated.getMtbColr().addAll(generatedMovements.getSecond());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entityProcessor.processEntityList(udsMateriaPrima, multiDBTransactionManager, true);
|
||||||
|
UtilityEntity.throwEntitiesException(udsMateriaPrima);
|
||||||
|
|
||||||
|
entityProcessor.processEntityList(newUdsToSave, multiDBTransactionManager, true);
|
||||||
|
UtilityEntity.throwEntitiesException(newUdsToSave);
|
||||||
|
|
||||||
|
|
||||||
|
for (MtbColt originalScarico : udsMateriaPrima) {
|
||||||
if (!WMSUtility.canULBeDeleted(originalScarico, multiDBTransactionManager))
|
if (!WMSUtility.canULBeDeleted(originalScarico, multiDBTransactionManager))
|
||||||
throw new Exception("Impossibile eliminare lo scarico " + originalScarico.getSerCollo() + " " + originalScarico.getNumCollo() + " " + originalScarico.getDataCollo() + " in quanto è stato utilizzato per la ripartizione della produzione!");
|
throw new Exception("Impossibile eliminare lo scarico " + originalScarico.getSerCollo() + " " + originalScarico.getNumCollo() + " " + originalScarico.getDataCollo() + " in quanto ci sono ancora residui da ripartizionare!");
|
||||||
WMSUtility.deleteUL(originalScarico, entityProcessor, multiDBTransactionManager);
|
WMSUtility.deleteUL(originalScarico, entityProcessor, multiDBTransactionManager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user