1. 项目背景与需求分析
心理咨询在现代社会的重要性日益凸显。根据世界卫生组织的数据,全球约有10亿人受到精神健康问题困扰。传统的心理咨询预约方式存在诸多痛点:电话预约需要反复沟通确认时间、线下排队耗费大量等待时间、咨询师日程安排不透明导致预约冲突频发。
我在大三实习期间曾参与某心理咨询机构的预约管理工作,亲眼目睹了纸质登记本上密密麻麻的涂改痕迹和前台工作人员接听预约电话时的手忙脚乱。这段经历让我萌生了开发在线预约系统的想法,而Spring Boot框架的快速开发特性正好契合毕业设计的周期要求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 技术栈决策过程
选择Spring Boot作为基础框架主要基于以下考量:
- 约定优于配置:减少了XML配置工作量,适合学生开发者快速上手
- 内嵌Tomcat:简化部署流程,
spring-boot-starter-web依赖直接包含运行环境 - 丰富的Starter:如
spring-boot-starter-data-jpa可快速集成JPA规范操作数据库
数据库选用MySQL 5.7而非8.0版本的原因是:
- 校园服务器环境普遍支持5.7版本
- 5.7版本对硬件资源要求更低
- 系统不涉及JSON类型字段等8.0特有功能
2.2 系统架构图解
采用经典的三层架构设计:
code复制┌─────────────────┐
│ 表现层 │ ← Thymeleaf模板引擎
│ (Web Layer) │ ← Bootstrap前端框架
└────────┬────────┘
↓
┌────────┴────────┐
│ 业务逻辑层 │ ← Spring Service
│ (Service Layer) │ ← 事务管理
└────────┬────────┘
↓
┌────────┴────────┐
│ 数据访问层 │ ← Spring Data JPA
│ (DAO Layer) │ ← 原生SQL查询
└─────────────────┘
关键设计原则:前后端轻度耦合,后端API返回标准JSON格式,前端通过AJAX异步获取数据。这种设计便于后续扩展APP客户端。
3. 核心功能实现细节
3.1 预约业务状态机设计
预约流程是系统的核心业务,我们采用状态模式(State Pattern)管理预约生命周期:
java复制public enum AppointmentStatus {
PENDING, // 待确认
CONFIRMED, // 已确认
COMPLETED, // 已完成
CANCELLED, // 已取消
NOSHOW // 失约
}
状态转换规则:
- 用户提交 → PENDING
- 咨询师确认 → CONFIRMED
- 咨询完成 → COMPLETED
- 任意方取消 → CANCELLED
- 未按时到场 → NOSHOW
3.2 并发预约控制方案
为防止同一时段被重复预约,我们在MySQL表设计时添加了联合唯一约束:
sql复制ALTER TABLE appointment
ADD UNIQUE INDEX idx_consultant_time (consultant_id, appointment_time);
并在Service层添加了乐观锁检查:
java复制@Transactional
public String makeAppointment(AppointmentDTO dto) {
// 检查时段是否可用
long conflictCount = appointmentRepository
.countByConsultantAndTime(dto.getConsultantId(), dto.getAppointmentTime());
if(conflictCount > 0) {
throw new BusinessException("该时段已被预约");
}
// 创建预约记录
Appointment entity
