Skip to content

Commit

Permalink
feat(upgrade-massivo): gestione rollback inserimento massivo 20240926
Browse files Browse the repository at this point in the history
  • Loading branch information
sgravinadxc committed Sep 26, 2024
1 parent 2027acb commit b1f402d
Show file tree
Hide file tree
Showing 5 changed files with 155 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,11 @@ void deleteQuestionarioCompilatoByIdServizioJPA(

@Query(value = "SELECT qce FROM QuestionarioCompilatoEntity qce WHERE qce.idServizio = :idServizio ")
List<QuestionarioCompilatoEntity> findByIdServizioJPA(@Param(value = "idServizio") Long idServizio);

@Query(value = "SELECT qce.* FROM QuestionarioCompilatoEntity qce WHERE qce.codInserimento = :codInserimento ", nativeQuery = true)
List<QuestionarioCompilatoEntity> findByCodInserimento(String codInserimento);

@Modifying
@Query(value = "DELETE FROM QuestionarioCompilatoEntity qce WHERE qce.codInserimento = :codInserimento ", nativeQuery = true)
void deleteAllByCodInserimento(String codInserimento);
}
Original file line number Diff line number Diff line change
Expand Up @@ -324,4 +324,35 @@ boolean existsByIdAndIdEnteSedeProgettoFacilitatore(Long idServizio,

Optional<List<ServizioEntity>> findAllByDataServizioAndDurataServizioAndTipologiaServizioAndIdEnteSedeProgettoFacilitatore(Date dataServizio,
String durataServizio, String tipologiaServizio, EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey);

Optional<List<ServizioEntity>> findAllByDataServizioAndDurataServizioAndTipologiaServizioAndIdEnteSedeProgettoFacilitatoreAndNome(Date dataServizio,
String durataServizio, String tipologiaServizio, EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey, String nome);

Optional<ServizioEntity> findById(Long idServizio);

@Query(value = "SELECT s.*\n" +
"FROM servizio s\n" +
"JOIN servizio_x_cittadino sxc ON sxc.id_servizio = s.id \n" +
"WHERE 1=1\n" +
"AND sxc.id_cittadino = :idCittadino\n" +
"AND s.data_servizio = :dataServizio\n" +
"AND s.durata_servizio = :durataServizio\n" +
"AND s.tipologia_servizio = :tipologiaServizio\n" +
"AND s.id_ente = :idEnte\n" +
"AND s.id_progetto = :idProgetto\n" +
"AND s.id_sede = :idSede\n" +
"AND s.id_facilitatore = :idFacilitatore\n" +
"AND s.id <> :idServizio\n", nativeQuery = true)
Optional<List<ServizioEntity>> findAllByDataServizioAndDurataServizioAndTipologiaServizioAndIdEnteSedeProgettoFacilitatoreAndIdCittadino(
String dataServizio,
String durataServizio, String tipologiaServizio,
Long idEnte, String idFacilitatore, Long idProgetto, Long idSede, Long idCittadino, Long idServizio);


@Query(value = "SELECT s.*\n" +
"FROM servizio s\n" +
"LEFT JOIN servizio_x_cittadino sxc ON sxc.id_servizio = s.id \n" +
"WHERE s.codInserimento = :codInserimento\n" +
"AND sxc.idServizio IS NULL\n", nativeQuery = true)
List<ServizioEntity> findAllByCodInserimentoWithoutSXC(String codInserimento);
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,10 @@ void deleteRelazioneByIdServizioAndIdCittadino(
@Modifying
@Query(value = "DELETE FROM ServizioXCittadinoEntity sxc WHERE sxc.id.idServizio = :idServizio")
void deleteByIdServizioJPA(@Param("idServizio") Long idServizio);

List<ServizioXCittadinoEntity> findById_IdCittadino(@Param("idCittadino") Long idCittadino);

@Modifying
@Query(value = "DELETE FROM ServizioXCittadinoEntity sxc WHERE sxc.codInserimento = :codInserimento", nativeQuery = true)
void deleteAllByCodInserimento(String codInserimento);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import it.pa.repdgt.surveymgmt.exception.ValidationException;
import it.pa.repdgt.surveymgmt.model.ElaboratoCSVRequest;
import it.pa.repdgt.surveymgmt.model.ElaboratoCSVResponse;
import it.pa.repdgt.surveymgmt.mongo.repository.QuestionarioCompilatoMongoRepository;
import it.pa.repdgt.surveymgmt.mongo.repository.SezioneQ3Respository;
import it.pa.repdgt.surveymgmt.repository.*;
import it.pa.repdgt.surveymgmt.request.QuestionarioCompilatoRequest;
Expand Down Expand Up @@ -72,9 +73,13 @@ public class ImportMassivoCSVService {
@Autowired
private QuestionarioCompilatoService questionarioCompilatoService;
private static final String FILE_NAME = "%s_righe_scartate_%s_%s.csv";

@Autowired
private ProgettoService progettoService;
@Autowired
private QuestionarioCompilatoRepository questionarioCompilatoRepository;
private DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH-mm", Locale.ITALIAN);


@Async
public void process(ElaboratoCSVRequest csvRequest, String uuid) throws IOException {
List<ServiziElaboratiDTO> serviziValidati = csvRequest.getServiziValidati();
Expand Down Expand Up @@ -103,22 +108,50 @@ public void process(ElaboratoCSVRequest csvRequest, String uuid) throws IOExcept
try {
uploadFile(response, registroAttivitaEntity.getId());
} catch (IOException e) {
log.error(e.getMessage());
registroAttivitaEntity.setJobStatus(JobStatusEnum.FAIL_S3_UPLOAD);
registroAttivitaEntity.setNote("Upload del file su s3 Fallito");
registroAttivitaEntity.setDataFineInserimento(new Date());
registroAttivitaRepository.save(registroAttivitaEntity);
return;
log.info("-XXX- Errore durante il salvataggio del file scarti, id RegistroAttivitaEntity: {} -XXX",
registroAttivitaEntity.getId());
e.printStackTrace();
try {
rollbackCaricamentoMassivo(registroAttivitaEntity.getId());
registroAttivitaEntity.setJobStatus(JobStatusEnum.FAIL_S3_UPLOAD);
registroAttivitaEntity.setNote("Upload del file su s3 Fallito");
registroAttivitaEntity.setDataFineInserimento(new Date());
registroAttivitaRepository.save(registroAttivitaEntity);
} catch (Exception e2) {
log.info(
"-XXX- Errore durante il rollback del caricamento massivo, id RegistroAttivitaEntity: {} -XXX",
registroAttivitaEntity.getId());
e.printStackTrace();
registroAttivitaEntity.setJobStatus(JobStatusEnum.FAIL_S3_UPLOAD);
registroAttivitaEntity.setNote("Upload del file su s3 Fallito, rollback fallito");
registroAttivitaEntity.setDataFineInserimento(new Date());
registroAttivitaRepository.save(registroAttivitaEntity);
}
}
aggiornaRegistroAttivita(totaleRighe, serviziScartati.size(), serviziValidati.size(),
registroAttivitaEntity,
response.getResponse(), response.getFileName());
} catch (Exception e) {
registroAttivitaEntity.setJobStatus(JobStatusEnum.GENERIC_FAIL);
registroAttivitaEntity.setDataFineInserimento(new Date());
registroAttivitaRepository.save(registroAttivitaEntity);
log.info("-XXX- Errore generico durante l'elaborazione del file, id RegistroAttivitaEntity: {} -XXX-", registroAttivitaEntity.getId());
e.printStackTrace();

log.info("-XXX- Errore generico durante l'elaborazione del file, id RegistroAttivitaEntity: {} -XXX-",
registroAttivitaEntity.getId());
e.printStackTrace();
try {
rollbackCaricamentoMassivo(registroAttivitaEntity.getId());
registroAttivitaEntity.setJobStatus(JobStatusEnum.GENERIC_FAIL);
registroAttivitaEntity.setNote("Caricamento fallito");
registroAttivitaEntity.setDataFineInserimento(new Date());
registroAttivitaRepository.save(registroAttivitaEntity);
} catch (Exception e2) {
log.info("-XXX- Errore durante il rollback del caricamento massivo, id RegistroAttivitaEntity: {} -XXX",
registroAttivitaEntity.getId());
e.printStackTrace();
registroAttivitaEntity.setJobStatus(JobStatusEnum.GENERIC_FAIL);
registroAttivitaEntity.setNote("Caricamento fallito, rollback fallito");
registroAttivitaEntity.setDataFineInserimento(new Date());
registroAttivitaRepository.save(registroAttivitaEntity);

}
}
}

Expand Down Expand Up @@ -854,4 +887,33 @@ private List<ServiziAggiuntiDTO> removeFromList(List<ServiziAggiuntiDTO> lista,
return listaresult;
}

private void rollbackCaricamentoMassivo(Long idRegistroAttivita) throws Exception {
// prendo idRegistroAttività
// cancello tutti i servizio_x_cittadino per cod_caricamento uguale a idRegistroAttività
// cerco tutti i servizi tramite codInserimento e senza associazione su servizio_x_cittadino
// cerco tutti i questionari tramite codInserimento

// cancello da mongoDb tutti i servizi con id trovati dalla lista (id di mongo)
// cancello da mongoDb tutti i questionari con id trovati dalla lista (id di mongo)

// cancello tutti i questionario_compilato per cod_caricamento uguale a idRegistroAttività
// cancell tutti i tipologia_servizio per ogni servizio
// cancello tutti i servizi per cod_caricamento uguale a idRegistroAttivita

// try catch + aggiornamento registro attivita
servizioXCittadinoRepository.deleteAllByCodInserimento(idRegistroAttivita.toString());

List<ServizioEntity> listaServizi = servizioSqlRepository.findAllByCodInserimentoWithoutSXC(idRegistroAttivita.toString());
List<QuestionarioCompilatoEntity> listaQuestionari = questionarioCompilatoRepository.findByCodInserimento(idRegistroAttivita.toString());

servizioService.eliminaQuestionariMongoByListaQuestionari(listaQuestionari);
servizioService.eliminaServiziMongoByListaServizi(listaServizi);

questionarioCompilatoRepository.deleteAllByCodInserimento(idRegistroAttivita.toString());

servizioService.eliminaTipologiaServizioByListaServizi(listaServizi);

servizioService.eliminaServiziByListaServizi(listaServizi);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -586,4 +586,41 @@ public void eliminaServizioForce(@NotNull Long idServizio) {
this.servizioSQLService.cancellaServivio(servizioEntity);

}

@LogMethod
@LogExecutionTime
@Transactional
public void eliminaQuestionariMongoByListaQuestionari(List<QuestionarioCompilatoEntity> listaQuestionari){

for(QuestionarioCompilatoEntity questionario : listaQuestionari){
questionarioCompilatoMongoRepository
.deleteByIdQuestionarioTemplate(questionario.getId());
}

}

@LogMethod
@LogExecutionTime
@Transactional
public void eliminaServiziMongoByListaServizi(List<ServizioEntity> listaServizi){

for(ServizioEntity servizio : listaServizi){
this.sezioneQ3Repository.deleteByIdSezioneQ3(servizio.getIdTemplateCompilatoQ3());
}
}

public void eliminaTipologiaServizioByListaServizi(List<ServizioEntity> listaServizi){
// Cancello tipologie servizio
for (ServizioEntity servizio : listaServizi) {
tipologiaServizioRepository.deleteByIdServizio(servizio.getId());
}
}

public void eliminaServiziByListaServizi(List<ServizioEntity> listaServizi){

for(ServizioEntity servizio : listaServizi){
servizioSqlRepository.delete(servizio);
}

}
}

0 comments on commit b1f402d

Please sign in to comment.