From e75121b0bdf80355e450925830aa4679fd412539 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Wed, 26 Feb 2025 19:10:30 +0100 Subject: [PATCH] Refactor: Improve data recovery in MainFragment - Replaced the previous data recovery mechanism with an ExecutorService-based approach. - This allows for concurrent recovery operations, improving overall efficiency. - Improved error handling by removing unnecessary callbacks and handling exceptions directly. - Replaced cyclic recursion with a simpler iterative loop for session recovery. --- .../gest/main/MainFragment.java | 86 ++++++++----------- 1 file changed, 37 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java index 039296a5..7fa9f314 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java @@ -21,8 +21,8 @@ import androidx.recyclerview.widget.GridLayoutManager; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; +import java.util.concurrent.ExecutorService; import javax.inject.Inject; @@ -32,8 +32,6 @@ import it.integry.integrywmsnative.core.class_router.configs.BaseMenuConfigurati import it.integry.integrywmsnative.core.class_router.configs.MenuConfiguration; import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverDTO; import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.menu.MenuService; @@ -44,7 +42,6 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsume import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsumer; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSRequestDTO; -import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO; import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDimension; @@ -71,6 +68,9 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab @Inject ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer; + @Inject + ExecutorService executorService; + @Inject Handler handler; @@ -173,46 +173,31 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab private void initRecuperoCollo() { if (colliDataRecoverService.thereIsAnExistantSession()) { + startRecoverMode(); - List generatedErrors = new ArrayList<>(); + executorService.execute(() -> { - Iterator sessionsIterator = colliDataRecoverService.getAllSessionIDs().iterator(); - - cyclicRecover(sessionsIterator, () -> { + List generatedErrors = new ArrayList<>(); + for (var sessionIds : colliDataRecoverService.getAllSessionIDs()) { + try { + recoverUL(sessionIds); + } catch (Exception ex) { + generatedErrors.add(ex); + } + } for (Exception ex : generatedErrors) { UtilityExceptions.defaultException(getActivity(), ex); } endRecoverMode(); - }, generatedErrors::add); + }); } } - private void cyclicRecover(Iterator sessionsIterator, Runnable onComplete, RunnableArgs onFailed) { - - RunnableArgss tmpOnFailed = (ex, recoveredMtbColtID) -> { - if (ex.getMessage().contains("Dati entity mtb_colt non trovati") || - ex.getMessage().contains("Dati collo non corretti") || - (ex.getMessage().contains("Il collo numero") && ex.getMessage().contains("non esiste")) || - ex.getMessage().contains("Impossibile eliminare un collo agganciato a documento")) { - colliDataRecoverService.closeSession(recoveredMtbColtID); - onFailed.run(ex); - } else { - onFailed.run(ex); - } - - cyclicRecover(sessionsIterator, onComplete, onFailed); - }; - - if (!sessionsIterator.hasNext()) { - onComplete.run(); - return; - } - - Integer recoveredMtbColtID = sessionsIterator.next(); + private void recoverUL(Integer recoveredMtbColtID) throws Exception { ColliDataRecoverDTO recoveredMtbColtDto = colliDataRecoverService.getSession(recoveredMtbColtID); MtbColt recoveredMtbColt = recoveredMtbColtDto.getMtbColt(); @@ -221,8 +206,8 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab recoveredMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE)) { String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); - if(recoveredMtbColtDto.getTestateOrdini() != null && - !recoveredMtbColtDto.getTestateOrdini().isEmpty()){ + if (recoveredMtbColtDto.getTestateOrdini() != null && + !recoveredMtbColtDto.getTestateOrdini().isEmpty()) { codMdep = recoveredMtbColtDto.getTestateOrdini().get(0).getCodMdep(); } @@ -231,26 +216,29 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab //.setPrintSSCC(shouldPrint) .setOrderCodMdep(codMdep); - RunnableArgs onRequestComplete = closeUDSResponseDto -> { - colliDataRecoverService.closeSession(recoveredMtbColtID); - cyclicRecover(sessionsIterator, onComplete, onFailed); - }; + try { + switch (recoveredMtbColt.getGestioneEnum()) { + case LAVORAZIONE: + colliLavorazioneRESTConsumer.closeUDSSynchronized(closeUDSRequestDto); + break; + case VENDITA: + colliSpedizioneRESTConsumer.closeUDSSynchronized(closeUDSRequestDto); + break; + } - switch (recoveredMtbColt.getGestioneEnum()) { - case LAVORAZIONE: - colliLavorazioneRESTConsumer.closeUDS(closeUDSRequestDto, onRequestComplete, ex -> { - tmpOnFailed.run(ex, recoveredMtbColtID); - }); - break; - case VENDITA: - colliSpedizioneRESTConsumer.closeUDS(closeUDSRequestDto, onRequestComplete, ex -> { - tmpOnFailed.run(ex, recoveredMtbColtID); - }); - break; + colliDataRecoverService.closeSession(recoveredMtbColtID); + } catch (Exception ex) { + if (ex.getMessage().contains("Dati entity mtb_colt non trovati") || + ex.getMessage().contains("Dati collo non corretti") || + (ex.getMessage().contains("Il collo numero") && ex.getMessage().contains("non esiste")) || + ex.getMessage().contains("Impossibile eliminare un collo agganciato a documento")) { + colliDataRecoverService.closeSession(recoveredMtbColtID); + } + + throw ex; } } else { colliDataRecoverService.closeSession(recoveredMtbColtID); - cyclicRecover(sessionsIterator, onComplete, onFailed); } }