Sistema de Gestión de Equipamiento Turístico Compartido

Contexto del Proyecto

La expansión del sector turístico, combinada con el auge de la economía colaborativa, ha motivado el desarrollo de plataformas para compartir equipamiento. Los modelos tradicionales de alquiler presentan ineficiencias en la utilización de recursos y una gestión operativa limitada. La adquisición directa de equipo especializado para uso ocasional representa un gasto significativo para el usuario final, lo que resulta en periodos prolongados de inactividad de los recursos.

Este sistema propone una solución basada en tecnologías web para centralizar la oferta y demanda. Permite a los usuarios listar y acceder a una variedad de equipamientos (acampada, deportes de nieve, buceo, etc.) a través de una interfaz digital, superando las restricciones geográficas y horarias de los locales físicos. La integración de tecnologías como GPS e IoT facilita el rastreo en tiempo real y la gestión del estado de los equipos.

El impulso hacia la sostenibilidad es otro factor clave. Compartir equipos incrementa drásticamente su ciclo de vida útil, reduciendo la necesidad de producción nueva y la huella de carbono asociada. La plataforma incorpora algoritmos de logística inteligente para optimizar las rutas de distribución, minimizando el impacto ambiental del transporte.

El desarrollo tecnológico actual, con redes móviles de alta velocidad, servicios en la nube y análisis de datos, proporciona la base para una aplicación robusta y escalable. La evolución de los hábitos de consumo, especialmente entre las nuevas generaciones que priorizan el acceso sobre la propiedad, crea un mercado favorable para este tipo de soluciones.

Entorno de Desarrollo

  • Lenguaje: Java (JDK 1.8)
  • Framework Backend: Spring Boot
  • Servidor de Aplicaciones: Apache Tomcat 7
  • Base de Datos: MySQL 5.7
  • Herramientas: IDE (Eclipse/IntelliJ), Navicat, Maven 3.3.9

Las rutas de acceso por defecto son:

  • Administración: http://localhost:8080/nombre-proyecto/admin/dist/index.html
  • Portal público: http://localhost:8080/nombre-proyecto/front/dist/index.html

Credenciales de administrador por defecto: admin / admin.

Tecnologías Principales

Java: Lenguaje orientado a objetos y multiplataforma. Su arquitectura modular y sus capacidades de recolección de basura y gestión de excepciones favorecen el desarrollo de aplicaciones estables y mantenibles. El polimorfismo y la herencia son fundamentales para diseñar sistemas extensibles.

Spring Boot: Framework que acelera el desarrollo de aplicaciones Spring al proporcionar configuración automática y un ecosistema integrado de bibliotecas. Reduce la complejidad del boilerplate, permitiendo a los desarrolladores enfocares en la lógica de negocio.

MySQL: Sistema de gestión de bases de datos relacionales reconocido por su rendimiento, fiabilidad y sencillez. Es ampliamente adoptado para aplicaciones web debido a su eficiencia en consultas y su robusto modelo de seguridad.

Fragmentos de Código Clave

Controlador para Manejo de Archivos (Java)

package com.gestor;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/archivos")
public class ControladorArchivos {

    private final String RUTA_BASE_SUBIDA = "uploads/";

    @Autowired
    private ServicioConfiguracion servicioConfig;

    @PostMapping("/subir")
    public ResponseEntity<RespuestaArchivo> subirDocumento(@RequestParam("documento") MultipartFile archivo) {
        if (archivo.isEmpty()) {
            return ResponseEntity.badRequest().build();
        }

        try {
            String nombreOriginal = archivo.getOriginalFilename();
            String extension = nombreOriginal.substring(nombreOriginal.lastIndexOf("."));
            String nombreUnico = UUID.randomUUID().toString() + extension;

            Path rutaDestino = Paths.get(RUTA_BASE_SUBIDA + nombreUnico);
            Files.createDirectories(rutaDestino.getParent());
            Files.write(rutaDestino, archivo.getBytes());

            RespuestaArchivo respuesta = new RespuestaArchivo(nombreUnico, "Archivo almacenado exitosamente.");
            return ResponseEntity.ok(respuesta);

        } catch (IOException e) {
            return ResponseEntity.internalServerError().build();
        }
    }

    @GetMapping("/descargar/{nombreArchivo}")
    public ResponseEntity<Resource> obtenerArchivo(@PathVariable String nombreArchivo) {
        try {
            Path ruta = Paths.get(RUTA_BASE_SUBIDA).resolve(nombreArchivo).normalize();
            Resource recurso = new UrlResource(ruta.toUri());

            if (recurso.exists()) {
                return ResponseEntity.ok()
                        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + recurso.getFilename() + "\"")
                        .body(recurso);
            } else {
                return ResponseEntity.notFound().build();
            }
        } catch (IOException e) {
            return ResponseEntity.internalServerError().build();
        }
    }
}

Redirección del Portal de Administración (JSP)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String rutaContexto = request.getContextPath();
    String urlRedireccion = rutaContexto + "/admin/dist/index.html";
%>
<html>
<head>
    <title>Redireccionando al Panel de Control</title>
</head>
<body>
    <script>
        window.location.href = "<%= urlRedireccion %>";
    </script>
</body>
</html>

Proceso de Validación

El sistema fue sometido a un ciclo de pruebas integral en un entorno de servidores local. Se implementaron estrategias de caja blanca y caja negra para validar tanto la lógica interna como los flujos de usuario finales. El plan de pruebas se centró en la detección temprana de defectos, siguiendo principios como la trazabilidad a requisitos y la aplicación del principio de Pareto (enfocando recursos en los módulos de mayor riesgo). Las pruebas abarcaorn desde pruebas unitarias de componentes aislados hasta pruebas de integración y funcionales del sistema completo.

Etiquetas: java Spring Boot MySQL maven Economía Colaborativa

Publicado el 6-2 10:03