1. 项目概述
这个基于SSM框架的汽车维修预约平台是我去年指导的一个本科毕业设计项目,核心目标是解决传统汽修行业预约效率低下的痛点。现在回想起来,这个项目虽然技术栈不算新颖,但完整实现了从用户预约到门店管理的全流程闭环,特别适合作为SSM框架的练手项目。
平台采用经典的B/S架构,前端用Bootstrap+jQuery实现响应式布局,后端基于Spring+SpringMVC+MyBatis三大件构建。数据库选型MySQL 5.7,考虑到学生项目的实际情况,没有引入Redis等中间件。整个系统开发周期约3个月,最终代码量约1.2万行,包含了6个核心模块和23张数据表。
提示:项目源码已脱敏处理,关键业务逻辑都保留了完整注释,建议配合本文的架构解析一起阅读
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 SSM框架选型考量
选择SSM而非SpringBoot主要基于教学考量:
- 学生需要掌握XML配置到注解的演进过程
- 手动整合三大框架能加深对IoC、AOP等概念的理解
- 更贴近企业遗留系统的技术栈
框架版本选择:
xml复制<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
2.2 核心模块设计
系统采用分层架构,主要包结构如下:
code复制com.auto.repair
├── config # Spring配置类
├── controller # MVC控制器
├── service # 业务逻辑层
│ ├── impl # 服务实现
├── dao # MyBatis映射接口
├── entity # 实体类
├── util # 工具类
└── exception # 异常处理
数据库设计要点:
- 采用雪花算法生成分布式ID
- 建立维修项目-工时-价格的关联关系
- 使用状态机模式管理订单生命周期
3. 关键功能实现
3.1 预约流程实现
核心时序逻辑:
- 用户选择门店和服务项目
- 系统查询技师可用时间槽
- 生成预订单并锁定资源
- 支付后生成正式工单
java复制// 预约核心代码片段
public Result makeAppointment(AppointmentDTO dto) {
// 1. 校验时间冲突
if (scheduleService.isConflict(dto.getTechnicianId(), dto.getStartTime())) {
throw new BusinessException("该时段已被预约");
}
// 2. 生成预订单
Appointment appointment = convertToEntity(dto);
appointment.setStatus(AppointmentStatus.PENDING);
appointmentMapper.insert(appointment);
// 3. 发送短信通知
smsService.sendNotify(appointment);
return Result.success(appointment.getId());
}
3.2 动态价格计算
采用策略模式实现不同服务的计价规则:
java复制public interface PricingStrategy {
BigDecimal calculate(ServiceItem item);
}
// 常规保养策略
@Component
public class MaintenanceStrategy implements PricingStrategy {
@Override
public BigDecimal calculate(ServiceItem item) {
return item.getBasePrice()
.multiply(item.getDiscount())
.add(item.getMaterialFee());
}
}
4. 典型问题解决方案
4.1 并发预约冲突
采用乐观锁解决超卖问题:
sql复制UPDATE technician_schedule
SET status = 'BOOKED'
WHERE id = #{id} AND status = 'AVAILABLE'
4.2 微信支付集成
支付流程注意事项:
- 必须配置支付白名单IP
- 异步通知要做签名验证
- 订单状态需要幂等处理
支付状态机设计:
code复制[待支付] -> [支付中] -> [已支付]
↘ [取消] ↘ [超时关闭]
5. 部署实践
5.1 环境准备
推荐使用Docker Compose快速搭建:
yaml复制version: '3'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
5.2 性能优化建议
- 添加二级缓存:
java复制@Cacheable(value = "services", key = "#shopId")
public List<ServiceItem> getByShop(Long shopId) {
return serviceMapper.selectByShop(shopId);
}
- 数据库索引优化:
sql复制ALTER TABLE `appointment` ADD INDEX `idx_technician_time` (`technician_id`, `start_time`);
6. 项目扩展方向
- 增加智能排班算法
- 集成OBD设备诊断数据
- 开发微信小程序端
- 实现配件库存管理
这个项目最让我意外的是学生们在有限时间内完成的支付系统集成。他们不仅实现了基础功能,还处理了各种边缘case,比如处理微信支付异步通知延迟的问题时,增加了本地定时任务补偿机制。建议后续开发者可以重点研究下订单状态机的设计,这是业务逻辑最复杂的部分。
