Skip to content

Commit

Permalink
fix(caricamento-excel): gestione migliorata controllo unicita servizi…
Browse files Browse the repository at this point in the history
…o cittadino 20240925
  • Loading branch information
sgravinadxc committed Sep 25, 2024
1 parent 64cc93e commit 5e9c02b
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -329,4 +329,21 @@ Optional<List<ServizioEntity>> findAllByDataServizioAndDurataServizioAndTipologi
String durataServizio, String tipologiaServizio, EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey, String nome);

Optional<ServizioEntity> findById(Long idServizio);

@Query(value = "SELECT *\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 = :#{#enteSedeProgettoFacilitatoreKey.idEnte}\n" +
"AND s.id_progetto = :#{#enteSedeProgettoFacilitatoreKey.idProgetto}\n" +
"AND s.id_sede = :#{#enteSedeProgettoFacilitatoreKey.idSede}\n" +
"AND s.id_facilitatore = :#{#enteSedeProgettoFacilitatoreKey.idFacilitatore}\n", nativeQuery = true)
Optional<List<ServizioEntity>> findAllByDataServizioAndDurataServizioAndTipologiaServizioAndIdEnteSedeProgettoFacilitatoreAndIdCittadino(
Date dataServizio,
String durataServizio, String tipologiaServizio,
EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey, Long idCittadino);
}
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ public void process(ElaboratoCSVRequest csvRequest, String uuid, PolicyEnum poli
log.error(e.getMessage());
registroAttivitaEntity.setJobStatus(JobStatusEnum.FAIL_S3_UPLOAD);
registroAttivitaEntity.setNote("Upload del file su s3 Fallito");
registroAttivitaRepository.save(registroAttivitaEntity);
registroAttivitaEntity.setDataFineInserimento(new Date());
registroAttivitaService.saveRegistroAttivita(registroAttivitaEntity);
return;
}
aggiornaRegistroAttivita(totaleRighe, serviziScartati.size(), serviziValidati.size(),
Expand All @@ -117,7 +118,7 @@ public void process(ElaboratoCSVRequest csvRequest, String uuid, PolicyEnum poli
} catch (Exception e) {
registroAttivitaEntity.setJobStatus(JobStatusEnum.GENERIC_FAIL);
registroAttivitaEntity.setDataFineInserimento(new Date());
registroAttivitaRepository.save(registroAttivitaEntity);
registroAttivitaService.saveRegistroAttivita(registroAttivitaEntity);
log.info("Errore generico durante l'elaborazione del file, id RegistroAttivitaEntity: {}", registroAttivitaEntity.getId());
e.printStackTrace();
}
Expand Down Expand Up @@ -369,13 +370,18 @@ public ElaboratoCSVResponse buildResponse(List<ServiziElaboratiDTO> serviziValid
idQuestionario = nuovoCittadinoDTO.getCittadinoEntity().getQuestionarioCompilato().get(0).getId();
if(!nuovoCittadinoDTO.isNuovoCittadino() && policy.equals(PolicyEnum.SCD)){
// Se cittadino non è stato appena inserito, controllare che esso non sia associato ad un servizio identico a quello appena inserito
List<ServizioXCittadinoEntity> servizioXCittadinoList = servizioXCittadinoRepository.findById_IdCittadino(nuovoCittadinoDTO.getCittadinoEntity().getId());
if(CollectionUtils.isNotEmpty(servizioXCittadinoList)){
// recuperando su MySQL i servizi a lui associato che combaciano con le caratteristiche
ServizioRequest servizioRequest = servizioElaborato.getServizioRequest();
EnteSedeProgettoFacilitatoreEntity enteSedeProgettoFacilitatore = enteSedeProgettoFacilitatoreRepository.existsByChiave(
servizioRequest.getCfUtenteLoggato(),
servizioRequest.getIdEnteServizio(),
servizioRequest.getIdProgetto(),
servizioRequest.getIdSedeServizio());
List<ServizioEntity> listaServizi = getServizioByDatiControlloPerSingoloCittadino(servizioElaborato.getServizioRequest(), enteSedeProgettoFacilitatore.getId(), nuovoCittadinoDTO.getCittadinoEntity().getId());
if(CollectionUtils.isNotEmpty(listaServizi)){
// controllare uguaglianza per ogni servizio con servizio appena inserito
Boolean isStessoServizio = false;
for(ServizioXCittadinoEntity servizioXCittadinoEntity : servizioXCittadinoList){
Optional<ServizioEntity> servizioActualOpt = servizioSqlRepository.findById(servizioXCittadinoEntity.getId().getIdServizio());
ServizioEntity servizioEntity = servizioActualOpt.get();
for(ServizioEntity servizioEntity : listaServizi){
isStessoServizio = checkUguaglianzaServizio(servizioEntity, servizioElaborato);
if(isStessoServizio){
// servizio_x_cittadino duplicato, rollback
Expand Down Expand Up @@ -678,19 +684,19 @@ public void uploadFile(ElaboratoCSVResponse elaboratoCSVResponse, Long registroA
restTemplateS3Service.uploadDocument(presignedUrl, elaboratoCSVResponse.getFileContent());
}

private boolean controllaDataServizioProgettoValida(Optional<ServizioEntity> servizioOpt,
ServiziElaboratiDTO servizioElaborato, Optional<ProgettoEntity> progettoEntity) {
if (servizioOpt.isPresent()) {
ServizioEntity servizio = servizioOpt.get();
return servizio.getDataServizio().after(progettoEntity.get().getDataInizioProgetto()) &&
servizio.getDataServizio().before(progettoEntity.get().getDataFineProgetto());
} else {
return servizioElaborato.getServizioRequest().getDataServizio()
.after(progettoEntity.get().getDataInizioProgetto()) &&
servizioElaborato.getServizioRequest().getDataServizio()
.before(progettoEntity.get().getDataFineProgetto());
}
}
// private boolean controllaDataServizioProgettoValida(Optional<ServizioEntity> servizioOpt,
// ServiziElaboratiDTO servizioElaborato, Optional<ProgettoEntity> progettoEntity) {
// if (servizioOpt.isPresent()) {
// ServizioEntity servizio = servizioOpt.get();
// return servizio.getDataServizio().after(progettoEntity.get().getDataInizioProgetto()) &&
// servizio.getDataServizio().before(progettoEntity.get().getDataFineProgetto());
// } else {
// return servizioElaborato.getServizioRequest().getDataServizio()
// .after(progettoEntity.get().getDataInizioProgetto()) &&
// servizioElaborato.getServizioRequest().getDataServizio()
// .before(progettoEntity.get().getDataFineProgetto());
// }
// }

// private String recuperaDescrizioneDaMongo(Optional<SezioneQ3Collection>
// optSezioneQ3Collection, int index) {
Expand Down Expand Up @@ -783,11 +789,11 @@ private Optional<ServizioEntity> getServizioByCriteria(ServizioRequest servizioR
return Optional.empty();
}

private boolean existsByServizioAndEnteSedeProgettoFacilitatoreKey(Long idServizio,
EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey) {
return servizioSqlRepository.existsByIdAndIdEnteSedeProgettoFacilitatore(idServizio,
enteSedeProgettoFacilitatoreKey);
}
// private boolean existsByServizioAndEnteSedeProgettoFacilitatoreKey(Long idServizio,
// EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey) {
// return servizioSqlRepository.existsByIdAndIdEnteSedeProgettoFacilitatore(idServizio,
// enteSedeProgettoFacilitatoreKey);
// }

private ServizioEntity salvaServizio(Optional<ServizioEntity> servizioOpt, ServizioRequest servizio, String idRegistroAttivita) {
servizio.setCodInserimento(idRegistroAttivita);
Expand All @@ -808,6 +814,22 @@ private List<ServizioEntity> getServizioByDatiControllo(ServizioRequest servizio
return new ArrayList<>();
}

private List<ServizioEntity> getServizioByDatiControlloPerSingoloCittadino(ServizioRequest servizioRequest,
EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey, Long idCittadino) {
Optional<List<ServizioEntity>> servizioOpt = servizioSqlRepository
.findAllByDataServizioAndDurataServizioAndTipologiaServizioAndIdEnteSedeProgettoFacilitatoreAndIdCittadino(
servizioRequest.getDataServizio(),
servizioRequest.getDurataServizio(),
String.join(", ", servizioRequest.getListaTipologiaServizi()),
enteSedeProgettoFacilitatoreKey,
idCittadino);
if (servizioOpt.isPresent() && !servizioOpt.get().isEmpty()) {
List<ServizioEntity> listaServizi = servizioOpt.get();
return listaServizi;
}
return new ArrayList<>();
}

private Optional<ServizioEntity> getServizioDaListaAggiunti(List<ServiziAggiuntiDTO> serviziAggiuntiList,
ServiziElaboratiDTO servizioElaborato) {

Expand Down Expand Up @@ -887,43 +909,6 @@ public PolicyEnum recuperaPolicydaProgetto(Long idProgetto){
private Boolean checkUguaglianzaServizio(ServizioEntity servizioActual,
ServiziElaboratiDTO servizioElaborato) {

if (!servizioElaborato.getServizioRequest().getDataServizio()
.equals(servizioActual.getDataServizio())) {
return false;
}

if (!servizioElaborato.getServizioRequest().getDurataServizio()
.equals(servizioActual.getDurataServizio())) {
return false;
}

if (!servizioElaborato.getServizioRequest().getListaTipologiaServizi().equals(
servizioActual.getListaTipologiaServizi())) {
return false;
}

// if (!(servizioElaborato.getServizioRequest().getCfUtenteLoggato()
// .equals(servizioActual.getCfUtenteLoggato()))) {
// isStessoServizio = false;
// }

if (!(servizioElaborato.getServizioRequest().getIdEnteServizio()
.equals(servizioActual.getIdEnteSedeProgettoFacilitatore().getIdEnte()))) {
return false;
}

if (!(servizioElaborato.getServizioRequest().getIdProgetto()
.equals(servizioActual.getIdEnteSedeProgettoFacilitatore().getIdProgetto()))) {
return false;
}

if (!(servizioElaborato.getServizioRequest().getIdSedeServizio()
.equals(servizioActual.getIdEnteSedeProgettoFacilitatore().getIdSede()))) {
return false;
}

// MONGODB

Optional<SezioneQ3Collection> optSezioneQ3Collection = sezioneQ3Respository.findById(servizioActual.getIdTemplateCompilatoQ3());
if (optSezioneQ3Collection.isPresent()) {
// String descrizioneMongo = recuperaDescrizioneDaMongo(optSezioneQ3Collection);
Expand Down

0 comments on commit 5e9c02b

Please sign in to comment.