1. 项目概述
这个私人诊所管理系统是我在研究生期间参与开发的一个实际项目,最初是为了解决导师朋友开的一家牙科诊所的管理痛点。传统诊所管理系统大多只能做简单的信息记录和查询,而我们通过引入协同过滤算法,实现了根据患者历史就诊数据智能推荐医生和服务的功能。系统采用SpringBoot+Vue前后端分离架构,MySQL作为数据库,经过半年多的实际运行验证,确实显著提升了诊所的运营效率和患者满意度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术选型考量
后端选择SpringBoot主要基于三个实际考量:
- 快速迭代:诊所需求变化频繁,SpringBoot的自动配置特性让我们能快速响应
- 医疗级稳定性:通过Actuator监控+SpringRetry重试机制,确保系统7×24小时可用
- 数据安全:整合SpringSecurity实现患者隐私数据的RBAC权限控制
前端采用Vue.js+ElementUI的组合,主要解决两个痛点:
- 诊所工作人员年龄跨度大,需要极简的操作界面
- 多终端适配需求(诊所同时使用PC、平板和手机端)
2.2 核心架构图解
code复制[患者端APP/微信小程序]
↑↓ HTTPS
[SpringBoot微服务集群]
↑↓ Druid连接池
[MySQL主从集群]
↑↓ Canal
[Elasticsearch推荐引擎]
实际部署时我们遇到的最大挑战是医生排班数据的实时同步问题。最终采用的解决方案是:
- 主库事务完成后立即发送MQ事件
- 从库通过监听MQ实现最终一致性
- 前端采用Socket.IO实现秒级状态更新
3. 数据库详细设计
3.1 患者信息表优化实践
原始设计的patient表存在三个问题:
- medical_history字段使用TEXT类型导致查询性能低下
- 缺少患者标签字段不利于推荐算法实施
- 没有就诊频次统计字段
最终优化方案:
sql复制ALTER TABLE patient ADD COLUMN tags JSON COMMENT '患者标签';
ALTER TABLE patient ADD COLUMN visit_count INT DEFAULT 0;
CREATE TABLE patient_medical_history (
id BIGINT PRIMARY KEY,
patient_id BIGINT,
record_type TINYINT COMMENT '1-诊断 2-用药 3-检查',
content VARCHAR(500),
INDEX idx_patient (patient_id)
);
3.2 医生排班表特殊处理
考虑到诊所的实际运营场景,我们在schedule表增加了这些字段:
sql复制ALTER TABLE schedule ADD COLUMN max_appointments INT DEFAULT 15 COMMENT '最大预约数';
ALTER TABLE schedule ADD COLUMN emergency_slot BOOLEAN DEFAULT false;
并通过触发器自动更新状
