1. 项目概述
作为一名在医院信息化领域摸爬滚打多年的开发者,我深知传统纸质医疗管理的痛点。最近刚完成了一个基于Spring Boot的医院管理系统,这套系统从需求调研到最终上线历时6个月,期间踩过不少坑也积累了不少经验。今天就把这个项目的完整实现思路和技术细节分享给大家,特别是数据库设计和Spring Boot的实战技巧部分,相信对正在开发类似系统的同行会有很大帮助。
这个系统主要解决了医院日常管理中的四大核心问题:
- 患者信息电子化:从入院登记到病历管理全程无纸化
- 医疗资源数字化:病床、药品、科室等资源状态实时可视化
- 业务流程标准化:挂号、问诊、开药、住院等流程线上化
- 数据统计智能化:自动生成各类医疗业务报表
系统采用B/S架构,前端使用Vue+Element UI,后端基于Spring Boot 2.7 + MyBatis Plus,数据库选用MySQL 8.0。特别在数据库设计上,我们针对医疗行业的特殊性做了很多优化,比如病人信息的敏感字段加密、药品批次的双重校验等,这些都会在后文详细说明。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心需求与架构设计
2.1 角色与功能划分
系统设计了四类核心角色,每类角色的功能权限经过了三轮业务调研才最终确定:
管理员:
- 科室管理(增删改查+排班设置)
- 人员管理(医生/护士账号的权限分配)
- 系统监控(操作日志审计+异常报警)
- 数据备份(定时任务+手动触发)
医生:
- 电子病历(结构化录入模板)
- 处方开具(药品配伍禁忌提醒)
- 患者管理(历史就诊记录联动)
- 排班查询(可视化日历展示)
护士:
- 床位管理(状态实时更新)
- 医嘱执行(扫码核对机制)
- 护理记录(模板化快速录入)
- 药品申领(库存预警提示)
患者:
- 预约挂号(分时段号源管理)
- 报告查询(检验结果自动推送)
- 费用明细(实时扣费记录)
- 满意度评价(匿名反馈机制)
2.2 技术架构详解
系统采用经典的三层架构,但在细节上做了很多优化:
表现层:
- 前后端分离设计,通过JWT进行认证
- 接口文档使用Swagger 3.0自动生成
- 文件上传采用阿里云OSS存储
业务层:
- Spring Boot 2.7.12(稳定版)
- 自定义注解实现业务日志
- 分布式锁控制药品库存
- 规则引擎处理医疗计价
数据层:
- MySQL 8.0(RR隔离级别)
- 热数据使用Redis缓存
- 敏感字段AES加密存储
- 定时任务进行数据归档
特别说明一下我们的缓存设计策略:对于科室信息、药品目录等变化频率低的数据,采用Redis缓存24小时;对于床位状态、药品库存等高频变化数据,设置60秒短缓存保证数据及时性。
3. 数据库设计实战
3.1 核心表结构设计
医疗系统的数据库设计有几个特殊要求:字段多、关联复杂、历史数据需完整保留。我们的ER图经过12次迭代才最终定型,以下是几个关键表的设计要点:
病人信息表(patient)优化:
sql复制CREATE TABLE `patient` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`medical_record_no` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '病历号',
`name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '姓名',
`id_card` varchar(18) COLLATE utf8mb4_bin NOT NULL COMMENT '身份证',
`id_card_encrypt` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '加密身份证',
`phone` varchar(11) COLLATE utf8mb4_bin NOT NULL COMMENT '手机号',
`blood_type` enum('A','B','AB','O') COLLATE utf8mb4_bin DEFAULT NULL COMMENT '血型',
`allergy_history` text COLLATE utf8mb4_bin COMMENT '过敏史',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`
