1. 项目概述:医院挂号系统小程序的设计初衷
这个基于SpringBoot+微信小程序的医院挂号系统,是我去年指导计算机专业学生完成的毕业设计项目。当时选择这个方向,是因为观察到三甲医院门诊大厅永远排着长队,而很多基层医院却门可罗雀。通过线上分时预约,理论上能缓解30%以上的现场排队压力——这个数据后来在我们本地妇幼保健院的试点中得到了验证。
系统采用前后端分离架构,后端用SpringBoot提供RESTful API,前端用微信小程序作为用户入口。这种组合在毕业设计中特别受欢迎:SpringBoot简化了JavaEE开发复杂度,微信小程序则天然解决跨平台和推广问题。实测从零开始开发,2周就能跑通核心流程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 后端技术栈选型
选择SpringBoot 2.7.x版本(现在建议用3.0+)主要考虑三点:
- 自动配置特性让毕业生能快速搭建可运行的Web服务
- 内置Tomcat容器简化部署
- 丰富的Starter依赖(后面会具体讲到关键依赖)
核心依赖包括:
xml复制<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.1.0</version>
</dependency>
特别注意:MyBatis配置中一定要开启驼峰映射,否则小程序端接收的JSON字段会出现命名不一致问题
2.2 小程序端设计要点
微信小程序开发有几个关键坑点需要提前规避:
- 用户登录必须通过button触发,不能自动静默登录
- 支付功能需要企业资质,学生项目建议用模拟支付
- textarea组件会引起外层容器样式异常,解决方案是:
css复制.container {
overflow: hidden; /* 关键修复 */
}
3. 核心业务实现
3.1 挂号流程设计
典型时序如下:
- 患者选择科室→医生→时间段
- 系统校验号源库存(Redis原子计数器)
- 生成待支付订单(15分钟过期)
- 支付成功后写入预约记录
这里最易出错的是并发控制。我们采用Redis+Lua脚本实现:
lua复制local remain = redis.call('GET', KEYS[1])
if remain and tonumber(remain) > 0 then
return redis.call('DECR', KEYS[1])
else
return -1
end
3.2 医生排班模型
采用组合设计模式处理不同排班规则:
java复制public interface ScheduleRule {
boolean match(LocalDateTime time);
}
// 固定周期排班
public class FixedSchedule implements ScheduleRule {...}
// 节假日特殊排班
public class HolidaySchedule implements ScheduleRule {...}
4. 典型问题解决方案
4.1 微信音频播放异常
苹果设备无声问题通常是因为:
- 未添加
<audio>组件的obey-mute-switch属性 - iOS要求音频播放必须由用户手势触发
解决方案:
javascript复制// 页面初始化时创建内部audioContext
const audioCtx = wx.createInnerAudioContext({
obeyMuteSwitch: false
})
// 在用户点击事件中触发播放
playButton.onTap(() => {
audioCtx.src = 'https://.../notice.m4a'
audioCtx.play()
})
4.2 跨天预约的特殊处理
遇到节假日调休时,需要特殊处理:
- 维护一个节假日API接口
- 在排班生成时动态判断:
java复制public boolean isWorkingDay(LocalDate date) {
// 先查缓存
// 再查数据库
// 最后调用第三方API
}
5. 项目部署与调试
5.1 本地开发环境
建议使用Docker Compose快速搭建:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
redis:
image: redis:alpine
5.2 生产环境部署
SpringBoot打包注意事项:
- 指定profile激活方式:
bash复制java -jar hospital.jar --spring.profiles.active=prod
- 日志文件要配置滚动策略:
properties复制logging.file.name=app.log
logging.logback.rollingpolicy.max-file-size=10MB
6. 毕业设计扩展建议
如果想拿高分,可以考虑:
- 增加智能推荐医生功能(基于历史挂号数据)
- 实现检查报告推送(需处理PDF/XSS防护)
- 接入医院HIS系统(模拟接口即可)
对于源码调试,重点看这几个类:
AppointmentController.java- 挂号核心逻辑WxPayService.java- 支付对接ScheduleTask.java- 定时生成号源
我在实际项目验收时发现,评委最关注的是:
- 数据库设计是否规范(要有ER图)
- 异常处理是否完备(特别是网络中断场景)
- 是否有压力测试报告(JMeter简单测试即可)
