[BIOLEVANTE - EUROFORK]

- aggiornata gestione missioni
This commit is contained in:
2025-11-05 17:35:58 +01:00
parent 2be30206ce
commit 9b14f7dcb7
4 changed files with 154 additions and 9 deletions

View File

@@ -5,6 +5,7 @@ import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.logistic.missioni.magazzino_automatico.dto.CreateMissioneMagazzinoAutomaticoRequestDTO;
import it.integry.ems.logistic.missioni.magazzino_automatico.dto.CreateMissioneMagazzinoAutomaticoResponseDTO;
import it.integry.ems.logistic.missioni.magazzino_automatico.dto.LogErrorMissioneMagazzinoAutomaticoRequestDTO;
import it.integry.ems.logistic.missioni.magazzino_automatico.dto.UpdateDestinazioneMissioniRequestDTO;
import it.integry.ems.logistic.missioni.magazzino_automatico.service.MissioniMagazzinoAutomaticoService;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.retail.wms.generic.service.WMSGenericService;
@@ -136,6 +137,40 @@ public class MissioniMagazzinoAutomaticoController {
}
@PostMapping(value = "instructions/{instructionId}/retry")
public @ResponseBody
ServiceRestResponse retryInstruction(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@PathVariable long instructionId) throws Exception {
userSession.checkUser();
missioniMagazzinoAutomaticoService.retryMissionInstruction(multiDBTransactionManager, instructionId);
return ServiceRestResponse.createPositiveResponse();
}
@PostMapping(value = "instructions/{instructionId}/abort")
public @ResponseBody
ServiceRestResponse abortInstruction(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@PathVariable long instructionId) throws Exception {
userSession.checkUser();
missioniMagazzinoAutomaticoService.abortMissionInstruction(multiDBTransactionManager, instructionId);
return ServiceRestResponse.createPositiveResponse();
}
@PostMapping(value = "instructions/destination/update")
public @ResponseBody
ServiceRestResponse updateDestinazioneMissioni(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody UpdateDestinazioneMissioniRequestDTO requestDTO) throws Exception {
userSession.checkUser();
return ServiceRestResponse.createPositiveResponse(missioniMagazzinoAutomaticoService.updateDestinazioneMissioni(multiDBTransactionManager, requestDTO));
}
// @PostMapping(value = "move-lu")
// public @ResponseBody
// ServiceRestResponse moveLu(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,

View File

@@ -0,0 +1,30 @@
package it.integry.ems.logistic.missioni.magazzino_automatico.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.LocalDateTime;
import java.util.List;
public class UpdateDestinazioneMissioniRequestDTO {
private String posizioneDestinazione;
private List<Long> instructionsList;
public String getPosizioneDestinazione() {
return posizioneDestinazione;
}
public UpdateDestinazioneMissioniRequestDTO setPosizioneDestinazione(String posizioneDestinazione) {
this.posizioneDestinazione = posizioneDestinazione;
return this;
}
public List<Long> getInstructionsList() {
return instructionsList;
}
public UpdateDestinazioneMissioniRequestDTO setInstructionsList(List<Long> instructionsList) {
this.instructionsList = instructionsList;
return this;
}
}

View File

@@ -2,31 +2,28 @@ package it.integry.ems.logistic.missioni.magazzino_automatico.service;
import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
import it.integry.ems.logistic.missioni.magazzino_automatico.dto.MissioneMagazzinoAutomaticoDTO;
import it.integry.ems.logistic.missioni.magazzino_automatico.dto.UpdateDestinazioneMissioniRequestDTO;
import it.integry.ems.logistic.missioni.magazzino_automatico.utils.MissioniMagazzinoAutomaticoUtils;
import it.integry.ems.production.dto.UpdateDestinazioneOrdineRequestDTO;
import it.integry.ems.retail.wms.Utility.WMSUtility;
import it.integry.ems.retail.wms.generic.dto.SpostaUlRequestDTO;
import it.integry.ems.retail.wms.generic.service.WMSGenericService;
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.UtilityEntity;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.exception.DataConverterNotFoundException;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityHashMap;
import it.integry.ems_model.utility.UtilityQuery;
import it.integry.ems_model.utility.UtilityString;
import it.integry.ems_model.utility.*;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import javax.validation.constraints.NotNull;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -103,7 +100,6 @@ public class MissioniMagazzinoAutomaticoService {
}
String sql = "SELECT mmma.id,\n" +
" mmma.cod_mdep,\n" +
" mmma.cod_area,\n" +
@@ -323,4 +319,78 @@ public class MissioniMagazzinoAutomaticoService {
return result;
}
public void retryMissionInstruction(MultiDBTransactionManager multiDBTransactionManager, long instructionId) throws Exception {
MtbMissioneMagAuto mtbMissioneMagAuto = new MtbMissioneMagAuto();
String sqlRows = "SELECT top 1 * FROM " + MtbMissioneMagAutoDet.ENTITY +
" WHERE id =" + UtilityDB.valueToString(instructionId) +
" AND completed = 0 AND skipped = 0 and error_message IS NOT NULL";
MtbMissioneMagAutoDet mtbMissioneMagAutoDet = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sqlRows, MtbMissioneMagAutoDet.class);
if (mtbMissioneMagAutoDet == null) return;
mtbMissioneMagAuto.setId(mtbMissioneMagAutoDet.getParentId());
MissioniMagazzinoAutomaticoUtils.resetInstructionStatus(mtbMissioneMagAutoDet);
mtbMissioneMagAutoDet
.setUpdatedAt(LocalDateTime.now())
.setOperation(OperationType.UPDATE);
mtbMissioneMagAuto.setMtbMissioneMagAutoDet(Collections.singletonList(mtbMissioneMagAutoDet));
entityProcessor.processEntity(mtbMissioneMagAuto, multiDBTransactionManager);
}
public void abortMissionInstruction(MultiDBTransactionManager multiDBTransactionManager, long instructionId) throws Exception {
MtbMissioneMagAuto mtbMissioneMagAuto = new MtbMissioneMagAuto();
String sqlRows = "SELECT top 1 * FROM " + MtbMissioneMagAutoDet.ENTITY +
" WHERE id = " + UtilityDB.valueToString(instructionId) +
" AND completed = 0 AND skipped = 0";
MtbMissioneMagAutoDet mtbMissioneMagAutoDet = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sqlRows, MtbMissioneMagAutoDet.class);
if (mtbMissioneMagAutoDet == null) return;
mtbMissioneMagAutoDet.setSkipped(true)
.setOperation(OperationType.UPDATE);
mtbMissioneMagAuto.setId(mtbMissioneMagAutoDet.getParentId())
.setMtbMissioneMagAutoDet(Collections.singletonList(mtbMissioneMagAutoDet));
entityProcessor.processEntity(mtbMissioneMagAuto, multiDBTransactionManager);
}
public List<MtbMissioneMagAuto> updateDestinazioneMissioni(MultiDBTransactionManager multiDBTransactionManager, UpdateDestinazioneMissioniRequestDTO requestDTO) throws Exception {
if (UtilityList.isNullOrEmpty(requestDTO.getInstructionsList()))
return new ArrayList<>();
String sqlTestate = "SELECT * FROM " + MtbMissioneMagAutoDet.ENTITY + " WHERE " +
" id IN (" + UtilityQuery.concatLongFieldsWithSeparator(requestDTO.getInstructionsList(), ",") + ") " +
" AND completed = 0 AND skipped = 0";
List<MtbMissioneMagAutoDet> istruzioniToUpdate = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sqlTestate, MtbMissioneMagAutoDet.class);
if (UtilityList.isNullOrEmpty(istruzioniToUpdate))
throw new Exception("Nessuna missione trovata.");
List<MtbMissioneMagAuto> missioniToUpdate = new ArrayList<>();
for (MtbMissioneMagAutoDet istruzione : istruzioniToUpdate) {
MtbMissioneMagAuto missione = missioniToUpdate.stream().filter(x -> x.getId().equals(istruzione.getParentId())).findFirst().orElse(null);
if (missione == null) {
missione = new MtbMissioneMagAuto();
missione.setId(istruzione.getParentId());
missione.setMtbMissioneMagAutoDet(new ArrayList<>());
missioniToUpdate.add(missione);
}
MissioniMagazzinoAutomaticoUtils.resetInstructionStatus(istruzione);
istruzione
.setPosizioneIn(requestDTO.getPosizioneDestinazione())
.setUpdatedAt(LocalDateTime.now())
.setOperation(OperationType.UPDATE);
missione.getMtbMissioneMagAutoDet().add(istruzione);
}
entityProcessor.processEntityList(missioniToUpdate, multiDBTransactionManager, true);
UtilityEntity.throwEntitiesException(missioniToUpdate);
return missioniToUpdate;
}
}

View File

@@ -2,6 +2,7 @@ package it.integry.ems.logistic.missioni.magazzino_automatico.utils;
import it.integry.ems.logistic.missioni.magazzino_automatico.dto.MissioneMagazzinoAutomaticoDTO;
import it.integry.ems.logistic.missioni.magazzino_automatico.dto.MissioneMagazzinoAutomaticoRowDTO;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.entity.MtbMissioneMagAuto;
import it.integry.ems_model.entity.MtbMissioneMagAutoDet;
@@ -89,5 +90,14 @@ public class MissioniMagazzinoAutomaticoUtils {
.setUpdatedAt(inputData.getUpdatedAt());
}
public static MtbMissioneMagAutoDet resetInstructionStatus (MtbMissioneMagAutoDet instruction){
instruction.setCompleted(false)
.setSkipped(false)
.setStartedAt(EmsRestConstants.LOCAL_DATE_TIME_NULL)
.setEndedAt(EmsRestConstants.LOCAL_DATE_TIME_NULL)
.setErrorMessage(EmsRestConstants.NULL);
return instruction;
}
}