Compare commits
3 Commits
9e5e8551f0
...
ea1f92c7e2
| Author | SHA1 | Date | |
|---|---|---|---|
| ea1f92c7e2 | |||
| 95c0dacd1e | |||
| 8efe46fea8 |
@@ -6,6 +6,7 @@ import io.gmss.fiscad.exceptions.*;
|
||||
import io.gmss.fiscad.interfaces.infocad.metier.EnqueteService;
|
||||
import io.gmss.fiscad.interfaces.infocad.metier.ParcelleService;
|
||||
import io.gmss.fiscad.paylaods.ApiResponse;
|
||||
import io.gmss.fiscad.paylaods.FiltreParcelle;
|
||||
import io.gmss.fiscad.paylaods.request.EnqueteTraitementPayLoad;
|
||||
import io.gmss.fiscad.paylaods.request.FiltreEnquetePayLoad;
|
||||
import io.gmss.fiscad.paylaods.request.crudweb.EnquetePayLoadWeb;
|
||||
@@ -30,7 +31,7 @@ import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping(value = "api/parcelle", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@SecurityRequirement(name = "bearer")
|
||||
//@SecurityRequirement(name = "bearer")
|
||||
@Tag(name = "Parcelle")
|
||||
@CrossOrigin(origins = "*")
|
||||
//@PreAuthorize("hasRole('ADMIN') or hasRole('SUPERVISEUR') or hasRole('ENQUETEUR')")
|
||||
@@ -90,6 +91,7 @@ public class ParcelleController {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK);
|
||||
} catch (Exception e) {
|
||||
|
||||
logger.error(e.getLocalizedMessage());
|
||||
return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK);
|
||||
}
|
||||
@@ -230,6 +232,39 @@ public class ParcelleController {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/all-paged/multi-criteres")
|
||||
public ResponseEntity<?> getAllParcelleFiltrePaged(@CurrentUser UserPrincipal currentUser, @RequestParam int pageNo, @RequestParam int pageSize, @RequestBody FiltreParcelle filtreParcelle) {
|
||||
try {
|
||||
Pageable pageable = PageRequest.of(pageNo, pageSize);
|
||||
if(currentUser==null)
|
||||
return new ResponseEntity<>(
|
||||
new ApiResponse<>(true,null, "Vous ne pouvez pas accéder à cette ressource"),
|
||||
HttpStatus.OK
|
||||
);
|
||||
Long userId = currentUser.getUser().getId();
|
||||
|
||||
return new ResponseEntity<>(
|
||||
new ApiResponse<>(true, parcelleService.getParcelleByMultiFiltre(userId,filtreParcelle,pageable), "Liste des enquetes chargée avec succès."),
|
||||
HttpStatus.OK
|
||||
);
|
||||
} catch (HttpClientErrorException.MethodNotAllowed e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
return new ResponseEntity<>(new ApiResponse(false, null, "Method POST/GET is required."), HttpStatus.OK);
|
||||
} catch (NotFoundException | BadRequestException | MyFileNotFoundException | ResourceNotFoundException |
|
||||
FileStorageException e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
return new ResponseEntity<>(new ApiResponse(false, null, e.getMessage()), HttpStatus.OK);
|
||||
} catch (NullPointerException e) {
|
||||
logger.error(e.getLocalizedMessage());
|
||||
return new ResponseEntity<>(new ApiResponse(false, null, "Null value has been detected {" + e.getMessage() + "}."), HttpStatus.OK);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
logger.error(e.getLocalizedMessage());
|
||||
return new ResponseEntity<>(new ApiResponse(false, null, "An error has been occur and the content is {" + e.getMessage() + "}."), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/all/by-quartier-id/{quartierId}")
|
||||
public ResponseEntity<?> getAllParcelleByQuartier(@CurrentUser UserPrincipal currentUser,@PathVariable Long quartierId) {
|
||||
try {
|
||||
|
||||
@@ -10,6 +10,7 @@ import io.gmss.fiscad.exceptions.BadRequestException;
|
||||
import io.gmss.fiscad.exceptions.NotFoundException;
|
||||
import io.gmss.fiscad.interfaces.decoupage.SecteurService;
|
||||
import io.gmss.fiscad.interfaces.infocad.metier.ParcelleService;
|
||||
import io.gmss.fiscad.paylaods.FiltreParcelle;
|
||||
import io.gmss.fiscad.paylaods.request.FiltreParcellePayLoad;
|
||||
import io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb;
|
||||
import io.gmss.fiscad.paylaods.response.dataTableResponse.ParcelleDataTableResponse;
|
||||
@@ -174,12 +175,20 @@ public class ParcelleServiceImpl implements ParcelleService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<ParcelleDataTableResponse> getParcelleDataTableListByUserId(Long userId, Pageable pageable) {
|
||||
List<Long> secteurIds = getSecteurIdListForUser(userId);
|
||||
Page<ParcelleDataTableResponse> parcelleDataTableResponses=parcelleRepository.getParcelleDataTableResponse(secteurIds,pageable);
|
||||
|
||||
return parcelleDataTableResponses ;
|
||||
@Override
|
||||
public Page<ParcellePayLoadWeb> getParcelleByMultiFiltre(Long userId, FiltreParcelle filtreParcelle, Pageable pageable) {
|
||||
List<Long> secteurIds = getSecteurIdListForUser(userId);
|
||||
System.out.println(secteurIds.size());
|
||||
if (secteurIds == null || secteurIds.isEmpty()) {
|
||||
throw new IllegalArgumentException("Vous n'êtes pas autorisés à consulter ces parcelles");
|
||||
}
|
||||
return parcelleRepository.filtrerParcellesNative(
|
||||
filtreParcelle,
|
||||
secteurIds,
|
||||
pageable
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
private List<Long> getSecteurIdListForUser(Long userId) {
|
||||
@@ -190,22 +199,8 @@ public class ParcelleServiceImpl implements ParcelleService {
|
||||
return secteurIds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<ParcelleDataTableResponse> getParcelleDataTableListByMultiFiltre(Long userId, FiltreParcellePayLoad filtreParcellePayLoad, Pageable pageable) {
|
||||
List<Long> secteurIds = getSecteurIdListForUser(userId);
|
||||
//
|
||||
// return parcelleRepository.findAll(
|
||||
// ParcelleSpecification.filtre(filtreParcellePayLoad, secteurIds),
|
||||
// pageable
|
||||
// );
|
||||
|
||||
|
||||
|
||||
Page<ParcelleDataTableResponse> parcelleDataTableResponses=parcelleRepository.getParcelleDataTableResponse(secteurIds,pageable);
|
||||
|
||||
return parcelleDataTableResponses ;
|
||||
}
|
||||
|
||||
private Parcelle getParcelleFromPayload(Parcelle parcelle, ParcellePayLoadWeb parcellePayLoadWeb) {
|
||||
if(parcellePayLoadWeb.getRueId()!=null) {
|
||||
Optional<Rue> optionalRue = rueRepository.findById(parcellePayLoadWeb.getRueId());
|
||||
|
||||
@@ -3,6 +3,7 @@ package io.gmss.fiscad.interfaces.infocad.metier;
|
||||
import io.gmss.fiscad.entities.infocad.metier.Parcelle;
|
||||
import io.gmss.fiscad.exceptions.BadRequestException;
|
||||
import io.gmss.fiscad.exceptions.NotFoundException;
|
||||
import io.gmss.fiscad.paylaods.FiltreParcelle;
|
||||
import io.gmss.fiscad.paylaods.request.FiltreParcellePayLoad;
|
||||
import io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb;
|
||||
import io.gmss.fiscad.paylaods.response.dataTableResponse.ParcelleDataTableResponse;
|
||||
@@ -33,9 +34,5 @@ public interface ParcelleService {
|
||||
List<ParcellePayLoadWeb> getParcelleListByRueToDto(Long userId,Long rueId);
|
||||
Page<ParcellePayLoadWeb> getParcelleListByRuePageableToDto(Long userId,Long rueId,Pageable pageable);
|
||||
|
||||
|
||||
|
||||
|
||||
Page<ParcelleDataTableResponse> getParcelleDataTableListByUserId(Long userId, Pageable pageable);
|
||||
Page<ParcelleDataTableResponse> getParcelleDataTableListByMultiFiltre(Long userId, FiltreParcellePayLoad filtreParcellePayLoad, Pageable pageable);
|
||||
Page<ParcellePayLoadWeb> getParcelleByMultiFiltre(Long userId, FiltreParcelle filtreParcelle, Pageable pageable);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import java.util.Date;
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class FiltreParcelle {
|
||||
private Long quartierId;
|
||||
private String nup;
|
||||
private String nupProvisoir;
|
||||
@Enumerated(EnumType.STRING)
|
||||
@@ -24,4 +25,6 @@ public class FiltreParcelle {
|
||||
private String nc;
|
||||
private Long structureId;
|
||||
private String numeroTitreFoncier;
|
||||
private String ifu;
|
||||
private String npi;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package io.gmss.fiscad.paylaods.request.crudweb;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class ParcellePayLoadWeb {
|
||||
private Long id;
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package io.gmss.fiscad.persistence.customrepository;
|
||||
|
||||
import io.gmss.fiscad.paylaods.FiltreParcelle;
|
||||
import io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ParcelleRepositoryCustom {
|
||||
Page<ParcellePayLoadWeb> filtrerParcellesNative(
|
||||
FiltreParcelle filtre,
|
||||
List<Long> secteurIds,
|
||||
Pageable pageable
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
package io.gmss.fiscad.persistence.customrepository;
|
||||
|
||||
import io.gmss.fiscad.enums.StatutEnquete;
|
||||
import io.gmss.fiscad.paylaods.FiltreParcelle;
|
||||
import io.gmss.fiscad.paylaods.request.crudweb.ParcellePayLoadWeb;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.EnumType;
|
||||
import jakarta.persistence.Enumerated;
|
||||
import jakarta.persistence.Query;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageImpl;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
||||
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
|
||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class ParcelleRepositoryCustomImpl implements ParcelleRepositoryCustom {
|
||||
private final EntityManager em;
|
||||
@Autowired
|
||||
private NamedParameterJdbcTemplate jdbcTemplate;
|
||||
|
||||
@Override
|
||||
public Page<ParcellePayLoadWeb> filtrerParcellesNative(
|
||||
FiltreParcelle filtre,
|
||||
List<Long> secteurIds,
|
||||
Pageable pageable) {
|
||||
|
||||
String baseSql = """
|
||||
WITH derniere_enquete AS (
|
||||
SELECT DISTINCT ON (e.parcelle_id)
|
||||
e.id,
|
||||
e.parcelle_id,
|
||||
e.date_enquete,
|
||||
e.statut_enquete,
|
||||
e.personne_id
|
||||
FROM enquete e
|
||||
ORDER BY e.parcelle_id, e.date_enquete DESC
|
||||
)
|
||||
SELECT
|
||||
p.id as id,
|
||||
p.q as q,
|
||||
p.i as i,
|
||||
p.p as p,
|
||||
p.nup as nup,
|
||||
p.nup_provisoire as nupProvisoire,
|
||||
p.numero_titre_foncier as numeroTitreFoncier,
|
||||
p.longitude as longitude,
|
||||
p.latitude as latitude,
|
||||
p.altitude as altitude,
|
||||
p.superficie as superficie,
|
||||
p.observation as observation,
|
||||
p.situation_geographique as situationGeographique,
|
||||
p.num_entree_parcelle as numEntreeParcelle,
|
||||
|
||||
q.id as quartierId,
|
||||
q.code as quartierCode,
|
||||
q.nom as quartierNom,
|
||||
|
||||
nd.id as natureId,
|
||||
nd.libelle as natureLibelle,
|
||||
|
||||
td.id as typeId,
|
||||
td.libelle as typeLibelle,
|
||||
|
||||
r.id as rueId,
|
||||
r.numero as rueNumero,
|
||||
r.nom as rueNom,
|
||||
|
||||
pers.id as personneId,
|
||||
pers.ifu as ifu,
|
||||
pers.npi as npi,
|
||||
pers.nom as nom,
|
||||
pers.prenom as prenom,
|
||||
pers.raison_sociale as raisonSociale,
|
||||
|
||||
de.id as enqueteId
|
||||
|
||||
FROM parcelle p
|
||||
LEFT JOIN quartier q ON q.id = p.quartier_id
|
||||
LEFT JOIN nature_domaine nd ON nd.id = p.nature_domaine_id
|
||||
LEFT JOIN type_domaine td ON td.id = p.type_domaine_id
|
||||
LEFT JOIN rue r ON r.id = p.rue_id
|
||||
LEFT JOIN derniere_enquete de ON de.parcelle_id = p.id
|
||||
LEFT JOIN personne pers ON pers.id = de.personne_id
|
||||
INNER JOIN secteur_decoupage sd ON sd.quartier_id = p.quartier_id
|
||||
WHERE sd.secteur_id IN (:secteurIds)
|
||||
""";
|
||||
|
||||
StringBuilder where = new StringBuilder();
|
||||
MapSqlParameterSource params = new MapSqlParameterSource();
|
||||
params.addValue("secteurIds", secteurIds);
|
||||
|
||||
if (filtre.getNup() != null && !filtre.getNup().isBlank()) {
|
||||
where.append(" AND LOWER(p.nup) LIKE LOWER(:nup)");
|
||||
params.addValue("nup", "%" + filtre.getNup() + "%");
|
||||
}
|
||||
|
||||
if (filtre.getNup() != null && !filtre.getNup().isBlank()) {
|
||||
where.append(" AND LOWER(p.nup_provisoir) LIKE LOWER(:nupProvisoir)");
|
||||
params.addValue("nupProvisoir", "%" + filtre.getNup() + "%");
|
||||
}
|
||||
|
||||
if (filtre.getNumeroTitreFoncier() != null) {
|
||||
where.append(" AND p.numero_titre_foncier = :numeroTitreFoncier");
|
||||
params.addValue("numeroTitreFoncier", filtre.getNumeroTitreFoncier());
|
||||
}
|
||||
|
||||
if (filtre.getStatus() != null) {
|
||||
where.append(" AND de.statut_enquete = :status");
|
||||
params.addValue("status", filtre.getStatus().name());
|
||||
}
|
||||
|
||||
// if (filtre.getStructureId() != null) {
|
||||
// where.append(" AND de.structure_id = :structureId");
|
||||
// params.addValue("structureId", filtre.getStructureId());
|
||||
// }
|
||||
|
||||
if (filtre.getQuartierId() != null) {
|
||||
where.append(" AND p.quartier_id = :quartierId");
|
||||
params.addValue("quartierId", filtre.getQuartierId());
|
||||
}
|
||||
|
||||
if (filtre.getQ() != null) {
|
||||
where.append(" AND TRIM(p.q) = :q");
|
||||
params.addValue("q", filtre.getQ().trim());
|
||||
}
|
||||
|
||||
if (filtre.getI() != null) {
|
||||
where.append(" AND TRIM(p.i) = :i");
|
||||
params.addValue("i", filtre.getI().trim());
|
||||
}
|
||||
|
||||
if (filtre.getP() != null) {
|
||||
where.append(" AND TRIM(p.p) = :p");
|
||||
params.addValue("p", filtre.getP().trim());
|
||||
}
|
||||
|
||||
if (filtre.getNc() != null) {
|
||||
where.append(" AND TRIM(pers.nc) = :nc");
|
||||
params.addValue("nc", filtre.getNc().trim());
|
||||
}
|
||||
if (filtre.getIfu() != null) {
|
||||
where.append(" AND pers.ifu = :ifu");
|
||||
params.addValue("ifu", filtre.getIfu());
|
||||
}
|
||||
if (filtre.getNpi() != null) {
|
||||
where.append(" AND pers.npi = :npi");
|
||||
params.addValue("npi", filtre.getNpi());
|
||||
}
|
||||
|
||||
String pagination = " ORDER BY p.id LIMIT :limit OFFSET :offset";
|
||||
|
||||
params.addValue("limit", pageable.getPageSize());
|
||||
params.addValue("offset", pageable.getOffset());
|
||||
|
||||
List<ParcellePayLoadWeb> content = jdbcTemplate.query(
|
||||
baseSql + where + pagination,
|
||||
params,
|
||||
new BeanPropertyRowMapper<>(ParcellePayLoadWeb.class)
|
||||
);
|
||||
|
||||
// Count query
|
||||
Long total = jdbcTemplate.queryForObject(
|
||||
"SELECT COUNT(*) FROM (" + baseSql + where + ") as count_query",
|
||||
params,
|
||||
Long.class
|
||||
);
|
||||
|
||||
return new PageImpl<>(content, pageable, total);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import io.gmss.fiscad.paylaods.response.dataTableResponse.ParcelleDataTableRespo
|
||||
import io.gmss.fiscad.paylaods.response.statistique.StatistiqueTypeNombreResponse;
|
||||
import io.gmss.fiscad.paylaods.response.restoration.ParcellePayLoadRestor;
|
||||
import io.gmss.fiscad.paylaods.response.restoration.ParcelleStatsProjectionUnSecteur;
|
||||
import io.gmss.fiscad.persistence.customrepository.ParcelleRepositoryCustom;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
@@ -16,7 +17,7 @@ import org.springframework.data.repository.query.Param;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface ParcelleRepository extends JpaRepository<Parcelle, Long>, JpaSpecificationExecutor<Parcelle> {
|
||||
public interface ParcelleRepository extends JpaRepository<Parcelle, Long>, JpaSpecificationExecutor<Parcelle>, ParcelleRepositoryCustom {
|
||||
Optional<Parcelle> findFirstByExternalKeyAndTerminal_Id(Long externalKey, Long TerminalId);
|
||||
Optional<Parcelle> findByMobileDataId(Long id);
|
||||
@Query(value = "Select " +
|
||||
|
||||
Reference in New Issue
Block a user