Refactoring servizio di Picking libero e Versamento Merce

This commit is contained in:
2025-04-03 09:30:21 +02:00
parent fde266922b
commit ce902cd2be
8 changed files with 156 additions and 105 deletions

View File

@@ -52,6 +52,13 @@ public class MtbColr extends EntityBase {
private BigDecimal pesoNettoKg;
private BigDecimal pesoLordoKg;
private String barcodeUlIn;
private String barcodeUlOut;
private String codMdepIn;
private String codMdepOut;
private String posizioneIn;
private String posizioneOut;
private MtbAart mtbAart;
private MtbPartitaMag mtbPartitaMag;
@@ -109,6 +116,12 @@ public class MtbColr extends EntityBase {
this.idRigaDoc = other.idRigaDoc;
this.pesoNettoKg = other.pesoNettoKg;
this.pesoLordoKg = other.pesoLordoKg;
this.barcodeUlIn = other.barcodeUlIn;
this.barcodeUlOut = other.barcodeUlOut;
this.posizioneIn = other.posizioneIn;
this.posizioneOut = other.posizioneOut;
this.codMdepIn = other.codMdepIn;
this.codMdepOut = other.codMdepOut;
// Deep copy degli oggetti complessi
this.mtbAart = other.mtbAart != null ? new MtbAart(other.mtbAart) : null;
@@ -566,4 +579,70 @@ public class MtbColr extends EntityBase {
this.refMtbColr = refMtbColr;
return this;
}
public String getDataCollo() {
return dataCollo;
}
public String getDataColloRif() {
return dataColloRif;
}
public String getDatetimeRow() {
return datetimeRow;
}
public String getBarcodeUlIn() {
return barcodeUlIn;
}
public MtbColr setBarcodeUlIn(String barcodeUlIn) {
this.barcodeUlIn = barcodeUlIn;
return this;
}
public String getBarcodeUlOut() {
return barcodeUlOut;
}
public MtbColr setBarcodeUlOut(String barcodeUlOut) {
this.barcodeUlOut = barcodeUlOut;
return this;
}
public String getCodMdepIn() {
return codMdepIn;
}
public MtbColr setCodMdepIn(String codMdepIn) {
this.codMdepIn = codMdepIn;
return this;
}
public String getCodMdepOut() {
return codMdepOut;
}
public MtbColr setCodMdepOut(String codMdepOut) {
this.codMdepOut = codMdepOut;
return this;
}
public String getPosizioneIn() {
return posizioneIn;
}
public MtbColr setPosizioneIn(String posizioneIn) {
this.posizioneIn = posizioneIn;
return this;
}
public String getPosizioneOut() {
return posizioneOut;
}
public MtbColr setPosizioneOut(String posizioneOut) {
this.posizioneOut = posizioneOut;
return this;
}
}

View File

@@ -642,9 +642,15 @@ public class MtbColt extends EntityBase {
@Override
public EntityBase clone() {
return clone(true);
}
public MtbColt clone(boolean withMtbColr) {
MtbColt mtbColt = (MtbColt) super.clone();
mtbColt.setMtbColr(new ObservableArrayList<>());
if(!withMtbColr) return mtbColt;
this.getMtbColr().stream()
.map(MtbColr::new) //Genera un clone
.forEach(mtbColr -> {

View File

@@ -7,14 +7,11 @@ import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
@@ -374,44 +371,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public void getMultipleByTestate(List<MtbColt> testate, boolean onlyResiduo, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
ArrayList<MtbColt> resultMtbColt = new ArrayList<>();
cyclicGetMultipleByTestate(testate.iterator(), onlyResiduo, resultMtbColt, () -> {
onComplete.run(resultMtbColt);
}, onFailed);
}
private void cyclicGetMultipleByTestate(@NotNull Iterator<MtbColt> sourceMtbColts, boolean onlyResiduo, ArrayList<MtbColt> resultMtbColt, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceMtbColts.hasNext()) {
getByTestata(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> {
resultMtbColt.add(mtbColt);
cyclicGetMultipleByTestate(sourceMtbColts, onlyResiduo, resultMtbColt, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
public MtbColt getByChiaveColloSynchronized(GestioneEnum gestione, int numCollo, String dataCollo, String serCollo, boolean onlyResiduo, boolean throwExcIfNull) throws Exception {
MtbColt mtbColtToRetrieve = new MtbColt()
.setGestione(gestione)
.setNumCollo(numCollo)
.setDataCollo(dataCollo)
.setSerCollo(serCollo);
return getByTestataSynchronized(mtbColtToRetrieve, onlyResiduo, throwExcIfNull);
}
public void getByChiaveCollo(GestioneEnum gestione, int numCollo, String dataCollo, String serCollo, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt mtbColtToRetrieve = new MtbColt()
.setGestione(gestione)
.setNumCollo(numCollo)
.setDataCollo(dataCollo)
.setSerCollo(serCollo);
getByTestata(mtbColtToRetrieve, onlyResiduo, throwExcIfNull, onComplete, onFailed);
}
public MtbColt getByTestataSynchronized(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull) throws Exception {
testata.setMtbColr(new ObservableArrayList<>());

View File

@@ -318,9 +318,10 @@ public class AccettazioneBollaPickingViewModel {
private void searchArtFromAnag(MtbAart mtbAart, PickDataDTO pickData, Runnable onComplete) {
final List<PickingObjectDTO> pickingList = mPickingList.getValue();
List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList)
.filter(x -> UtilityString.equalsIgnoreCase(mtbAart.getCodMart(), x.getSitBollaAccettazione().getCodMart()))
.toList();
List<PickingObjectDTO> matchPickingObject = pickingList == null ? new ArrayList<>() :
pickingList.stream()
.filter(x -> UtilityString.equalsIgnoreCase(mtbAart.getCodMart(), x.getSitBollaAccettazione().getCodMart()))
.collect(Collectors.toList());
for (PickingObjectDTO pickingObjectDTO : matchPickingObject) {
pickingObjectDTO.setTempPickData(pickData);
@@ -333,10 +334,11 @@ public class AccettazioneBollaPickingViewModel {
private void loadMatchedRows(List<PickingObjectDTO> matchedRows, MtbAart mtbAart, PickDataDTO pickDataDTO) {
if (matchedRows == null || matchedRows.isEmpty()) {
this.mArticoloRESTConsumer.findIfIsKit(mtbAart, mtbAartFind -> {
if (mtbAartFind == null){
if (mtbAartFind == null) {
manageNoArtFound(mtbAart, pickDataDTO);
} else {
searchArtFromAnag(mtbAartFind, pickDataDTO, () -> {});
searchArtFromAnag(mtbAartFind, pickDataDTO, () -> {
});
}
}, this::sendError);
} else if (matchedRows.size() == 1) {
@@ -442,7 +444,7 @@ public class AccettazioneBollaPickingViewModel {
dispatchBollaRow(pickingObjectDTO);
}
public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO){
public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO) {
dispatchBollaRow(pickingObjectDTO, false);
}
@@ -554,7 +556,7 @@ public class AccettazioneBollaPickingViewModel {
UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) {
initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana();
initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
} else if(UtilityBigDecimal.greaterThan(initialNumCnf, BigDecimal.ONE) && pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) {
} else if (UtilityBigDecimal.greaterThan(initialNumCnf, BigDecimal.ONE) && pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) {
initialNumCnf = BigDecimal.ONE;
initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
}
@@ -577,7 +579,7 @@ public class AccettazioneBollaPickingViewModel {
}
}
if (!longClick){
if (!longClick) {
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
@@ -694,7 +696,7 @@ public class AccettazioneBollaPickingViewModel {
mtbColrToEdit.getDataScadPartita(),
true,
pickedQuantityDTO -> {
if(pickedQuantityDTO == null)
if (pickedQuantityDTO == null)
return;
this.saveEditedRow(mtbColrToEdit,
@@ -809,7 +811,7 @@ public class AccettazioneBollaPickingViewModel {
int listCount = pickingList != null ? pickingList.size() : 0;
int anomalie = listCount > 0 ? listCount - mtbColr.size() : 0;
if (anomalie == 0){
if (anomalie == 0) {
closeUdc(closeUDCRequestDTO);
} else {
onConfirmAnomalie(anomalie, canBeClose -> {
@@ -824,7 +826,7 @@ public class AccettazioneBollaPickingViewModel {
}, this::sendError);
}
private void closeUdc(CloseUDCRequestDTO closeUDCRequestDTO){
private void closeUdc(CloseUDCRequestDTO closeUDCRequestDTO) {
mColliCaricoRESTConsumer.closeUDC(closeUDCRequestDTO, closeUDCResponse -> {
Runnable onVersamentoCompleted = () -> {
@@ -1060,7 +1062,7 @@ public class AccettazioneBollaPickingViewModel {
return this;
}
private void onConfirmAnomalie(int anomalie, RunnableArgs<Boolean> onConfirm){
private void onConfirmAnomalie(int anomalie, RunnableArgs<Boolean> onConfirm) {
if (this.mListener != null) mListener.onConfirmAnomalie(anomalie, onConfirm);
}

View File

@@ -56,7 +56,9 @@ import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.Magazzin
import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemsRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteULRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
@@ -619,42 +621,25 @@ public class PickingLiberoViewModel {
public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) throws Exception {
final MtbColr mtbColr = new MtbColr()
.setCodMart(pickingObjectDTO.getMtbAart().getCodMart())
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setQtaCol(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setCodJcom(this.mDefaultCommessa.getCodJcom());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone());
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
this.sendOnLoadingEnded();
return;
}
var value = mColliMagazzinoRESTConsumer.saveColloSynchronized(cloneMtbColt);
var insertUdsRowRequest = new InsertUDSRowRequestDTO()
.setCodMart(pickingObjectDTO.getMtbAart().getCodMart())
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setQtaTot(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setCodJcom(this.mDefaultCommessa.getCodJcom())
.setTargetMtbColt(mCurrentMtbColt.clone(false));
mtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga())
.setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
.setMtbAart(pickingObjectDTO.getMtbAart());
MtbColr savedMtbColr = mColliScaricoRESTConsumer.insertUDSRowSynchronized(insertUdsRowRequest);
savedMtbColr.setMtbAart(pickingObjectDTO.getMtbAart());
mCurrentMtbColt.getMtbColr().add(mtbColr);
mCurrentMtbColt.getMtbColr().add(savedMtbColr);
this.sendOnRowSaved();
@@ -670,11 +655,8 @@ public class PickingLiberoViewModel {
!UtilityString.isNullOrEmpty(mtbColr.getDataColloRifS()) &&
mtbColr.getNumColloRif() != null) {
MtbColt mtbColt = mColliMagazzinoRESTConsumer.getByChiaveColloSynchronized(
mtbColr.getGestioneRifEnum(),
mtbColr.getNumColloRif(),
mtbColr.getDataColloRifS(),
mtbColr.getSerColloRif(),
MtbColt mtbColt = mColliMagazzinoRESTConsumer.getBySsccSynchronized(
mtbColr.getBarcodeUlIn(),
true,
false);
@@ -807,21 +789,26 @@ public class PickingLiberoViewModel {
if (shouldDelete) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>());
var deleteUdsRowRequest = new DeleteUDSRowRequestDTO()
.setMtbColrToDelete(mtbColrToDelete);
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
mColliScaricoRESTConsumer.deleteUDSRowSynchronized(deleteUdsRowRequest);
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE);
mtbColt.getMtbColr().add(mtbColr);
var value = this.mColliMagazzinoRESTConsumer.saveColloSynchronized(mtbColt);
// MtbColt mtbColt = new MtbColt()
// .setNumCollo(mtbColrToDelete.getNumCollo())
// .setDataCollo(mtbColrToDelete.getDataColloS())
// .setSerCollo(mtbColrToDelete.getSerCollo())
// .setGestione(mtbColrToDelete.getGestione())
// .setMtbColr(new ObservableArrayList<>());
//
// mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
//
// MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
//
// mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE);
// mtbColt.getMtbColr().add(mtbColr);
//
// var value = this.mColliMagazzinoRESTConsumer.saveColloSynchronized(mtbColt);
handler.post(() -> {
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);

View File

@@ -1442,7 +1442,7 @@ public class SpedizioneViewModel {
private MtbColt loadRifULFromMtbColr(MtbColr mtbColr) throws Exception {
//Se ho dei riferimenti ad una UL devo leggere la QTA ancora disponibile sulla Ul
if (mtbColr != null && !UtilityString.isNullOrEmpty(mtbColr.getGestioneRif()) && !UtilityString.isNullOrEmpty(mtbColr.getSerColloRif()) && !UtilityString.isNullOrEmpty(mtbColr.getDataColloRifS()) && mtbColr.getNumColloRif() != null) {
return mColliMagazzinoRESTConsumer.getByChiaveColloSynchronized(mtbColr.getGestioneRifEnum(), mtbColr.getNumColloRif(), mtbColr.getDataColloRifS(), mtbColr.getSerColloRif(), true, false);
return mColliMagazzinoRESTConsumer.getBySsccSynchronized(mtbColr.getBarcodeUlOut(), true, false);
}
return null;
}

View File

@@ -3,6 +3,7 @@ package it.integry.integrywmsnative.gest.versamento_merce;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
@@ -11,11 +12,12 @@ import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
public class VersamentoMerceModule {
@Provides
VersamentoMerceViewModel providesVersamentoMerceViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
VersamentoMerceViewModel providesVersamentoMerceViewModel(ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
PosizioniRESTConsumer posizioniRESTConsumer,
MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer) {
return new VersamentoMerceViewModel(colliMagazzinoRESTConsumer, barcodeRESTConsumer, posizioniRESTConsumer, magazzinoAutomaticoRESTConsumer);
return new VersamentoMerceViewModel(colliLavorazioneRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, posizioniRESTConsumer, magazzinoAutomaticoRESTConsumer);
}
}

View File

@@ -14,6 +14,7 @@ import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidLUGestioneException;
import it.integry.integrywmsnative.core.exception.NoArtsInLUException;
@@ -28,10 +29,12 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPutItemsRequestDTO;
import it.integry.integrywmsnative.core.rest.model.udc.CreateUDCRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -45,13 +48,15 @@ public class VersamentoMerceViewModel {
private Listener mListener;
private final ColliLavorazioneRESTConsumer mColliLavorazioneRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final PosizioniRESTConsumer mPosizioniRESTConsumer;
private final MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer;
@Inject
public VersamentoMerceViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, PosizioniRESTConsumer posizioniRESTConsumer, MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer) {
public VersamentoMerceViewModel(ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, PosizioniRESTConsumer posizioniRESTConsumer, MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer) {
this.mColliLavorazioneRESTConsumer = colliLavorazioneRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mPosizioniRESTConsumer = posizioniRESTConsumer;
@@ -188,7 +193,18 @@ public class VersamentoMerceViewModel {
this.sendError(new InvalidLUGestioneException(GestioneEnum.VENDITA));
} else {
if (mtbColt == null) {
this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> {
int numCollo = -1;
try {
numCollo = UtilityBarcode.getNumColloFromULAnonima(sscc);
} catch (Exception e) {
throw new RuntimeException(e);
}
var createUDCRequestDTO = new CreateUDCRequestDTO()
.setNumCollo(numCollo)
.setSerCollo(CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE)
.setBarcodeUl(sscc);
this.mColliLavorazioneRESTConsumer.createUDC(createUDCRequestDTO, mtbColtAnonimo -> {
pickMerceULtoUL(mtbColtAnonimo, onComplete);
}, this::sendError);