Browse Source

Endpoints predios 11/16

master
akirwana 4 weeks ago
parent
commit
da38830a01
3 changed files with 474 additions and 20 deletions
  1. +92
    -5
      src/main/java/jumapacelaya/gob/mx/predios/controlador/PredioControlador.java
  2. +44
    -15
      src/main/java/jumapacelaya/gob/mx/predios/dto/PredioDTO.java
  3. +338
    -0
      src/main/java/jumapacelaya/gob/mx/predios/servicio/PredioServicio.java

+ 92
- 5
src/main/java/jumapacelaya/gob/mx/predios/controlador/PredioControlador.java View File

@ -1,10 +1,13 @@
package jumapacelaya.gob.mx.predios.controlador;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import io.micronaut.http.HttpResponse;
import io.micronaut.http.HttpStatus;
import io.micronaut.http.MutableHttpResponse;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.PathVariable;
@ -36,12 +39,96 @@ public class PredioControlador {
}
@Get("/atm/{referencia}")
public HttpResponse<?> getPredioATM(@PathVariable String referencia) {
public HttpResponse<?> obtenerPredioATM(@PathVariable String referencia) {
return predioServicio.obtenerPredioATM(referencia)
.<HttpResponse<?>>map(HttpResponse::ok)
.orElse(HttpResponse.notFound(
Map.of("message", "Predio no encontrado para referencia: " + referencia)
));
.<HttpResponse<?>>map(HttpResponse::ok)
.orElse(HttpResponse.notFound(
Map.of("message", "Predio no encontrado para referencia: " + referencia)
)
);
}
@Get("/apc/{valor}")
public HttpResponse<?> obtenerPredioAPC(String valor) {
Optional<PredioDTO> resultado = predioServicio.obtenerPredioAPC(valor);
return resultado
.<HttpResponse<?>>map(HttpResponse::ok)
.orElse(HttpResponse.notFound(Map.of("message", "Predio no encontrado")
));
}
@Get("/appots/{id}")
public HttpResponse<?> obtenerPredioAppOTs(Long id) {
return predioServicio.obtenerPredioAppOTs(id)
.<HttpResponse<?>>map(HttpResponse::ok)
.orElseGet(() -> {
Map<String, String> error = new HashMap<>();
error.put("message", "Predio AppOTs no encontrado");
return HttpResponse.status(HttpStatus.NOT_FOUND).body(error);
}
);
}
@Get("/direccion/{predioId}")
public HttpResponse<?> obtenerDireccionPredio(@PathVariable Long predioId) {
return predioServicio.obtenerDireccionPredio(predioId)
.<HttpResponse<?>>map(HttpResponse::ok)
.orElse(HttpResponse.notFound(
Map.of("message", "Predio no encontrado")
)
);
}
@Get("/direccion-cooper/{predioId}")
public HttpResponse<Map<String, String>> obtenerDireccionCooper(@PathVariable Long predioId) {
String mensaje = predioServicio.obtenerDireccionCooper(predioId);
return HttpResponse.ok(Map.of("message", mensaje));
}
@Get("/direccion-coopers/{predioId}")
public MutableHttpResponse<Map<String, Optional<String>>> obtenerDireccionCoopers(@PathVariable Long predioId) {
Optional<String> mensaje = predioServicio.obtenerDireccionCoopers(predioId);
return HttpResponse.ok(Map.of("message", mensaje));
}
@Get("/coordx/{predioId}")
public HttpResponse<Double> obtenerCoordX(@PathVariable Long predioId) {
return predioServicio.obtenerCoordX(predioId)
.map(HttpResponse::ok)
.orElse(HttpResponse.notFound());
}
@Get("/coordy/{predioId}")
public HttpResponse<Double> obtenerCoordY(@PathVariable Long predioId) {
return predioServicio.obtenerCoordY(predioId)
.map(HttpResponse::ok)
.orElse(HttpResponse.notFound());
}
@Get("/cliente/{predioId}")
public HttpResponse<Long> obtenerClienteId(@PathVariable Long predioId) {
return predioServicio.obtenerClienteId(predioId)
.map(HttpResponse::ok)
.orElse(HttpResponse.notFound());
}
@Get("/ot/{predioId}/{motivoId}")
public HttpResponse<Long> obtenerOT(@PathVariable Long predioId,
@PathVariable String motivoId) {
return predioServicio.obtenerOT(predioId, motivoId)
.map(HttpResponse::ok)
.orElse(HttpResponse.notFound()
);
}
@Get("/situacion-corte/{predioId}/{tipo}")
public HttpResponse<String> obtenerSituacionCorte(@PathVariable Long predioId,
@PathVariable String tipo) {
return predioServicio.obtenerSituacionCorte(predioId, tipo)
.map(HttpResponse::ok)
.orElse(HttpResponse.noContent()
);
}
}

+ 44
- 15
src/main/java/jumapacelaya/gob/mx/predios/dto/PredioDTO.java View File

@ -26,26 +26,15 @@ public class PredioDTO {
private Integer actividadId;
private String actividad;
private Double adeudoCortes;
private String tarifa;
// Constructor consulta predio
// Constructor general para todos los campos
public PredioDTO(Long predioId, Long clienteId, String contrato, String nombreCliente,
String direccion, String direccionMostrar, String direccionCorta, String telefono,
Double coordX, Double coordY, String zonaFactId, String serialMedidor,
String marcaMedidor, String modeloMedidor, String estadoPredioId,
String estadoPredio, String usoId, String uso, Integer actividadId,
String actividad) {
this(predioId, clienteId, contrato, nombreCliente, direccion, direccionMostrar, direccionCorta,
telefono, coordX, coordY, zonaFactId, serialMedidor, marcaMedidor, modeloMedidor,
estadoPredioId, estadoPredio, usoId, uso, actividadId, actividad, null);
}
// Constructor completo (para restPredioVar)
public PredioDTO(Long predioId, Long clienteId, String contrato, String nombreCliente,
String direccion, String direccionMostrar, String direccionCorta, String telefono,
Double coordX, Double coordY, String zonaFactId, String serialMedidor,
String marcaMedidor, String modeloMedidor, String estadoPredioId,
String estadoPredio, String usoId, String uso, Integer actividadId,
String actividad, Double adeudoCortes) {
String actividad, Double adeudoCortes, String tarifa) {
this.predioId = predioId;
this.clienteId = clienteId;
this.contrato = contrato;
@ -67,9 +56,46 @@ public class PredioDTO {
this.actividadId = actividadId;
this.actividad = actividad;
this.adeudoCortes = adeudoCortes;
this.tarifa = tarifa;
}
// Constructor para obtenerPredio
public PredioDTO(Long predioId, Long clienteId, String contrato, String nombreCliente,
String direccion, String direccionMostrar, String direccionCorta, String telefono,
Double coordX, Double coordY, String zonaFactId, String serialMedidor,
String marcaMedidor, String modeloMedidor, String estadoPredioId,
String estadoPredio, String usoId, String uso, Integer actividadId,
String actividad) {
this(predioId, clienteId, contrato, nombreCliente, direccion, direccionMostrar, direccionCorta,
telefono, coordX, coordY, zonaFactId, serialMedidor, marcaMedidor, modeloMedidor,
estadoPredioId, estadoPredio, usoId, uso, actividadId, actividad, null, null);
}
// Getters y setters
// Constructor para obtenerPredioVar
public PredioDTO(Long predioId, Long clienteId, String contrato, String nombreCliente,
String direccion, String direccionMostrar, String direccionCorta, String telefono,
Double coordX, Double coordY, String zonaFactId, String serialMedidor,
String marcaMedidor, String modeloMedidor, String estadoPredioId,
String estadoPredio, String usoId, String uso, Integer actividadId,
String actividad, Double adeudoCortes) {
this(predioId, clienteId, contrato, nombreCliente, direccion, direccionMostrar, direccionCorta,
telefono, coordX, coordY, zonaFactId, serialMedidor, marcaMedidor, modeloMedidor,
estadoPredioId, estadoPredio, usoId, uso, actividadId, actividad, adeudoCortes, null);
}
// Constructor para obtenerPredioAppOTs
public PredioDTO(Long predioId, Long clienteId, String contrato, String nombreCliente,
String direccion, String direccionMostrar, String direccionCorta, String telefono,
Double coordX, Double coordY, String zonaFactId, String serialMedidor,
String marcaMedidor, String modeloMedidor, String estadoPredioId,
String estadoPredio, String usoId, String uso, Integer actividadId,
String actividad, String tarifa) {
this(predioId, clienteId, contrato, nombreCliente, direccion, direccionMostrar, direccionCorta,
telefono, coordX, coordY, zonaFactId, serialMedidor, marcaMedidor, modeloMedidor,
estadoPredioId, estadoPredio, usoId, uso, actividadId, actividad, null, tarifa);
}
// Getters y Setters
public Long getPredioId() { return predioId; }
public void setPredioId(Long predioId) { this.predioId = predioId; }
@ -132,4 +158,7 @@ public class PredioDTO {
public Double getAdeudoCortes() { return adeudoCortes; }
public void setAdeudoCortes(Double adeudoCortes) { this.adeudoCortes = adeudoCortes; }
public String getTarifa() { return tarifa; }
public void setTarifa(String tarifa) { this.tarifa = tarifa; }
}

+ 338
- 0
src/main/java/jumapacelaya/gob/mx/predios/servicio/PredioServicio.java View File

@ -229,6 +229,7 @@ public class PredioServicio {
rs.getString("uso"),
rs.getInt("actividadid"),
rs.getString("actividad"),
null,
null
));
}
@ -240,4 +241,341 @@ public class PredioServicio {
return Optional.empty();
}
@ReadOnly
public Optional<PredioDTO> obtenerPredioAPC(String valor) {
String query = """
SELECT predioid, contrato, clienteid, c.nombre nomcliente,
fn_getdomicilio(p.direcid) direccion, fn_get_direccion(p.direcid) direccionmostrar,
fn_direccionshort(p.direcid) direccioncorta,
p.coordx, p.coordy, p.zonafactid, p.serialmed,
edopredioid, e.nombre edopredio, usoid, u.nombre uso,
actividadid, a.nombre actividad
FROM predios p
LEFT JOIN clientes c USING (clienteid)
LEFT JOIN estadospredio e USING(edopredioid)
LEFT JOIN usos u USING (usoid)
LEFT JOIN actividades a USING (usoid, actividadid)
WHERE (
(LENGTH(?) = 30 AND predioid = SUBSTR(?, 24, 6)) OR
(LENGTH(?) = 8 AND REGEXP_LIKE(contrato, ?)) OR
(LENGTH(?) <= 6 AND predioid = TO_NUMBER(?))
)
""";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
for (int i = 1; i <= 6; i++) {
stmt.setString(i, valor);
}
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return Optional.of(new PredioDTO(
rs.getLong("predioid"),
rs.getLong("clienteid"),
rs.getString("contrato"),
rs.getString("nomcliente"),
rs.getString("direccion"),
rs.getString("direccionmostrar"),
rs.getString("direccioncorta"),
null,
rs.getDouble("coordx"),
rs.getDouble("coordy"),
rs.getString("zonafactid"),
rs.getString("serialmed"),
null,
null,
rs.getString("edopredioid"),
rs.getString("edopredio"),
rs.getString("usoid"),
rs.getString("uso"),
rs.getInt("actividadid"),
rs.getString("actividad")
));
} else {
return Optional.empty();
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al consultar predio APC: " + e.getMessage(), e);
}
}
@ReadOnly
public Optional<PredioDTO> obtenerPredioAppOTs(Long predioId) {
String query = """
SELECT predioid, contrato, clienteid, c.nombre nomcliente,
fn_getdomicilio(p.direcid) direccion, fn_get_direccion(p.direcid) direccionmostrar,
fn_direccionshort(p.direcid) direccioncorta,
p.coordx, p.coordy, p.zonafactid, p.serialmed,
edopredioid, e.nombre edopredio, usoid, u.nombre uso,
actividadid, a.nombre actividad, fn_get_tarifa(p.predioid) tarifa
FROM predios p
LEFT JOIN clientes c USING (clienteid)
LEFT JOIN estadospredio e USING (edopredioid)
LEFT JOIN usos u USING (usoid)
LEFT JOIN actividades a USING (usoid, actividadid)
WHERE predioid = ?
""";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return Optional.of(new PredioDTO(
rs.getLong("predioid"),
rs.getLong("clienteid"),
rs.getString("contrato"),
rs.getString("nomcliente"),
rs.getString("direccion"),
rs.getString("direccionmostrar"),
rs.getString("direccioncorta"),
null,
rs.getDouble("coordx"),
rs.getDouble("coordy"),
rs.getString("zonafactid"),
rs.getString("serialmed"),
null,
null,
rs.getString("edopredioid"),
rs.getString("edopredio"),
rs.getString("usoid"),
rs.getString("uso"),
rs.getInt("actividadid"),
rs.getString("actividad"),
null,
rs.getString("tarifa")
)
);
} else {
return Optional.empty();
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al consultar predio AppOTs: " + e.getMessage(), e);
}
}
@ReadOnly
public Optional<PredioDTO> obtenerDireccionPredio(Long predioId) {
String query = """
SELECT predioid, contrato, clienteid, c.nombre nomcliente,
fn_getdomicilio(p.direcid) direccion,
fn_get_direccion(p.direcid) direccionmostrar,
fn_direccionshort(p.direcid) direccioncorta
FROM predios p
LEFT JOIN clientes c USING (clienteid)
WHERE predioid = ?
""";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return Optional.of(new PredioDTO(
rs.getLong("predioid"),
rs.getLong("clienteid"),
rs.getString("contrato"),
rs.getString("nomcliente"),
rs.getString("direccion"),
rs.getString("direccionmostrar"),
rs.getString("direccioncorta"),
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null
));
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al obtener dirección del predio: " + e.getMessage(), e);
}
return Optional.empty();
}
@ReadOnly
public String obtenerDireccionCooper(Long predioId) {
String query = "SELECT fn_direccionshort(p.direcid) AS direccion FROM predios p WHERE predioid = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String direccion = rs.getString("direccion");
if (direccion != null && !direccion.isBlank()) {
return "TU DIRECCIÓN ES: " + direccion;
}
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al obtener la dirección corta del predio: " + e.getMessage(), e);
}
return "El número de predio: " + predioId + " no existe. Por favor verificalo en tu recibo.";
}
@ReadOnly
public Optional<String> obtenerDireccionCoopers(Long predioId) {
String query = "SELECT fn_direccionshort(p.direcid) AS direccion FROM predios p WHERE predioid = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return Optional.ofNullable(rs.getString("direccion"));
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al obtener la dirección corta cruda: " + e.getMessage(), e);
}
return Optional.empty();
}
@ReadOnly
public Optional<Double> obtenerCoordX(Long predioId) {
String query = "SELECT coordx FROM predios WHERE predioid = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return Optional.ofNullable(rs.getDouble("coordx"));
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al obtener coordx: " + e.getMessage(), e);
}
return Optional.empty();
}
@ReadOnly
public Optional<Double> obtenerCoordY(Long predioId) {
String query = "SELECT coordy FROM predios WHERE predioid = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return Optional.ofNullable(rs.getDouble("coordy"));
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al obtener coordy: " + e.getMessage(), e);
}
return Optional.empty();
}
@ReadOnly
public Optional<Long> obtenerClienteId(Long predioId) {
String query = "SELECT clienteid FROM predios WHERE predioid = ?";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return Optional.of(rs.getLong("clienteid"));
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al obtener clienteid: " + e.getMessage(), e);
}
return Optional.empty();
}
@ReadOnly
public Optional<Long> obtenerOT(Long predioId, String motivoId) {
String query = """
SELECT MAX(otid) otid
FROM ordentrabajoenc
WHERE predioid = ?
AND motivoid = ?
AND fechaprecierre IS NULL
AND fechaanulacion IS NULL
""";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
stmt.setString(2, motivoId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
long otid = rs.getLong("otid");
if (!rs.wasNull()) {
return Optional.of(otid);
}
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al obtener OT: " + e.getMessage(), e);
}
return Optional.empty();
}
@ReadOnly
public Optional<String> obtenerSituacionCorte(Long predioId, String tipo) {
String query = "SELECT fn_getsituacioncorte(?, ?) AS situacion FROM dual";
try (Connection connection = dataSource.getConnection();
PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setLong(1, predioId);
stmt.setString(2, tipo);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String situacion = rs.getString("situacion");
if (situacion != null && !situacion.trim().isEmpty() &&
!situacion.equalsIgnoreCase("Sin Corte") &&
!situacion.equalsIgnoreCase("Reconexion Solicitada")) {
return Optional.of(situacion);
}
}
}
} catch (SQLException e) {
throw new RuntimeException("Error al consultar situación de corte: " + e.getMessage(), e);
}
return Optional.empty();
}
}

Loading…
Cancel
Save