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.
This commit is contained in:
parent
0312f972bc
commit
e75121b0bd
@ -21,8 +21,8 @@ import androidx.recyclerview.widget.GridLayoutManager;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
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.class_router.configs.MenuConfiguration;
|
||||||
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverDTO;
|
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverDTO;
|
||||||
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
|
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.IScrollableFragment;
|
||||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
||||||
import it.integry.integrywmsnative.core.menu.MenuService;
|
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.consumers.ColliSpedizioneRESTConsumer;
|
||||||
import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
|
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.CloseUDSRequestDTO;
|
||||||
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO;
|
|
||||||
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
|
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
|
||||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityDimension;
|
import it.integry.integrywmsnative.core.utility.UtilityDimension;
|
||||||
@ -71,6 +68,9 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
|
|||||||
@Inject
|
@Inject
|
||||||
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer;
|
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ExecutorService executorService;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
Handler handler;
|
Handler handler;
|
||||||
|
|
||||||
@ -173,46 +173,31 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
|
|||||||
|
|
||||||
private void initRecuperoCollo() {
|
private void initRecuperoCollo() {
|
||||||
if (colliDataRecoverService.thereIsAnExistantSession()) {
|
if (colliDataRecoverService.thereIsAnExistantSession()) {
|
||||||
|
|
||||||
startRecoverMode();
|
startRecoverMode();
|
||||||
|
|
||||||
|
executorService.execute(() -> {
|
||||||
|
|
||||||
List<Exception> generatedErrors = new ArrayList<>();
|
List<Exception> generatedErrors = new ArrayList<>();
|
||||||
|
for (var sessionIds : colliDataRecoverService.getAllSessionIDs()) {
|
||||||
Iterator<Integer> sessionsIterator = colliDataRecoverService.getAllSessionIDs().iterator();
|
try {
|
||||||
|
recoverUL(sessionIds);
|
||||||
cyclicRecover(sessionsIterator, () -> {
|
} catch (Exception ex) {
|
||||||
|
generatedErrors.add(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (Exception ex : generatedErrors) {
|
for (Exception ex : generatedErrors) {
|
||||||
UtilityExceptions.defaultException(getActivity(), ex);
|
UtilityExceptions.defaultException(getActivity(), ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
endRecoverMode();
|
endRecoverMode();
|
||||||
}, generatedErrors::add);
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cyclicRecover(Iterator<Integer> sessionsIterator, Runnable onComplete, RunnableArgs<Exception> onFailed) {
|
private void recoverUL(Integer recoveredMtbColtID) throws Exception {
|
||||||
|
|
||||||
RunnableArgss<Exception, Integer> 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();
|
|
||||||
ColliDataRecoverDTO recoveredMtbColtDto = colliDataRecoverService.getSession(recoveredMtbColtID);
|
ColliDataRecoverDTO recoveredMtbColtDto = colliDataRecoverService.getSession(recoveredMtbColtID);
|
||||||
MtbColt recoveredMtbColt = recoveredMtbColtDto.getMtbColt();
|
MtbColt recoveredMtbColt = recoveredMtbColtDto.getMtbColt();
|
||||||
|
|
||||||
@ -231,26 +216,29 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
|
|||||||
//.setPrintSSCC(shouldPrint)
|
//.setPrintSSCC(shouldPrint)
|
||||||
.setOrderCodMdep(codMdep);
|
.setOrderCodMdep(codMdep);
|
||||||
|
|
||||||
RunnableArgs<CloseUDSResponseDTO> onRequestComplete = closeUDSResponseDto -> {
|
try {
|
||||||
colliDataRecoverService.closeSession(recoveredMtbColtID);
|
|
||||||
cyclicRecover(sessionsIterator, onComplete, onFailed);
|
|
||||||
};
|
|
||||||
|
|
||||||
switch (recoveredMtbColt.getGestioneEnum()) {
|
switch (recoveredMtbColt.getGestioneEnum()) {
|
||||||
case LAVORAZIONE:
|
case LAVORAZIONE:
|
||||||
colliLavorazioneRESTConsumer.closeUDS(closeUDSRequestDto, onRequestComplete, ex -> {
|
colliLavorazioneRESTConsumer.closeUDSSynchronized(closeUDSRequestDto);
|
||||||
tmpOnFailed.run(ex, recoveredMtbColtID);
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
case VENDITA:
|
case VENDITA:
|
||||||
colliSpedizioneRESTConsumer.closeUDS(closeUDSRequestDto, onRequestComplete, ex -> {
|
colliSpedizioneRESTConsumer.closeUDSSynchronized(closeUDSRequestDto);
|
||||||
tmpOnFailed.run(ex, recoveredMtbColtID);
|
|
||||||
});
|
|
||||||
break;
|
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 {
|
} else {
|
||||||
colliDataRecoverService.closeSession(recoveredMtbColtID);
|
colliDataRecoverService.closeSession(recoveredMtbColtID);
|
||||||
cyclicRecover(sessionsIterator, onComplete, onFailed);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user