智能医疗系统毕业设计:从零搭建一个可扩展的入门级架构
摘要:许多计算机专业学生在完成“智能医疗系统毕业设计”时,常因缺乏真实业务场景理解而陷入功能堆砌或技术选型混乱。本文面向新手,基于微服务与前后端分离架构,提供一套轻量、可部署、具备基础智能能力(如症状初筛)的系统方案。读者将掌握核心模块划分、RESTful API 设计、数据库建模及安全认证机制,快速构建符合学术与工程双重标准的毕业作品。
一、毕设常见痛点:为什么“智能医疗”总被导师打回?
需求拍脑袋:
一上来就“AI 诊断”“大数据预测”,结果连挂号流程都没跑通。评审老师一句“业务闭环在哪?”直接凉凉。技术栈攀比:
把 Spring Cloud 全家桶、Kafka、Redis、MySQL、MongoDB、ES 全部怼上,本地 8G 内存笔记本开机即 100%,答辩现场演示卡成 PPT。数据合规盲区:
把患者姓名、手机号明文存库,日志里还打印身份证:1101********1234。导师反问一句“知道《个人信息保护法》第几条吗?”瞬间社死。测试=“能跑就行”:
功能点一遍没报错就当完成,并发 10 个请求数据库锁死,页面 504,评审直接“性能不达标”。
二、单体 or 微服务?毕设场景下的理性选择
| 维度 | 单体 | 微服务 |
|---|---|---|
| 开发周期 | 1 人 3 周可交付 | 需 CI/CD、网关、配置中心,至少 6 周 |
| 运维成本 | IDEA 一键启动 | 多台容器,8G 内存起步 |
| 答辩演示 | 笔记本即服务器 | 现场网络波动,Nacos 掉线直接翻车 |
| 加分项 | 功能完备即可 | 架构演进亮点,老师眼前一亮 |
结论:
新手阶段先“伪微服务”——按领域拆成独立 Maven 模块(patient、doctor、consultation),本地打包三个 jar,端口 8081/8082/8083,既展示“拆分思想”,又避免真·分布式事务地狱。后续有余力再引入 Spring Cloud Alibaba 升级。
三、技术栈与模块划分
- 后端:Spring Boot 2.7 + MyBatis-Plus + HikariCP + MySQL 8.0
- 前端:Vue 3 + Vite + ElementPlus(axios 拦截器统一挂 JWT)
- 安全:Spring Security + JWT + HTTPS(自签证书即可,答辩前把 Chrome 警告屏蔽掉)
- 轻量规则引擎:Drools 7 行内 DSL,实现“症状→科室”初筛,无 GPU 也能跑
- 压测:ApacheBench + H2 内存库,避免生产数据污染
模块一览:
medical-backend ├── patient-service // 患者中心 ├── doctor-service // 医生中心 ├── consultation-service// 问诊&初筛 ├── gateway-service // 统一网关(伪) └── common-starter // JWT、异常、日志脱敏
--- ## 四、核心代码走读:Clean Code 示范 ### 1. JWT 鉴权中间件(common-starter) ```java public class JwtFilter extends OncePerRequestFilter { private static final String HEADER = "Authorization"; private static final String PREFIX = "Bearer "; @Override protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws ServletException, IOException { String bearer = req.getHeader(HEADER); if (bearer == null || !bearer.startsWith(PREFIX)) { chain.doFilter(req, res); return; } String jwt = bearer.substring(PREFIX.length()); try { Claims claims = JwtUtil.parse(jwt); UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken( claims.getSubject(), // username null, Collections.emptyList()); SecurityContextHolder.getContext().setAuthentication(auth); } catch (ExpiredJwtException e) { res.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return; } chain.doFilter(req, res); } }要点:
- 只负责“解析&放上下文”,业务逻辑零侵入
- 异常直接返回 401,前端 axios 拦截器统一弹窗“登录过期”
2. 症状匹配规则(consultation-service)
rule "咳嗽->呼吸内科" when $s: SymptomRequest(symptoms contains "咳嗽") then $s.setRecommendDept("呼吸内科"); endDrools 文件放在src/main/resources/rules/symptom.drl,启动时一次性加载,毫秒级响应,零机器学习开销。
3. 患者敏感数据脱敏(MyMetaObjectHandler)
@Override public void insertFill(MetaObject metaObject) { Object phone = getFieldValByName("phone", metaObject); if (phone != null) { setFieldValByName("phone", DesensitizeUtil.mobile(phone.toString()), metaObject); } }工具方法mobile保留前三后四,中间四位****,日志与数据库统一脱敏,评审老师问“隐私如何保护”直接甩代码。
五、本地部署与压测:让笔记本也能扛住 200 并发
打包
mvn -T 1C clean package -DskipTests启动顺序
MySQL → patient-service(8081) → doctor-service(8082) → consultation(8083)初始化数据
consultation-service/src/main/resources/sql/demo.sql含 1000 条模拟患者,用户名/密码已脱敏。压测脚本
ab -n 2000 -c 200 -T 'application/json' \ -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...' \ -p consult.json \ http://localhost:8083/api/consult/sympt结果:
- Requests per second: 183 [#/sec]
- 99% 响应时间: 52 ms
足够应付答辩现场 5 位老师同时点击。
六、生产环境避坑指南(伪·生产=答辩电脑 + 老师手机热点)
禁止硬编码:
数据库密码、JWT 密钥统一进application-prod.yml,打包前mvn clean package -P prod,否则 jar 里一搜123456直接穿帮。日志别打印明文:
使用 Logback 的%replace把 11 位手机替换为1********11,示例:<pattern>%replace(%msg){'(\d{3})\d{4}(\d{4})', '$1****$2'}</pattern>HTTPS 自签证书:
本地 hosts 把medical.demo指向 127.0.0.1,Chrome 导出证书到手机,演示时老师微信扫码也不会出现“不安全”大红条。异常统一包装:
业务码 200 表示成功,非 0 表示异常,前端只认码不认文本,避免把SQLGrammarException直接返到页面。
七、下一步:在 4G 内存笔记本上跑轻量 AI
规则引擎只能做“症状→科室”映射,想升级“疑似疾病 TOP3”又不舍得买 GPU?可尝试:
文本向量化:
用 腾讯词向量 100 维精简版(200 M 以内),症状文本做平均池化,余弦相似度匹配 ICD-10 疾病库。轻量模型:
阿里开源的 MobileBERT 中文量化版(46 M)+ ONNXRuntime CPU 推理,单次预测 <200 ms,4G 内存占用 800 M 以内。数据增强:
用 ChatGLM3-6B 本地 4bit 量化批量生成“同义不同表述”症状,解决训练样本不足,毕设也能写“基于大语言模型的数据增强”章节,瞬间拉高格调。
八、结语:先让系统跑起来,再谈“智能”
毕业设计不是 Kaggle 竞赛,评审最看重“业务闭环 + 工程规范 + 隐私合规”。先把患者注册、医生问诊、症状初筛跑通,再叠一层 JWT 脱敏 HTTPS,已经能打败 80% 的“纯 PPT 项目”。至于深度学习、知识图谱,那是读研以后的故事——别急,一步一步来。
如果你已经成功把本架构跑通,不妨试着把规则引擎换成轻量 BERT,记得在 README 里注明“CPU 推理,未收集任何真实患者数据”。愿你的毕设一次过,答辩时老师只问细节不问需求——加油,未来真正的生产系统等你去升级。