1. 船舶维保管理系统架构解析
船舶维保管理系统采用前后端分离架构,后端基于SpringBoot框架构建,前端使用Vue3实现动态交互,数据持久层采用MyBatis框架,MySQL作为核心数据库存储业务数据。这种架构选择在当前的Web应用开发中已经成为主流方案,特别适合中大型企业级应用。
1.1 技术栈选型考量
后端技术栈:
- SpringBoot 2.7.x:简化了Spring应用的初始搭建和开发过程,内置Tomcat服务器,提供自动配置和起步依赖
- MyBatis-Plus 3.5.x:增强版ORM框架,提供通用Mapper和Service,减少重复CRUD代码
- Spring Security:处理认证授权,实现基于角色的访问控制(RBAC)
- Lombok:通过注解简化POJO类的编写
- Hutool:Java工具类库,提供各种实用工具方法
提示:SpringBoot版本选择2.7.x而非最新的3.x系列,主要考虑企业环境的稳定性和兼容性需求。
前端技术栈:
- Vue3 + Composition API:提供更好的TypeScript支持和代码组织方式
- Element Plus:基于Vue3的UI组件库,提供丰富的现成组件
- Axios:处理HTTP请求,与后端API交互
- Vue Router:实现前端路由管理
- Pinia:Vue3的状态管理库,替代Vuex
数据库:
- MySQL 8.0:关系型数据库,支持事务和复杂查询
- Redis:缓存高频访问数据,如权限信息和系统配置
1.2 系统架构设计
系统采用经典的三层架构,但根据船舶维保业务特点做了针对性优化:
code复制客户端层(Web前端)
↑↓ HTTP/HTTPS
应用服务层(SpringBoot)
↑↓ JDBC/MyBatis
数据存储层(MySQL+Redis)
关键设计特点:
- 前后端完全分离:前端通过RESTful API与后端交互,便于独立开发和部署
- 模块化设计:按功能划分为船舶管理、维保管理、故障管理等模块
- 权限控制:基于角色的访问控制,细粒度到按钮级别
- 审计日志:记录关键操作,满足航运业合规要求
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据库设计与实现
2.1 核心表结构解析
船舶基础信息表(ship_info)
sql复制CREATE TABLE `ship_info` (
`ship_id` varchar(20) NOT NULL COMMENT '船舶编号(主键)',
`ship_name` varchar(50) NOT NULL COMMENT '船舶名称',
`ship_type` varchar(30) DEFAULT NULL COMMENT '船舶类型',
`tonnage` double DEFAULT NULL COMMENT '船舶吨位(吨)',
`build_date` date DEFAULT NULL COMMENT '建造日期',
`status` tinyint DEFAULT '1' COMMENT '状态(0:停用,1:启用)',
`last_maintenance` datetime DEFAULT NULL COMMENT '上次维保时间',
`next_maintenance` datetime DEFAULT NULL COMMENT '下次计划维保时间',
`insurance_expire` date DEFAULT NULL COMMENT '保险到期日',
PRIMARY KEY (`ship_id`),
KEY `idx_status` (`status`),
KEY `idx_next_maintenance` (`next_maintenance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
设计要点:
- 主键使用业务意义的
ship_id而非自增ID,便于业务关联 - 添加了
last_maintenance和next_maintenance字段,实现维保计划自动提醒 - 建立状态和维保时间的索引,提高查询效率
维保任务记录表(maintenance_task)
sql复制CREATE TABLE `maintenance_task` (
`task_id` varchar(20) NOT NULL COMMENT '任务编号(主键)',
`ship_id` varchar(20) NOT NULL COMMENT '船舶编号(外键)',
`task_type` varchar(30) NOT NULL COMMENT '任务类型',
`executor` varchar(50) DEFAULT NULL COMMENT '执行人员',
`start_time` datetime DEFAULT NULL COMMENT
