返回作品

慢性病预约系统

创建于 2025 年 5 月 19 日

标签
  • Spring Boot
  • MyBatis-Plus
  • Redis
  • MySQL
  • JWT
  • Vue 2
  • Element UI
  • uni-app
  • uView
  • WebSocket

项目介绍

慢性病预约系统是一套面向慢病患者和医生的”预约—就诊—随访—健康管理”一体化平台,仓库里包含三个组成部分:chronic_disease 是若依(RuoYi v3.8.6)多模块 Maven 工程,其中 chronic 业务模块承载全部慢病业务接口,ruoyi-ui 是 Vue 管理后台;patient_uniapp 是患者端 uni-app 工程,可打包为 App 与微信小程序;根目录与 sql/ 下各有一份 chronic_disease.sql 数据库脚本(约 15MB,MySQL 8,含种子数据)。

业务上,医生或管理员先在 visit_plan 中按天排班(区分上午/下午时段,挂号级别与价格来自 registration_rank),系统按 visit_allocation 生成一个个可预约时段;患者端以两周日期滚动条选日期,按医生折叠面板展示当日剩余号源,选中时段后提交预约,系统自动分配最近空闲时段、生成预约编号并进入候诊队列;医生在”医生工作台”对候诊患者逐个叫号、跳过或完成就诊。就诊之后进入慢病管理环节:医生在随访模块登记随访时间、反馈与建议,患者端则能查看血压记录、早中晚用药计划、健康宣教文章,并填写抑郁、失眠、便秘、糖尿病等问卷量表。

项目架构

后端在若依 RuoYi v3.8.6 基础上新增 chronic 业务模块(com.ruoyi.chronic),继承框架自带的 Spring Boot 2.5.14、Java 8、Spring Security + JWT 认证、Redis、Druid 1.2.16 连接池、MyBatis-Plus 3.3.1(与若依原生 MyBatis 共存)与定时任务、代码生成等能力。业务 Controller 按使用端分三组:controller/web 服务管理后台(出诊排班、随访、患者、问卷、处方等)、controller/patient_app 服务患者端(预约、随访计划、血压、用药计划、宣教等)、controller/procedure 服务医生诊疗流程(叫号、病例、对话、语音听写)。防并发的预约接口同时使用 ReentrantLock 与 Redis 5 秒防重复提交键,排班时段通过 Redis Hash 缓存(MXBvisitTime)减少数据库压力;WebSocketService 提供 /websocket/{serverId} 实时消息通道,ChatPersonControllerproxyRequest 代理大模型对话,WebIATWS 集成讯飞语音听写流式 API,pom 中还引入了腾讯云 SDK(3.1.832)。

管理端 ruoyi-ui 是 Vue 2 + Element UI 单页应用,vue-cli-service serve 默认运行在 2324 端口,通过代理转发 /prod-api 请求;页面覆盖出诊排班、随访、患者档案、血压、心电(静息心电图、单导联 JECG)、处方 PDF、问卷量表、医生工作台(叫号)与诊断工作台等三十余个业务视图。患者端 patient_uniapp 基于 uni-app + uView UI 2.0.36,用 pages.json 组织首页、记录、健康知识、我的四个 tab,预约流程在 pagesOrder 目录(选日期、选医生、选时段、预约详情),接口前缀配置在 common/request_url.js

数据库共 70 余张表,慢病业务核心表包括:visit_plan(出诊排班:医生工号、上午/下午、日期、挂号名称、价格)、visit_allocation(时段分配:起止时间、slotId)、visit_appointment(预约挂号:状态 0 待就诊/1 已就诊/2 取消/3 未按时就诊,支付状态 0 未支付/1 已支付/2 已退款,含医生、科室、诊室地址、挂号费)、visit_wait(候诊)、follow(随访:随访时间、状态、反馈、记录、建议、关联病例与针药类型)、patient_management(心电监护档案:设备号、在线状态、风险等级、采样率、报告状态)、patient_blood(血压)、patient_pharmacy_plan(用药计划)、prescription/pre_medicine(处方)、patient_propaganda(宣教文章)、questionnaire_public(问诊表,内容以 JSON 存储)。

核心功能

  • 排班与号源管理VisitPlanController 新增排班时校验医生是否存在、日期是否有效,并拦截”当前医生已在某日安排了出诊”的重复排班;挂号级别与价格从医生关联的 registration_rank 自动带出;已有患者挂号的排班禁止修改和删除(“当前排班已有患者挂号,不能修改/删除”),保证历史数据不可篡改
  • 患者端在线预约pagesOrder/pages/index 顶部提供两周日期横向滚动选择,按医生卡片折叠展示上午 8:30–12:00、下午 14:00–17:30 的时段标签,已约时段置灰禁用;提交预约走 AppPatientVisitAppointmentController.addAppointment,先用 ReentrantLock 加锁、再用 Redis 键做 5 秒防重复提交(“请勿重复提交”),服务端校验患者存在性与”今日已在该医生预约过某时段,不能重复预约”,排班无空闲时段时返回”该医生今日排班已满”;成功后按最小时段自动分配并生成 OrderNoUtils 预约编号,同时插入候诊记录
  • 医生工作台叫号doctorworkbench 页面展示”待就诊患者”队列与”当前叫号患者”(姓名、年龄、病例号),医生可一键”叫号”、对未到场患者”跳过”、就诊完成点”完成”,卡片下方还提供”点击添加挂号”入口为现场患者补录挂号;预约状态与候诊记录在 visit_wait 中联动
  • 慢病随访FollowController 提供随访列表、导出 Excel、增删改查,按患者姓名/年龄/性别/就诊时间/医生筛选;非管理员登录时后端先经 medicalService.selectMedicalListByLabour 按医生工号取出其管辖病例再过滤数据,实现随访数据权限隔离;随访详情一次返回随访记录与关联处方,字段含随访时间、患者反馈、记录、建议会诊、针药类型与患者属性标记
  • 患者端健康管理myListPage 下患者可查看血压记录(bpRecord)、用药历史、收藏与我的随访;用药计划(patient_pharmacy_plan)按早、中、晚三个时间点设置服药时间、频次与每次剂量,支持停用/启用;patient_propaganda 宣教文章记录阅读量与收藏数,配套 patient_propaganda_read 阅读记录;慢病量表覆盖抑郁(patient_depression)、失眠(patient_insomnia)、便秘(patient_constipation)、糖尿病(diabetes),支持模板导入批量录入
  • 健康监测与医患沟通:患者端支持蓝牙连接心电设备、查看静态/动态心电与报告(patient_management 维护设备在线状态、风险等级、采样率与报告生成状态);医生端 startToWork 诊断工作台与患者实时对话(WebSocket + 讯飞语音听写),可切换模型 A/B 并由 proxyRequest 代理大模型生成回复,点击”结束诊断”完成问诊

功能截图

暂无运行截图。

快速上手

  1. 在 MySQL 8 中新建数据库 chronic_disease(utf8mb4),导入 sql/chronic_disease.sql(约 15MB,含全部表结构与种子数据);
  2. 修改 chronic_disease/ruoyi-admin/src/main/resources/application-druid.yml 中的数据库地址、账号密码,按需配置 Redis,然后启动 ruoyi-admin 模块(已引入 chronic 业务模块依赖);
  3. 管理后台在 chronic_disease/ruoyi-ui 目录执行 npm installnpm run dev,浏览器访问 http://localhost:2324vue.config.js 中已配置 /prod-api 代理到后端;
  4. 患者端用 HBuilderX 打开 patient_uniapp 工程,运行到 App 或微信小程序(common/request_url.js 中可切换线上 https://ecg.mindyard.cn/prod-api/ 与本地测试地址),即可体验选日期、选医生、选时段预约与血压、用药、宣教等功能。

总结

这个项目的价值在于把慢病管理的多个环节串成了一条完整链路:排班决定号源,患者端按日期和时段选号,预约接口用锁和 Redis 双重防并发,挂号后自动进入候诊队列供医生叫号,就诊后随访、用药计划、血压记录、宣教与量表又构成长期管理闭环,每个环节都有对应的表和接口承接,边界清晰。技术选型上它是典型的若依生态实践:Spring Boot + MyBatis-Plus + Redis + JWT 的后端,Vue 2 + Element UI 的管理端,uni-app + uView 的患者端,还叠加了 WebSocket 实时通信、讯飞语音听写、大模型对话与腾讯云 SDK,覆盖了从 Web 后台到移动端、从数据采集到 AI 辅助的完整技术面,非常适合作为医疗类多端应用的开发参考。