1. 项目概述与技术栈选型
汽车维修预约服务系统是一个典型的B2C行业解决方案,旨在连接车主与维修服务商,实现线上预约、工单管理、配件库存等核心功能。我们采用前后端分离架构,主要基于以下技术栈:
- 后端:Spring Boot 3.1.5 + MyBatis-Plus 3.5.3.1
- 前端:Vue 3.2 + Element Plus 2.3.3
- 数据库:MySQL 8.0 + Redis 7.0
- 辅助工具:Lombok + MapStruct + Hutool
技术选型理由:Spring Boot的自动配置特性可快速搭建微服务,Vue3的Composition API更适合复杂交互场景,MyBatis-Plus在传统ORM基础上提供了更便捷的CRUD操作,而MySQL 8.0的窗口函数和JSON支持能更好满足业务报表需求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心模块设计与实现
2.1 预约流程状态机设计
维修预约涉及"待确认→已预约→服务中→已完成→已评价"等状态转换。我们采用状态模式实现:
java复制// 状态机枚举定义
public enum AppointmentStatus {
PENDING_CONFIRM(1, "待确认"),
CONFIRMED(2, "已预约"),
IN_SERVICE(3, "服务中"),
COMPLETED(4, "已完成"),
CANCELLED(-1, "已取消");
// 状态转换校验逻辑
public boolean canTransferTo(AppointmentStatus targetStatus) {
switch(this) {
case PENDING_CONFIRM:
return targetStatus == CONFIRMED || targetStatus == CANCELLED;
case CONFIRMED:
return targetStatus == IN_SERVICE || targetStatus == CANCELLED;
// 其他状态转换规则...
}
}
}
2.2 动态时间槽分配算法
维修工位的可用时间计算是核心难点。我们采用时间片分割算法:
sql复制-- MySQL查询某日可用时间槽
SELECT
time_slot,
SUM(IF(booking_count < max_parallel, 1, 0)) AS available
FROM (
SELECT
ts.time_slot,
COUNT(a.id) AS booking_count,
ws.max_parallel
FROM time_slots ts
CROSS JOIN work_stations ws
LEFT JOIN appointments a ON a.time_slot = ts.time_slot
AND a.station_id = ws.id
AND a.appointment_date = '2023-11-20'
WH
