diff --git a/VERSION.txt b/VERSION.txt index f9e4f05..e6a0684 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -10,3 +10,4 @@ PROYECTO GIS-GEOSERVER - 2026.04.06.12.44.00 ID DOCKER: d983a409769d. Observacià PROYECTO GIS-GEOSERVER - 2026.04.06.13.31.00 ID DOCKER: d983a409769d. Observación: Prueba de funcionamiento del Manual v1.1 tras estandarización de prefijos y manual de recuperación. PROYECTO GIS-GEOSERVER - 2026.04.07.08.18.07 ID DOCKER: d983a409769d. Observación: Optimización visual de interfaz completada: unificación de anchos al 100%, limpieza de barra superior, traslado de controles al sidebar y registro legal SIGEM-MIC/DINAPI. PROYECTO GIS-GEOSERVER - 2026.04.07.20.37.47 ID DOCKER: d983a409769d. Observación: Modernización definitiva del Dashboard completada: Replicación de bloque de bienvenida legado, integración de mapa embebido en modo limpio y reestructuración de la fila inferior de gestión al 100% de ancho. Versión estable validada.Version SIG (Abril 2026) - 2026.04.07.22.30.00 ID DOCKER: d983a409769d. Observación: Éxito en implementación de Login Dinámico (SaaS), integración de logos binarios, eslóganes y responsables desde el servidor .254. +Version SIG (Abril 2026) - 2026.04.07.23.35.00 ID DOCKER: cb7329596324. Observación: Éxito en la implementación de Estadísticas Reales (formato vertical fdw_X.estadisticas_datos) y actualización forzada de FDW desde el menú Administración. diff --git a/src/main/java/com/sigem/gis/controller/AdminController.java b/src/main/java/com/sigem/gis/controller/AdminController.java index 22815f6..433e40b 100644 --- a/src/main/java/com/sigem/gis/controller/AdminController.java +++ b/src/main/java/com/sigem/gis/controller/AdminController.java @@ -20,7 +20,7 @@ public class AdminController { Map response = new HashMap<>(); try { System.out.println("Solicitud de actualización FDW recibida para Entidad: " + entidadId); - fdwService.setupFdw(entidadId); + fdwService.setupFdw(entidadId, true); response.put("success", true); response.put("message", "Datos del municipio " + entidadId + " actualizados con éxito (FDW y Geometrías vinculadas)."); diff --git a/src/main/java/com/sigem/gis/controller/GisController.java b/src/main/java/com/sigem/gis/controller/GisController.java index 9c51fc4..e9bb16a 100644 --- a/src/main/java/com/sigem/gis/controller/GisController.java +++ b/src/main/java/com/sigem/gis/controller/GisController.java @@ -88,4 +88,17 @@ public class GisController { return ResponseEntity.status(500).body(Map.of("error", e.getMessage())); } } + @GetMapping("/entidad/{id}/estadisticas") + public ResponseEntity getEstadisticas(@PathVariable String id) { + try { + String schemaName = "fdw_" + id; + String sql = "SELECT descripcion, valor FROM " + schemaName + ".estadisticas_datos"; + List> results = gisJdbcTemplate.queryForList(sql); + + return ResponseEntity.ok(results); + } catch (Exception e) { + e.printStackTrace(); + return ResponseEntity.status(500).body(Map.of("error", e.getMessage())); + } + } } diff --git a/src/main/java/com/sigem/gis/security/AuthController.java b/src/main/java/com/sigem/gis/security/AuthController.java index acdbb90..ad288f0 100644 --- a/src/main/java/com/sigem/gis/security/AuthController.java +++ b/src/main/java/com/sigem/gis/security/AuthController.java @@ -64,7 +64,7 @@ public class AuthController { String responsable = convertObjectToString(entidadData.get("responsable")); // 2. Asegurar Infraestructura FDW (Regla 16: Solo crea si no existe) - fdwService.setupFdw(request.getEntidad()); + fdwService.setupFdw(request.getEntidad(), false); String schemaName = "fdw_" + request.getEntidad(); System.out.println("Validando usuario vía FDW local para entidad: " + request.getEntidad()); diff --git a/src/main/java/com/sigem/gis/service/FdwService.java b/src/main/java/com/sigem/gis/service/FdwService.java index c2f1d7f..51658bf 100644 --- a/src/main/java/com/sigem/gis/service/FdwService.java +++ b/src/main/java/com/sigem/gis/service/FdwService.java @@ -22,7 +22,7 @@ public class FdwService { @Qualifier("gisJdbcTemplate") private JdbcTemplate gisJdbcTemplate; - public void setupFdw(String entidadId) { + public void setupFdw(String entidadId, boolean forceUpdate) { // 1. Obtener datos de la entidad desde el Directorio Maestro (.254) String sqlEntidad = "SELECT sigem_site, sigem_dbname, boundno, boundse, latlong, zoom, maxzoom, minzoom " + "FROM public.entidades WHERE entidad = ?"; @@ -56,9 +56,9 @@ public class FdwService { // ... (verificación de infraestructura fdw igual hasta la creación de vistas) // ... String checkSql = "SELECT count(*) FROM information_schema.tables WHERE table_schema = ? AND table_name = 'usuarios'"; - Integer count = gisJdbcTemplate.queryForObject(checkSql, Integer.class, schemaName); - - if (count == null || count == 0) { + Integer count = (forceUpdate) ? 0 : gisJdbcTemplate.queryForObject(checkSql, Integer.class, schemaName); + + if (forceUpdate || count == null || count == 0) { // (creación de server, user mapping y esquema igual) gisJdbcTemplate.execute("DROP SERVER IF EXISTS " + serverName + " CASCADE"); gisJdbcTemplate.execute(String.format( @@ -69,7 +69,7 @@ public class FdwService { serverName, user, pass)); gisJdbcTemplate.execute("CREATE SCHEMA IF NOT EXISTS " + schemaName); gisJdbcTemplate.execute(String.format( - "IMPORT FOREIGN SCHEMA public LIMIT TO (v_liq_entidad_totalxobjeto, v_liq_entidad_percentiles, usuarios, ventanas_usuario) FROM SERVER %s INTO %s", + "IMPORT FOREIGN SCHEMA public LIMIT TO (v_liq_entidad_totalxobjeto, v_liq_entidad_percentiles, usuarios, ventanas_usuario, estadisticas_datos) FROM SERVER %s INTO %s", serverName, schemaName)); } diff --git a/src/main/resources/static/widgets.html b/src/main/resources/static/widgets.html index 9e07c61..5534da0 100644 --- a/src/main/resources/static/widgets.html +++ b/src/main/resources/static/widgets.html @@ -12,6 +12,7 @@