返回作品

护工预约系统

创建于 2025 年 5 月 4 日

标签
  • Spring Boot
  • MyBatis
  • Easy-Query
  • PageHelper
  • MySQL
  • Redis
  • JWT
  • Vue 3
  • Element Plus
  • Vite

项目介绍

护工预约系统(医院护工服务管理平台)面向”患者需要陪护、护工提供服务”这一场景,把护工从准入到交付的整条链路搬上了系统:护工先提交实名认证(工号、健康证、护理资格证、证件照),管理员审核通过后才能获得排班;管理员按科室/病区为护工排班,支持请假、调班、休息并保留调整记录;患者在医院官网门户上浏览服务项目与护工排班,按排班时段发起预约,护工确认后上门服务,服务完成后患者对本次服务打分评价。数据全部落到 tb_appointmenttb_scheduletb_certificationtb_evaluation 等业务表中,形成一个从认证、排班、预约到评价的完整闭环。

工程由三部分组成:20250504护工预约系统-api 后端(若依多模块工程)、20250504护工预约系统-web 前端(RuoYi-Vue3 改造)和 250504-hugong.sql 数据库脚本。系统同时提供后台管理端(管理员)、前台官网门户(/welcome,面向患者/访客)和 /app-api/* APP 端接口(患者端预约、护工端接单)。种子数据中预置了 admin(管理员)、zcz(护工管理员)、xiaozhi 等账号,导入 SQL 即可体验。

项目架构

后端基于若依 RuoYi 3.8.8 骨架(Spring Boot 2.5.15 + Java),拆分为 hamp-commonhamp-frameworkhamp-systemhamp-schedulehamp-appointmenthamp-feedbackhamp-admin 等模块,业务表按预约、排班、评价、系统四个域组织。数据访问层在保留 MyBatis(AppointmentMapper.xml 等)的同时引入 Easy-Query 作为主力查询框架:实体使用 @EntityProxy 生成代理类,Controller 里直接以 easyEntityQuery.queryable(Appointment.class).leftJoin(...).where(...).select(...) 的链式 API 完成多表联查与分页,例如患者/护工的预约列表一次 leftJoin 出护工与患者的昵称头像、评价分数、认证服务价格、病房号与床位号。MySQL 8 存储数据,Druid 连接池,Redis(Lettuce)承担验证码、在线用户与缓存,身份认证沿用若依 JWT 令牌方案(token.expireTime=720 分钟),接口文档用 springfox Swagger(swagger-models 固定 1.6.2 规避类型转换问题),并保留若依的 @Log 操作日志、Excel 导出(ExcelUtil)、@RateLimiter 限流、XSS 过滤等能力。

前端是 Vite 5 构建的 Vue 3 单页应用:Vue 3.4 + Element Plus 2.4 + Pinia + vue-router 4,网络层基于 axios 封装 request.js,集成 echarts 监控图表与 @vueup/vue-quill 富文本。开发端口 80,通过 vite proxy 把 /dev-api 代理到后端 8080。页面布局上,后台是若依标准的侧边栏管理端(系统管理、系统监控、系统工具之外,新增了预约管理、排班管理、科室管理、护工认证、健康科普、轮播图等业务菜单);前台 /welcome 是一套独立的医院门户(主页、健康科普、关于我们),顶部通知公告轮播,服务板块按”生活护理 17 项、用药护理 8 项、疾病护理 7 项、病情观察 8 项、饮食护理 6 项、心理护理 3 项、安全护理 9 项、康复锻炼 4 项、失能照护 3 项、术后恢复 3 项”展示共计 65 个标准服务项目规范。

核心功能

  • 护工实名认证(tb_certification:护工提交工号(唯一索引 idx_job_number_unique)、常住地址、服务类型与价格、服务能力简介,并上传健康证、护理资格证、证件照;audit_status 在”待申请 → 待审核 → 已通过/未通过”间流转,后台认证管理页一键审核,未通过可驳回,通过后护工才能进入排班与接单
  • 排班与调班管理(tb_schedule + tb_schedule_adjustment:管理员为护工按日期、科室/病区创建排班,班次类型覆盖早班/晚班/夜班/其他,排班状态支持正常/请假/调班/休息;每次取消或调班都会写入 tb_schedule_adjustment(调整类型 0-取消、1-调班,附原因与时间),排班调整全程留痕可追溯
  • 患者预约与状态流转(tb_appointment:患者端 POST /app-api/appointment/create 按排班下单,AppAppointmentController 会先查同 scheduleId 是否存在未取消的预约,存在则返回”该排版已被预约!”,从源头杜绝重复抢单;预约记录护工、患者、服务类型与起止时间,状态按 0-待确认 → 1-已确认 → 2-已完成 / 3-已取消流转,updateStatus 在确认、完成时分别自动写入 confirmTimecompleteTime;护工端排班列表还会用 notIn 过滤掉已被预约的时段
  • 服务评价(tb_evaluation:预约完成后患者对本次服务打分(1-5 分)并填写评价内容,AppEvaluationController.create 先按 appointmentId 校验是否已评价,防止重复评价;患者与护工的预约列表会联表带出对方的评分与评价内容,形成服务口碑沉淀
  • 门户官网与健康科普/welcome 门户集成 65 项标准服务项目规范、通知公告(tb_notice 轮播展示)、轮播图(tb_carousel)与健康科普(tb_popularization,分医疗常识/疾病预防/检查指南,支持精选与发布状态,浏览量统计接口配了 @RateLimiter 限流防刷);患者扩展信息(tb_user_extend)记录病情标签、服务需求、病房号/床位号与紧急联系人,作为预约上下文供护工参考

功能截图

暂无运行截图。

快速上手

  1. 环境准备:MySQL 8、Redis(默认 localhost:6379)、JDK 8+、Node.js;
  2. 导入数据库:在 MySQL 中执行 250504-hugong.sql(Navicat 导出,含全部表结构与种子数据),并按需修改 hamp-admin/src/main/resources/application-druid.yml 中的数据库账号密码;
  3. 启动后端:在 20250504护工预约系统-api 目录执行 mvn spring-boot:run,服务运行在 8080 端口(application.yml 中已启用 druid profile、Redis、Swagger、验证码等配置);
  4. 启动前端:在 20250504护工预约系统-web 目录执行 npm installnpm run dev,开发服务器运行在 80 端口,vite.config.js 已把 /dev-api 代理到后端 8080;
  5. 访问体验:浏览器打开 http://localhost 进入后台,用种子账号 admin(管理员)体验用户/角色/预约/排班/认证/科普管理;访问 http://localhost/welcome 体验面向患者的医院门户,用患者与护工角色账号走一遍”认证 → 排班 → 预约 → 确认 → 完成 → 评价”全流程。

总结

这个项目把”请护工”这件小事做成了完整的业务系统:认证决定谁能服务,排班决定何时能约,预约接口用状态校验拦住重复下单,服务完成后评价沉淀口碑,门户科普负责获客与宣教——每一环都有对应的表、接口和页面承接,业务边界清晰。技术上它是一个典型的若依二开样板:保留了 RuoYi 的系统管理、权限、监控与代码生成全家桶,业务侧又引入了 Easy-Query 代理查询显著压缩了联表 CRUD 的样板代码,Vue 3 + Element Plus 的前端与后端 /app-api 接口共同支撑了”管理端 + 门户端 + APP 端”三种入口。整体完成度较高、可直接演示,后续若补充微信小程序端、预约时段并发锁与在线支付,就更接近真实商用形态了。