1. 项目背景与核心需求
宠物医疗行业近年来呈现爆发式增长,根据2023年宠物医疗行业白皮书数据显示,全国宠物医院数量较五年前增长了217%。这种快速增长背后存在着明显的数字化管理需求,传统纸质档案和人工排班方式已经难以应对日均50-100例的门诊量。
这个Spring Boot宠物医院系统主要解决三个核心痛点:
- 病历管理混乱:纸质档案易丢失、难检索,系统实现了电子化病历存储和智能检索
- 预约效率低下:电话预约常占线,系统提供可视化排班和在线预约
- 药品管理困难:库存盘点耗时,系统实现自动化库存预警和效期管理
提示:系统设计时需要特别注意宠物医疗行业的特殊性,比如同一宠物可能涉及多个科室会诊,病历系统需要支持多医生协作编辑。
2. 技术架构设计
2.1 整体技术栈选型
采用经典的Spring Boot + MyBatis Plus + MySQL技术组合,前端使用Thymeleaf模板引擎。这种选型基于以下考虑:
- 开发效率:Spring Boot的自动配置特性可快速搭建项目骨架
- 数据安全:MySQL的事务支持能确保医疗数据完整性
- 维护成本:MyBatis Plus的代码生成器可减少70%的CRUD代码量
技术栈版本控制特别重要:
xml复制<spring-boot.version>2.7.12</spring-boot.version>
<mybatis-plus.version>3.5.3.1</mybatis-plus.version>
<mysql-connector.version>8.0.33</mysql-connector.version>
2.2 数据库设计要点
宠物医院系统的ER图有以下几个关键实体:
- 宠物档案(包含芯片号、过敏史等特殊字段)
- 病历记录(支持图片上传的BLOB字段)
- 药品库存(需要效期预警字段)
- 预约排班(包含医生专长分类)
一个易忽略但重要的设计细节:在病历表中添加is_archived字段而非直接删除记录,这是医疗行业的数据合规要求。
3. 核心功能实现细节
3.1 智能预约排班算法
排班模块的核心算法逻辑:
java复制public List<ScheduleVO> generateSchedule(LocalDate date, Long doctorId) {
// 1. 获取医生基础排班模板
// 2. 检查已有预约记录
// 3. 计算每个时段的可预约状态
// 4. 特殊处理急诊预约插队逻辑
}
实测中发现需要处理的时间边界情况:
- 午休时段不开放普通预约
- 疫苗类预约需要预留观察时间
- 同一宠物15天内重复预约相同项目需预警
3.2 药品库存管理实现
采用Spring的定时任务实现库存预警:
java复制@Scheduled(cron = "0 0 9 * * ?") // 每天上午9点执行
public void checkDrugInventory() {
// 查询临近效期的药品
// 检查库存低于安全线的品种
// 发送企业微信通知
}
药品批次管理需要特别注意:
- 同一药品不同批次要分开管理
- 出库时遵循"先进先出"原则
- 退货药品需要单独状态标识
4. 典型业务场景解决方案
4.1 病历图片处理方案
考虑到X光片等医疗影像的存储需求,采用如下方案:
- 前端使用Dropzone.js实现拖拽上传
- 后端使用Apache Commons Imaging进行格式校验
- 存储路径按"年/月/宠物ID"分级目录保存
properties复制# 文件存储配置
petclinic.upload.path=/data/pet-images
petclinic.upload.max-size=10MB
petclinic.upload.allowed-types=png,jpg,dicom
4.2 支付对账模块
与第三方支付平台对接时的关键点:
- 使用Spring State Machine处理支付状态流转
- 对账任务需要处理网络异常重试机制
- 保留原始交易凭证的加密存储
支付状态机设计示例:
java复制@Configuration
public class PaymentStateMachineConfig {
// 定义UNPAID -> PAYING -> PAID/FAILED状态流转
// 配置超时自动取消transition
}
5. 部署与性能优化
5.1 生产环境部署方案
推荐使用Docker Compose部署:
yaml复制version: '3'
services:
app:
image: petclinic:1.0
ports:
- "8080:8080"
depends_on:
- redis
- mysql
mysql:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
5.2 缓存策略设计
针对不同数据特性采用多级缓存:
- 基础数据(科室、医生列表):Redis缓存12小时
- 排班数据:Caffeine本地缓存30分钟
- 病历数据:不缓存确保实时性
缓存击穿防护方案:
java复制@Cacheable(value = "doctors", key = "#deptId",
unless = "#result == null",
cacheManager = "redisCacheManager")
public List<Doctor> getByDepartment(Long deptId) {
// 查询数据库
}
6. 项目扩展方向
- 移动端适配:增加微信小程序预约入口
- 智能诊断:集成宠物症状自检知识图谱
- 供应链管理:对接药品供应商API实现自动补货
- 大数据分析:基于就诊数据生成区域疾病热力图
在实现基础功能后,可以考虑用Spring Cloud Alibaba进行微服务改造,将预约、病历、药品等模块拆分为独立服务。不过对于毕业设计而言,单体架构已经足够展示技术能力。
