diff --git a/src/main/java/jumapacelaya/gob/mx/cobranza/controlador/CobranzaControlador.java b/src/main/java/jumapacelaya/gob/mx/cobranza/controlador/CobranzaControlador.java index 37f529f..dceb08c 100644 --- a/src/main/java/jumapacelaya/gob/mx/cobranza/controlador/CobranzaControlador.java +++ b/src/main/java/jumapacelaya/gob/mx/cobranza/controlador/CobranzaControlador.java @@ -1,8 +1,12 @@ package jumapacelaya.gob.mx.cobranza.controlador; +import java.util.List; +import java.util.Optional; + import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; import jakarta.inject.Inject; +import jumapacelaya.gob.mx.cobranza.dto.detalleCarteraDTO; import jumapacelaya.gob.mx.cobranza.servicio.CobranzaServicio; @Controller("/cobranza") @@ -16,4 +20,16 @@ public class CobranzaControlador { return servicio.obtenerTotalPredios(); } + @Get("/tblcarteravencida/detallepredios{?page,size}") + public List obtenerDetalleCartera(Optional page, Optional size) { + int pageNumber = page.orElse(1); + int pageSize = size.orElse(10); + return servicio.obtenerDetalleCartera(pageNumber, pageSize); + } + + @Get("/tblcarteravencida/detallepredios/{predioid}") + public List obtenerDetallePorPredio(Long predioid) { + return servicio.obtenerDetallePorPredio(predioid); + } + } diff --git a/src/main/java/jumapacelaya/gob/mx/cobranza/dto/detalleCarteraDTO.java b/src/main/java/jumapacelaya/gob/mx/cobranza/dto/detalleCarteraDTO.java new file mode 100644 index 0000000..8ad0d32 --- /dev/null +++ b/src/main/java/jumapacelaya/gob/mx/cobranza/dto/detalleCarteraDTO.java @@ -0,0 +1,294 @@ +package jumapacelaya.gob.mx.cobranza.dto; + +import java.math.BigDecimal; + +public class detalleCarteraDTO { + private Long predio; + private String nomcliente; + private String direccion; + private String colonia; + private String zona; + private String uso; + private String tarifa; + private String actividad; + private String habitado; + private Integer vip; + private String metsuministro; + private String medidor; + private String estado; + private String estadogestion; + private String estadocobranza; + private String estadocorte; + private String cortefectivo; + private String estadoconvfc; + private String estadoconvfv; + private Integer factvencidas; + private Integer antiguedad; + private BigDecimal saldoiva; + private BigDecimal saldototal; + private Integer r7, a7, r8, a8, r11, a11, r12, a12; + private Integer r13, a13, r14, a14, r15, a15, r16, a16; + private Integer r17, a17, r112, a112, r116, a116; + private Integer reconexion; + private Integer factventa; + private String conceptosfv; + private BigDecimal adeudofv; + private String programa; + private String fid; + + // Getters y setters + public Long getPredio() { return predio; } + public void setPredio(Long predio) { + this.predio = predio; + } + + public String getNomcliente() { return nomcliente; } + public void setNomcliente(String nomcliente) { + this.nomcliente = nomcliente; + } + + public String getDireccion() { return direccion; } + public void setDireccion(String direccion) { + this.direccion = direccion; + } + + public String getColonia() { return colonia; } + public void setColonia(String colonia) { + this.colonia = colonia; + } + + public String getZona() { return zona; } + public void setZona(String zona) { + this.zona = zona; + } + + public String getUso() { return uso; } + public void setUso(String uso) { + this.uso = uso; + } + + public String getTarifa() { return tarifa; } + public void setTarifa(String tarifa) { + this.tarifa = tarifa; + } + + public String getActividad() { return actividad; } + public void setActividad(String actividad) { + this.actividad = actividad; + } + + public String getHabitado() { return habitado; } + public void setHabitado(String habitado) { + this.habitado = habitado; + } + + public Integer getVip() { return vip; } + public void setVip(Integer vip) { + this.vip = vip; + } + + public String getMetsuministro() { return metsuministro; } + public void setMetsuministro(String metsuministro) { + this.metsuministro = metsuministro; + } + + public String getMedidor() { return medidor; } + public void setMedidor(String medidor) { + this.medidor = medidor; + } + + public String getEstado() { return estado; } + public void setEstado(String estado) { + this.estado = estado; + } + + public String getEstadogestion() { return estadogestion; } + public void setEstadogestion(String estadogestion) { + this.estadogestion = estadogestion; + } + + public String getEstadocobranza() { return estadocobranza; } + public void setEstadocobranza(String estadocobranza) { + this.estadocobranza = estadocobranza; + } + + public String getEstadocorte() { return estadocorte; } + public void setEstadocorte(String estadocorte) { + this.estadocorte = estadocorte; + } + + public String getCortefectivo() { return cortefectivo; } + public void setCortefectivo(String cortefectivo) { + this.cortefectivo = cortefectivo; + } + + public String getEstadoconvfc() { return estadoconvfc; } + public void setEstadoconvfc(String estadoconvfc) { + this.estadoconvfc = estadoconvfc; + } + + public String getEstadoconvfv() { return estadoconvfv; } + public void setEstadoconvfv(String estadoconvfv) { + this.estadoconvfv = estadoconvfv; + } + + public Integer getFactvencidas() { return factvencidas; } + public void setFactvencidas(Integer factvencidas) { + this.factvencidas = factvencidas; + } + + public Integer getAntiguedad() { return antiguedad; } + public void setAntiguedad(Integer antiguedad) { + this.antiguedad = antiguedad; + } + + public BigDecimal getSaldoiva() { return saldoiva; } + public void setSaldoiva(BigDecimal saldoiva) { + this.saldoiva = saldoiva; + } + + public BigDecimal getSaldototal() { return saldototal; } + public void setSaldototal(BigDecimal saldototal) { + this.saldototal = saldototal; + } + + public Integer getR7() { return r7; } + public void setR7(Integer r7) { + this.r7 = r7; + } + + public Integer getA7() { return a7; } + public void setA7(Integer a7) { + this.a7 = a7; + } + + public Integer getR8() { return r8; } + public void setR8(Integer r8) { + this.r8 = r8; + } + + public Integer getA8() { return a8; } + public void setA8(Integer a8) { + this.a8 = a8; + } + + public Integer getR11() { return r11; } + public void setR11(Integer r11) { + this.r11 = r11; + } + + public Integer getA11() { return a11; } + public void setA11(Integer a11) { + this.a11 = a11; + } + + public Integer getR12() { return r12; } + public void setR12(Integer r12) { + this.r12 = r12; + } + + public Integer getA12() { return a12; } + public void setA12(Integer a12) { + this.a12 = a12; + } + + public Integer getR13() { return r13; } + public void setR13(Integer r13) { + this.r13 = r13; + } + + public Integer getA13() { return a13; } + public void setA13(Integer a13) { + this.a13 = a13; + } + + public Integer getR14() { return r14; } + public void setR14(Integer r14) { + this.r14 = r14; + } + + public Integer getA14() { return a14; } + public void setA14(Integer a14) { + this.a14 = a14; + } + + public Integer getR15() { return r15; } + public void setR15(Integer r15) { + this.r15 = r15; + } + + public Integer getA15() { return a15; } + public void setA15(Integer a15) { + this.a15 = a15; + } + + public Integer getR16() { return r16; } + public void setR16(Integer r16) { + this.r16 = r16; + } + + public Integer getA16() { return a16; } + public void setA16(Integer a16) { + this.a16 = a16; + } + + public Integer getR17() { return r17; } + public void setR17(Integer r17) { + this.r17 = r17; + } + + public Integer getA17() { return a17; } + public void setA17(Integer a17) { + this.a17 = a17; + } + + public Integer getR112() { return r112; } + public void setR112(Integer r112) { + this.r112 = r112; + } + + public Integer getA112() { return a112; } + public void setA112(Integer a112) { + this.a112 = a112; + } + + public Integer getR116() { return r116; } + public void setR116(Integer r116) { + this.r116 = r116; + } + + public Integer getA116() { return a116; } + public void setA116(Integer a116) { + this.a116 = a116; + } + + public Integer getReconexion() { return reconexion; } + public void setReconexion(Integer reconexion) { + this.reconexion = reconexion; + } + + public Integer getFactventa() { return factventa; } + public void setFactventa(Integer factventa) { + this.factventa = factventa; + } + + public String getConceptosfv() { return conceptosfv; } + public void setConceptosfv(String conceptosfv) { + this.conceptosfv = conceptosfv; + } + + public BigDecimal getAdeudofv() { return adeudofv; } + public void setAdeudofv(BigDecimal adeudofv) { + this.adeudofv = adeudofv; + } + + public String getPrograma() { return programa; } + public void setPrograma(String programa) { + this.programa = programa; + } + + public String getFid() { return fid; } + public void setFid(String fid) { + this.fid = fid; + } +} diff --git a/src/main/java/jumapacelaya/gob/mx/cobranza/servicio/CobranzaServicio.java b/src/main/java/jumapacelaya/gob/mx/cobranza/servicio/CobranzaServicio.java index 614dca8..49970cd 100644 --- a/src/main/java/jumapacelaya/gob/mx/cobranza/servicio/CobranzaServicio.java +++ b/src/main/java/jumapacelaya/gob/mx/cobranza/servicio/CobranzaServicio.java @@ -1,11 +1,17 @@ package jumapacelaya.gob.mx.cobranza.servicio; import jakarta.inject.Singleton; +import jumapacelaya.gob.mx.cobranza.dto.detalleCarteraDTO; import javax.sql.DataSource; + +import io.micronaut.transaction.annotation.Transactional; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; @Singleton public class CobranzaServicio { @@ -16,6 +22,7 @@ public class CobranzaServicio { this.dataSource = dataSource; } + @Transactional public int obtenerTotalPredios() { String query = "SELECT COUNT(*) AS TotalPredios FROM cobranza.tblcarteravencida"; try (Connection connection = dataSource.getConnection(); @@ -29,7 +36,150 @@ public class CobranzaServicio { } } catch (Exception e) { - throw new RuntimeException("Error al obtener total de predios en cartera vencida", e); + throw new RuntimeException("Error al obtener total de predios en cartera vencida" + + e.getMessage(), e); + } + } + + @Transactional + public List obtenerDetalleCartera(int offset, int limit) { + String query = "SELECT * FROM cobranza.tblcarteravencida OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + List lista = new ArrayList<>(); + + try (Connection connection = dataSource.getConnection(); + PreparedStatement stmt = connection.prepareStatement(query)) { + + stmt.setInt(1, offset); + stmt.setInt(2, limit); + + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + detalleCarteraDTO dto = new detalleCarteraDTO(); + dto.setPredio(rs.getLong("PREDIO")); + dto.setNomcliente(rs.getString("NOMCLIENTE")); + dto.setDireccion(rs.getString("DIRECCION")); + dto.setColonia(rs.getString("COLONIA")); + dto.setZona(rs.getString("ZONA")); + dto.setUso(rs.getString("USO")); + dto.setTarifa(rs.getString("TARIFA")); + dto.setActividad(rs.getString("ACTIVIDAD")); + dto.setHabitado(rs.getString("HABITADO")); + dto.setVip(rs.getInt("VIP")); + dto.setMetsuministro(rs.getString("METSUMINISTRO")); + dto.setMedidor(rs.getString("MEDIDOR")); + dto.setEstado(rs.getString("ESTADO")); + dto.setEstadogestion(rs.getString("ESTADOGESTION")); + dto.setEstadocobranza(rs.getString("ESTADOCOBRANZA")); + dto.setEstadocorte(rs.getString("ESTADOCORTE")); + dto.setCortefectivo(rs.getString("CORTEEFECTIVO")); + dto.setEstadoconvfc(rs.getString("ESTADOCONVFC")); + dto.setEstadoconvfv(rs.getString("ESTADOCONVFV")); + dto.setFactvencidas(rs.getInt("FACTVENCIDAS")); + dto.setAntiguedad(rs.getInt("ANTIGUEDAD")); + dto.setSaldoiva(rs.getBigDecimal("SALDOIVA")); + dto.setSaldototal(rs.getBigDecimal("SALDOTOTAL")); + dto.setR7(rs.getInt("R7")); + dto.setA7(rs.getInt("A7")); + dto.setR8(rs.getInt("R8")); + dto.setA8(rs.getInt("A8")); + dto.setR11(rs.getInt("R11")); + dto.setA11(rs.getInt("A11")); + dto.setR12(rs.getInt("R12")); + dto.setA12(rs.getInt("A12")); + dto.setR13(rs.getInt("R13")); + dto.setA13(rs.getInt("A13")); + dto.setR14(rs.getInt("R14")); + dto.setA14(rs.getInt("A14")); + dto.setR15(rs.getInt("R15")); + dto.setA15(rs.getInt("A15")); + dto.setR16(rs.getInt("R16")); + dto.setA16(rs.getInt("A16")); + dto.setR17(rs.getInt("R17")); + dto.setA17(rs.getInt("A17")); + dto.setR112(rs.getInt("R112")); + dto.setA112(rs.getInt("A112")); + dto.setR116(rs.getInt("R116")); + dto.setA116(rs.getInt("A116")); + dto.setReconexion(rs.getInt("RECONEXION")); + dto.setFactventa(rs.getInt("FACTVENTA")); + dto.setConceptosfv(rs.getString("CONCEPTOSFV")); + dto.setAdeudofv(rs.getBigDecimal("ADEUDOFV")); + dto.setPrograma(rs.getString("PROGRAMA")); + dto.setFid(rs.getString("FID")); + + lista.add(dto); + } + + } catch (Exception e) { + throw new RuntimeException("Error al obtener detalle de cartera vencida", e); } + + return lista; + } + + @Transactional + public List obtenerDetallePorPredio(Long predioId) { + String query = "SELECT * FROM cobranza.tblcarteravencida WHERE predio = ?"; + List lista = new ArrayList<>(); + + try (Connection connection = dataSource.getConnection(); + PreparedStatement stmt = connection.prepareStatement(query)) { + + stmt.setLong(1, predioId); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + detalleCarteraDTO dto = new detalleCarteraDTO(); + dto.setPredio(rs.getLong("PREDIO")); + dto.setNomcliente(rs.getString("NOMCLIENTE")); + dto.setDireccion(rs.getString("DIRECCION")); + dto.setColonia(rs.getString("COLONIA")); + dto.setZona(rs.getString("ZONA")); + dto.setUso(rs.getString("USO")); + dto.setTarifa(rs.getString("TARIFA")); + dto.setActividad(rs.getString("ACTIVIDAD")); + dto.setHabitado(rs.getString("HABITADO")); + dto.setVip(rs.getInt("VIP")); + dto.setMetsuministro(rs.getString("METSUMINISTRO")); + dto.setMedidor(rs.getString("MEDIDOR")); + dto.setEstado(rs.getString("ESTADO")); + dto.setEstadogestion(rs.getString("ESTADOGESTION")); + dto.setEstadocobranza(rs.getString("ESTADOCOBRANZA")); + dto.setEstadocorte(rs.getString("ESTADOCORTE")); + dto.setCortefectivo(rs.getString("CORTEEFECTIVO")); + dto.setEstadoconvfc(rs.getString("ESTADOCONVFC")); + dto.setEstadoconvfv(rs.getString("ESTADOCONVFV")); + dto.setFactvencidas(rs.getInt("FACTVENCIDAS")); + dto.setAntiguedad(rs.getInt("ANTIGUEDAD")); + dto.setSaldoiva(rs.getBigDecimal("SALDOIVA")); + dto.setSaldototal(rs.getBigDecimal("SALDOTOTAL")); + dto.setR7(rs.getInt("R7")); dto.setA7(rs.getInt("A7")); + dto.setR8(rs.getInt("R8")); dto.setA8(rs.getInt("A8")); + dto.setR11(rs.getInt("R11")); dto.setA11(rs.getInt("A11")); + dto.setR12(rs.getInt("R12")); dto.setA12(rs.getInt("A12")); + dto.setR13(rs.getInt("R13")); dto.setA13(rs.getInt("A13")); + dto.setR14(rs.getInt("R14")); dto.setA14(rs.getInt("A14")); + dto.setR15(rs.getInt("R15")); dto.setA15(rs.getInt("A15")); + dto.setR16(rs.getInt("R16")); dto.setA16(rs.getInt("A16")); + dto.setR17(rs.getInt("R17")); dto.setA17(rs.getInt("A17")); + dto.setR112(rs.getInt("R112")); dto.setA112(rs.getInt("A112")); + dto.setR116(rs.getInt("R116")); dto.setA116(rs.getInt("A116")); + dto.setReconexion(rs.getInt("RECONEXION")); + dto.setFactventa(rs.getInt("FACTVENTA")); + dto.setConceptosfv(rs.getString("CONCEPTOSFV")); + dto.setAdeudofv(rs.getBigDecimal("ADEUDOFV")); + dto.setPrograma(rs.getString("PROGRAMA")); + dto.setFid(rs.getString("FID")); + + lista.add(dto); + } + + } catch (Exception e) { + throw new RuntimeException("Error al obtener detalle por predio", e); + } + + return lista; } + } diff --git a/src/main/java/jumapacelaya/gob/mx/infowall/controlador/InfowallControlador.java b/src/main/java/jumapacelaya/gob/mx/infowall/controlador/InfowallControlador.java new file mode 100644 index 0000000..db61cae --- /dev/null +++ b/src/main/java/jumapacelaya/gob/mx/infowall/controlador/InfowallControlador.java @@ -0,0 +1,32 @@ +package jumapacelaya.gob.mx.infowall.controlador; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import io.micronaut.http.annotation.Get; +import jakarta.inject.Inject; +import jumapacelaya.gob.mx.infowall.dto.totalPagosHoyDTO; +import jumapacelaya.gob.mx.infowall.servicio.InfowallServicio; + +public class InfowallControlador { + + @Inject + InfowallServicio servicio; + + @Get("/totalpagoshoy/{entidad}/{punto}") + public totalPagosHoyDTO obtenerTotalPagosHoy(String entidad, String punto) { + List entidadIds = Arrays.stream(entidad.split(",")) + .map(String::trim) + .map(Integer::parseInt) + .collect(Collectors.toList()); + + List puntoIds = Arrays.stream(punto.split(",")) + .map(String::trim) + .map(Integer::parseInt) + .collect(Collectors.toList()); + + return servicio.obtenerTotalPagosHoy(entidadIds, puntoIds); + } + +} diff --git a/src/main/java/jumapacelaya/gob/mx/infowall/dto/totalPagosHoyDTO.java b/src/main/java/jumapacelaya/gob/mx/infowall/dto/totalPagosHoyDTO.java new file mode 100644 index 0000000..8eea339 --- /dev/null +++ b/src/main/java/jumapacelaya/gob/mx/infowall/dto/totalPagosHoyDTO.java @@ -0,0 +1,23 @@ +package jumapacelaya.gob.mx.infowall.dto; + +import java.math.BigDecimal; + +public class totalPagosHoyDTO { + private BigDecimal totalpagado; + private int numeropagos; + + public totalPagosHoyDTO(BigDecimal totalpagado, int numeropagos) { + this.totalpagado = totalpagado; + this.numeropagos = numeropagos; + } + + public BigDecimal getTotalpagado() { return totalpagado; } + public void setTotalpagado(BigDecimal totalpagado) { + this.totalpagado = totalpagado; + } + + public int getNumeropagos() { return numeropagos; } + public void setNumeropagos(int numeropagos) { + this.numeropagos = numeropagos; + } +} diff --git a/src/main/java/jumapacelaya/gob/mx/infowall/repositorio/InfowallRepositorio.java b/src/main/java/jumapacelaya/gob/mx/infowall/repositorio/InfowallRepositorio.java new file mode 100644 index 0000000..263a11b --- /dev/null +++ b/src/main/java/jumapacelaya/gob/mx/infowall/repositorio/InfowallRepositorio.java @@ -0,0 +1,5 @@ +package jumapacelaya.gob.mx.infowall.repositorio; + +public class InfowallRepositorio { + +} diff --git a/src/main/java/jumapacelaya/gob/mx/infowall/servicio/InfowallServicio.java b/src/main/java/jumapacelaya/gob/mx/infowall/servicio/InfowallServicio.java new file mode 100644 index 0000000..19192dc --- /dev/null +++ b/src/main/java/jumapacelaya/gob/mx/infowall/servicio/InfowallServicio.java @@ -0,0 +1,61 @@ +package jumapacelaya.gob.mx.infowall.servicio; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.List; +import java.util.stream.Collectors; + +import javax.sql.DataSource; + +import io.micronaut.transaction.annotation.Transactional; +import jumapacelaya.gob.mx.infowall.dto.totalPagosHoyDTO; + +public class InfowallServicio { + + private final DataSource dataSource; + + public InfowallServicio(DataSource dataSource) { + this.dataSource = dataSource; + } + + @Transactional + public totalPagosHoyDTO obtenerTotalPagosHoy(List entidadIds, List puntoIds) { + String query = "SELECT SUM(total) AS totalpagado, COUNT(total) AS numeropagos " + + "FROM pagosenc p " + + "INNER JOIN lotesenc l USING (numloteid) " + + "WHERE fechaing BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE + 1) " + + "AND entidadid IN (%s) AND puntoid IN (%s)"; + + String entidadPlaceholders = entidadIds.stream().map(id -> "?").collect(Collectors.joining(",")); + String puntoPlaceholders = puntoIds.stream().map(id -> "?").collect(Collectors.joining(",")); + + query = String.format(query, entidadPlaceholders, puntoPlaceholders); + + try (Connection connection = dataSource.getConnection(); + PreparedStatement stmt = connection.prepareStatement(query)) { + + int index = 1; + for (Integer id : entidadIds) { + stmt.setInt(index++, id); + } + for (Integer id : puntoIds) { + stmt.setInt(index++, id); + } + + ResultSet rs = stmt.executeQuery(); + if (rs.next()) { + BigDecimal total = rs.getBigDecimal("totalpagado"); + int count = rs.getInt("numeropagos"); + return new totalPagosHoyDTO(total != null ? total : BigDecimal.ZERO, count); + } else { + return new totalPagosHoyDTO(BigDecimal.ZERO, 0); + } + + } catch (Exception e) { + throw new RuntimeException("Error al obtener total de pagos de hoy", e); + } + } + +}