From ac454821c40841dcfd08e2d760a9e11b86e86a04 Mon Sep 17 00:00:00 2001 From: sgravina Date: Wed, 25 Sep 2024 15:38:08 +0200 Subject: [PATCH] fix(caricamento-excel): gestione migliorata controllo unicita servizio cittadino 20240925 --- .../repository/ServizioSqlRepository.java | 17 +++ .../service/ImportMassivoCSVService.java | 109 ++++++++---------- 2 files changed, 64 insertions(+), 62 deletions(-) diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioSqlRepository.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioSqlRepository.java index 70ad78833..deebdef7a 100644 --- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioSqlRepository.java +++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioSqlRepository.java @@ -329,4 +329,21 @@ Optional> findAllByDataServizioAndDurataServizioAndTipologi String durataServizio, String tipologiaServizio, EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey, String nome); Optional 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> findAllByDataServizioAndDurataServizioAndTipologiaServizioAndIdEnteSedeProgettoFacilitatoreAndIdCittadino( + Date dataServizio, + String durataServizio, String tipologiaServizio, + EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey, Long idCittadino); } \ No newline at end of file diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/ImportMassivoCSVService.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/ImportMassivoCSVService.java index ed6cf867f..e09f4f412 100644 --- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/ImportMassivoCSVService.java +++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/ImportMassivoCSVService.java @@ -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(), @@ -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(); } @@ -369,13 +370,18 @@ public ElaboratoCSVResponse buildResponse(List 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 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 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 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 @@ -678,19 +684,19 @@ public void uploadFile(ElaboratoCSVResponse elaboratoCSVResponse, Long registroA restTemplateS3Service.uploadDocument(presignedUrl, elaboratoCSVResponse.getFileContent()); } - private boolean controllaDataServizioProgettoValida(Optional servizioOpt, - ServiziElaboratiDTO servizioElaborato, Optional 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 servizioOpt, + // ServiziElaboratiDTO servizioElaborato, Optional 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 // optSezioneQ3Collection, int index) { @@ -783,11 +789,11 @@ private Optional 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 servizioOpt, ServizioRequest servizio, String idRegistroAttivita) { servizio.setCodInserimento(idRegistroAttivita); @@ -808,6 +814,22 @@ private List getServizioByDatiControllo(ServizioRequest servizio return new ArrayList<>(); } + private List getServizioByDatiControlloPerSingoloCittadino(ServizioRequest servizioRequest, + EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreKey, Long idCittadino) { + Optional> servizioOpt = servizioSqlRepository + .findAllByDataServizioAndDurataServizioAndTipologiaServizioAndIdEnteSedeProgettoFacilitatoreAndIdCittadino( + servizioRequest.getDataServizio(), + servizioRequest.getDurataServizio(), + String.join(", ", servizioRequest.getListaTipologiaServizi()), + enteSedeProgettoFacilitatoreKey, + idCittadino); + if (servizioOpt.isPresent() && !servizioOpt.get().isEmpty()) { + List listaServizi = servizioOpt.get(); + return listaServizi; + } + return new ArrayList<>(); + } + private Optional getServizioDaListaAggiunti(List serviziAggiuntiList, ServiziElaboratiDTO servizioElaborato) { @@ -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 optSezioneQ3Collection = sezioneQ3Respository.findById(servizioActual.getIdTemplateCompilatoQ3()); if (optSezioneQ3Collection.isPresent()) { // String descrizioneMongo = recuperaDescrizioneDaMongo(optSezioneQ3Collection);