Sistema de Gestión de Flota Vehicular para Terminales de Autobuses con SSM y Vue

A continuación se presenta un esquema técnico detallado para el desarrollo de un sistema de gestión de vehículos para terminales de autobuses, implementando una arquitectura basada en SSM (Spring + SpringMVC + MyBatis) combinado con Vue.js.

Arquitectura Tecnológica

Stack del servidor

  • Spring: Contenedor de inversión de control y gestión transaccional
  • SpringMVC: Procesamiento de solicitudes y respuestas HTTP
  • MyBatis: Framework de mapeo objeto-rleacional
  • MySQL: Almacenamiento de datos relaciones

Stack del cliente

  • Vue.js 2.x/3.x: Framework progresivo para interfaces (se recomienda Element UI o Ant Design Vue)
  • Axios: Cliente HTTP basada en promesas
  • Vue Router: Sistema de navegación para aplicaciones SPA

Herramientas de desarrollo

  • IDEA/Eclipse para backend
  • VSCode/WebStorm para frontend
  • Maven para gestión de dependencias

Módulos Funcionales

1. Gestión de unidades

  • Registro de información vehicular (matrícula, modelo, capcaidad, fecha de adquisición)
  • Monitoreo de estado operativo (mantenimiento, en servicio, fuera de operación)
  • Control de asignación de unidades

2. Administración de itinerarios

  • Programación de rutas y horarios
  • Ajuste dinámico de tablas de salida
  • Vinculación conductor-unidad

3. Módulo de boletos

  • Compra y cancelación en línea
  • Configuración dinámica de tarifas (temporadas altas)
  • Registro de verificación de pasajeros

4. Generación de reportes

  • Estado de ingresos diário/mensual
  • Análisis de ocupación
  • Métricas de utilización de flota

5. Administración del sistema

  • Control de acceso basado en roles (RBAC)
  • Auditoría de operaciones
  • Configuración de parámetros globales

Diseño de Base de Datos

Tabla: tr_vehiculos

CREATE TABLE `tr_vehiculos` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `matricula` VARCHAR(20) NOT NULL COMMENT 'Número de placa',
  `modelo` VARCHAR(50) COMMENT 'Modelo de unidad',
  `capacidad_asientos` INT COMMENT 'Cantidad de asientos',
  `estado_operativo` TINYINT DEFAULT 1 COMMENT 'Estado (1-Activo 2-Mantenimiento 3-Baja)',
  `fecha_adquisicion` DATE COMMENT 'Fecha de compra'
);

Tabla: tr_itinerarios

CREATE TABLE `tr_itinerarios` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `hora_salida` DATETIME NOT NULL COMMENT 'Horario de partida',
  `ruta_id` INT COMMENT 'Identificador de ruta',
  `vehiculo_id` INT COMMENT 'Identificador de unidad',
  `conductor_id` INT COMMENT 'Identificador de chofer',
  `tarifa` DECIMAL(10,2) COMMENT 'Costo del pasaje'
);

Tabla: tg_usuarios

CREATE TABLE `tg_usuarios` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `nombre_usuario` VARCHAR(50) UNIQUE NOT NULL,
  `clave_acceso` VARCHAR(100) NOT NULL,
  `nombre_completo` VARCHAR(50) COMMENT 'Nombre real',
  `rol_id` INT COMMENT 'Identificador de rol'
);

Estrategia de Pruebas

Pruebas unitarias

  • JUnit + Mockito para lógica de servicios
  • Validación de consultas SQL en capa MyBatis

Pruebas de integración

  • Postman para endpoints RESTful
  • Validación de itinerarios y transacciones

Pruebas frontend

  • Jest para componentes Vue
  • Cypress para flujos punta a punta

Pruebas de carga

  • JMeter para simulación de concurrencia
  • Análisis de rendimiento de consultas

Estructura del Proyecto

Backend

src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── terminal/
│   │           ├── controller/      # Endpoints REST
│   │           ├── servicio/        # Lógica de negocio
│   │           ├── repositorio/     # Mapeo MyBatis
│   │           └── modelo/          # Entidades
│   └── resources/
│       ├── mapper/                  # Archivos XML MyBatis
│       └── aplicacion.yml           # Configuración Spring

Frontend

src/
├── api/            # Interceptores Axios
├── assets/         # Recursos estáticos
├── componentes/    # Componentes reutilizables
├── enrutador/      # Definición de rutas
├── estado/         # Gestión Vuex
└── vistas/
    ├── itinerario/    # Gestión de horarios
    └── boleto/        # Módulo de ventas

Implementación de Servicios

Controlador REST (Consulta de itinerarios)

@RestController
@RequestMapping("/srv/itinerario")
public class ControladorItinerario {
    @Autowired
    private ServicioItinerario servicioItinerario;

    @GetMapping("/consultar")
    public Respuesta ejecutar(@RequestParam(required = false) String fecha) {
        List<itinerario> datos = servicioItinerario.obtenerPorFecha(fecha);
        return Respuesta.exitoso(datos);
    }
}</itinerario>

Cliente Vue

// Obtener lista de itinerarios
consultarItinerarios() {
  axios.get('/srv/itinerario/consultar', { params: { fecha: this.fechaSeleccionada } })
    .then(respuesta => {
      this.datosItinerario = respuesta.data.resultado;
    });
}

Configuración de Produção

  1. Servidor: Generar paquete JAR y ejecutar con java -jar, o desplegar en contenedor Tomcat
  2. Cliente: Ejecutar npm run build y servir archivos estáticos mediante Nginx
  3. Base de datos: Implementar replicación maestro-esclavo en MySQL para alta disponibilidad

Etiquetas: java Spring MyBatis Vue MySQL

Publicado el 7-11 19:15