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
- Servidor: Generar paquete JAR y ejecutar con
java -jar, o desplegar en contenedor Tomcat - Cliente: Ejecutar
npm run buildy servir archivos estáticos mediante Nginx - Base de datos: Implementar replicación maestro-esclavo en MySQL para alta disponibilidad