1. 项目概述与核心价值
这个基于SpringBoot+Vue的智能汽车养护系统,本质上是一个面向汽车后服务市场的数字化解决方案。我在汽车服务行业做过三年系统实施,深知传统汽修店手工开单、纸质记录带来的效率瓶颈。这套系统通过线上预约、工单管理、客户档案等功能模块,能帮中小型汽修厂实现业务流转效率提升40%以上。
系统采用前后端分离架构,后端用SpringBoot提供RESTful API,前端用Vue构建响应式界面。这种组合既能保证后端服务的稳定性,又能让前端获得接近原生App的操作体验。特别适合作为计算机专业毕业设计选题——技术栈主流、业务场景明确,还能展示完整的全栈开发能力。
2. 技术架构解析
2.1 后端技术选型
SpringBoot 2.7.x版本是后端核心框架,选择这个版本是因为:
- 长期支持(LTS)版本,社区资源丰富
- 内置Tomcat 9.x,无需额外配置
- 对JDK11的兼容性最佳
数据库选用MySQL 8.0而非5.7,主要考虑:
- JSON字段支持(存储车辆检测报告)
- 窗口函数(用于销售统计分析)
- 默认字符集utf8mb4(避免emoji存储问题)
关键依赖包配置示例:
xml复制<!-- 数据层 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- 安全控制 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.2 前端技术方案
Vue 3.x + Element Plus的组合提供了:
- Composition API写法更利于复杂逻辑组织
- Vite构建速度比Webpack快5-8倍
- TypeScript支持(建议开启严格模式)
前端工程结构建议:
code复制src/
├── api/ # 接口定义
├── assets/ # 静态资源
├── components/ # 通用组件
├── router/ # 路由配置
├── stores/ # Pinia状态管理
├── utils/ # 工具函数
└── views/ # 页面组件
3. 核心功能实现
3.1 预约调度模块
采用时间片算法处理并发预约:
- 将每天划分为48个时间片(每30分钟一片)
- 使用Redis的BitMap存储工位占用状态
- 通过位运算快速检测时间片可用性
关键SQL示例(MySQL):
sql复制-- 查询某日可用工位
SELECT s.id, s.name
FROM work_station s
WHERE NOT EXISTS (
SELECT 1 FROM appointment a
WHERE a.station_id = s.id
AND a.appoint_date = '2023-08-20'
AND a.time_slot & 0x00040000 != 0 -- 检查第17个时间片
)
3.2 工单状态机设计
使用状态模式实现工单流转:
java复制public interface OrderState {
void confirm(OrderContext context);
void startRepair(OrderContext context);
void complete(OrderContext context);
void cancel(OrderContext context);
}
// 具体状态实现
public class PendingState implements OrderState {
@Override
public void confirm(OrderContext context) {
context.setState(new ConfirmedState());
// 发送短信通知逻辑...
}
// 其他方法抛出IllegalStateException
}
4. 典型问题解决方案
4.1 图片上传优化
常见问题:汽修报告需要上传多张车辆照片,传统base64传输效率低。
解决方案:
- 前端使用Web Worker压缩图片
- 后端采用分片上传(每个分片2MB)
- 使用MinIO对象存储替代数据库存储
核心代码片段:
javascript复制// 前端压缩逻辑
worker.postMessage({
file: blob,
quality: 0.7
});
// 后端分片处理
@PostMapping("/upload/chunk")
public ResponseEntity<String> uploadChunk(
@RequestParam MultipartFile file,
@RequestParam String chunkId,
@RequestParam Integer chunkIndex,
@RequestParam Integer totalChunks) {
// 临时存储分片...
}
4.2 权限控制方案
RBAC模型在汽修场景的特殊处理:
- 动态权限:店长可临时授权技师查看特定客户历史记录
- 数据权限:分店员工只能看到本店数据
- 使用Spring Security + AOP实现
权限注解示例:
java复制@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('TECHNICIAN') && @dataPerm.checkShop(authentication,#shopId)")
public @interface TechnicianPermission {}
5. 部署与性能调优
5.1 生产环境配置
推荐服务器规格:
- 2核4G云服务器(后端)
- 1核2G云服务器(前端)
- 单独配置Redis缓存
关键JVM参数:
code复制-server -Xms1024m -Xmx1024m
-XX:MaxMetaspaceSize=256m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
5.2 缓存策略设计
三级缓存架构:
- 本地缓存(Caffeine):高频访问的基础数据
- Redis集群:会话数据和热点业务数据
- MySQL查询缓存:配合@Cacheable注解
缓存失效策略:
java复制@Cacheable(value = "vehicleModels",
key = "#brandId",
unless = "#result == null",
cacheManager = "redisCacheManager")
public List<Model> getModelsByBrand(Integer brandId) {
// 数据库查询
}
6. 毕设开发建议
6.1 技术难点突破
建议重点展示:
- 预约冲突检测算法
- 工单状态机的优雅实现
- 移动端适配方案(PWA技术)
6.2 文档撰写要点
答辩时需要突出的内容:
- 数据库设计范式应用(至少达到3NF)
- 接口幂等性处理方案
- 压力测试结果(JMeter报告)
6.3 功能扩展方向
可选的加分功能:
- 微信小程序客户端
- 配件库存预警系统
- 基于OpenCV的车辆损伤识别
调试技巧:在application-dev.yml中开启SQL日志
yaml复制logging: level: org.hibernate.SQL: debug org.hibernate.type: trace