Files
fiscad/src/main/java/io/gmss/fiscad/implementations/statistiques/StatistiquesServiceImpl.java

133 lines
6.7 KiB
Java

package io.gmss.fiscad.implementations.statistiques;
import io.gmss.fiscad.entities.decoupage.Secteur;
import io.gmss.fiscad.entities.user.User;
import io.gmss.fiscad.enums.StatutEnquete;
import io.gmss.fiscad.interfaces.decoupage.SecteurService;
import io.gmss.fiscad.interfaces.statistique.StatistiquesService;
import io.gmss.fiscad.interfaces.user.UserService;
import io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb;
import io.gmss.fiscad.paylaods.response.statistique.*;
import io.gmss.fiscad.persistence.repositories.infocad.metier.EnqueteRepository;
import io.gmss.fiscad.persistence.repositories.infocad.metier.ParcelleRepository;
import io.gmss.fiscad.persistence.repositories.infocad.parametre.PersonneRepository;
import io.gmss.fiscad.persistence.repositories.rfu.metier.BatimentRepository;
import io.gmss.fiscad.persistence.repositories.rfu.metier.EnqueteBatimentRepository;
import io.gmss.fiscad.persistence.repositories.rfu.metier.EnqueteUniteLogementRepository;
import io.gmss.fiscad.persistence.repositories.rfu.metier.UniteLogementRepository;
import lombok.AllArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class StatistiquesServiceImpl implements StatistiquesService {
private Authentication authentication;
private final UserService userService;
private final EnqueteRepository enqueteRepository;
private final ParcelleRepository parcelleRepository;
private final BatimentRepository batimentRepository;
private final UniteLogementRepository uniteLogementRepository;
private final PersonneRepository personneRepository;
private final SecteurService secteurService;
private final EnqueteBatimentRepository enqueteBatimentRepository;
private final EnqueteUniteLogementRepository enqueteUniteLogementRepository;
public StatistiquesServiceImpl(UserService userService, EnqueteRepository enqueteRepository, ParcelleRepository parcelleRepository, BatimentRepository batimentRepository, UniteLogementRepository uniteLogementRepository, PersonneRepository personneRepository, SecteurService secteurService, EnqueteBatimentRepository enqueteBatimentRepository, EnqueteUniteLogementRepository enqueteUniteLogementRepository) {
this.userService = userService;
this.enqueteRepository = enqueteRepository;
this.parcelleRepository = parcelleRepository;
this.batimentRepository = batimentRepository;
this.uniteLogementRepository = uniteLogementRepository;
this.personneRepository = personneRepository;
this.secteurService = secteurService;
this.enqueteBatimentRepository = enqueteBatimentRepository;
this.enqueteUniteLogementRepository = enqueteUniteLogementRepository;
}
@Override
public List<StatEnqueteParStatutResponse> getStatEnqueteParStatut() {
String userName = "";
List<StatEnqueteParStatutResponse> statEnqueteParStatutResponse = new ArrayList<>();
try {
authentication = SecurityContextHolder.getContext().getAuthentication();
userName = authentication.getName();
User user = userService.getUserByUsername(userName);
statEnqueteParStatutResponse = user.isAdmin() ? enqueteRepository.getStatEnqueteParStatut() : enqueteRepository.getStatEnqueteParStatut(user.getId());
return statEnqueteParStatutResponse;
} catch (Exception e) {
return new ArrayList<>();
}
}
@Override
public List<StatEnqueteAdminDecoupageResponse> getStatEnqueteAdminDecoupage(Long idCommune) {
return enqueteRepository.getStatEnqueteParDecoupage(idCommune);
}
@Override
public List<StatEnqueteAdminStructureResponse> getStatEnqueteAdminStructure() {
return enqueteRepository.getStatEnqueteParStructure();
}
@Override
public List<StatEnqueteParBlocResponse> getStatBloc() {
String userName = "";
try {
authentication = SecurityContextHolder.getContext().getAuthentication();
userName = authentication.getName();
User user = userService.getUserByUsername(userName);
return enqueteRepository.getStatEnqueteParBloc(user.getId());
} catch (Exception e) {
return new ArrayList<>();
}
}
@Override
public StatNombreTotalObjet getStatNombreTotalObjet(String codeDecoupageAdmin) {
StatNombreTotalObjet statNombreTotalObjet = new StatNombreTotalObjet();
List<StatistiqueTypeNombreResponse> statistiqueTypeNombreRespons = parcelleRepository.getParcelleBatieResponse(codeDecoupageAdmin);
Long nombreBatiment= batimentRepository.countByParcelle_Quartier_CodeLike(codeDecoupageAdmin+"%");
Long nombreUniteLogement= uniteLogementRepository.countByBatiment_Parcelle_Quartier_CodeLike(codeDecoupageAdmin+"%");
statistiqueTypeNombreRespons.forEach(statistiqueTypeNombreResponse -> {
if(statistiqueTypeNombreResponse.getType().equals("BATIES")){
statNombreTotalObjet.setNombreParcelleBatie(statistiqueTypeNombreResponse.getNombre());
}
if(statistiqueTypeNombreResponse.getType().equals("NON BATIES")){
statNombreTotalObjet.setNombreParcelleNonBatie(statistiqueTypeNombreResponse.getNombre());
}
});
statNombreTotalObjet.setNombreBatiments(nombreBatiment);
statNombreTotalObjet.setNombreUniteLogement(nombreUniteLogement);
return statNombreTotalObjet;
}
@Override
public List<StatistiqueTypeNombreResponse> getStatNombrePersonneParCategorie() {
return personneRepository.getNombrePersonnesResponse();
}
@Override
public NombreEnquetesParObjet getStatNombreEnqueteParObjetUserConnect(Long userId, String statutEnquete) {
NombreEnquetesParObjet nombreEnquetesParObjet= new NombreEnquetesParObjet();
List<Secteur> secteurs= secteurService.getListSecteurUserId(userId);
List<Long> secteurIds = secteurs.stream()
.map(Secteur::getId)
.toList();
nombreEnquetesParObjet.setNombreEnqueteUniteLogement(enqueteUniteLogementRepository.getNombreEnqueteUniteLogementByUserConnecte(secteurIds,statutEnquete));
nombreEnquetesParObjet.setNombreEnqueteParcelle(enqueteRepository.getNombreEnqueteByUserConnecte(secteurIds,statutEnquete));
nombreEnquetesParObjet.setNombreEnqueteBatiment(enqueteBatimentRepository.getNombreEnqueteBatimentByUserConnecte(secteurIds,statutEnquete));
return nombreEnquetesParObjet;
}
}