公司动态
医院病房订餐系统架构设计与一床一码技术实现详解
医院病房订餐系统的技术实现不同于通用外卖平台。它在场景上有几个鲜明的技术约束用户患者位置固定且需要精准定位到床位、订单具有多餐多日的前置性、配送路径需要考虑楼栋和楼层三维空间、订餐高峰集中在固定时间段形成并发压力。这些问题放到一起来解对系统架构和数据模型设计提出了相当具体的要求。本文从信息科或技术负责人的视角出发拆解一床一码订餐系统的核心技术实现涵盖数据模型设计、订单聚合算法、配送路线优化、HIS系统对接方案和高并发场景处理五个维度。一、系统整体架构系统整体采用经典的分层架构自下而上分为四层1基础设施层包括二维码码牌亚克力/PVC物理载体、移动手持机配送终端、云打印机小票/标签打印、服务器及网络环境。这一层解决的是物理世界到数字世界的入口问题。2数据层核心数据实体包括床位Bed、科室Department、楼栋Building、菜品Dish、菜谱Menu、订单Order、配送任务DeliveryTask等。数据层同时负责与HIS系统的接口对接获取患者基本信息和饮食医嘱。3业务逻辑层处理订单生命周期管理创建→支付→备餐→配送→完成、菜谱管理、备餐统计聚合、配送路线规划、发餐状态追踪等核心业务逻辑。4接入层患者端通过微信扫码进入H5点餐页面无需安装App管理端提供Web后台供食堂管理员、后厨、配送员使用手持机端运行配送确认功能。二、二维码与床位绑定的数据模型设计一床一码是整个系统的基石。从数据模型角度看设计要点在于建立二维码、床位、患者三者之间的可变更映射关系。核心表结构设计如下① bed床位表主键bed_id关联department_id科室、building_id楼栋包含bed_code床位编号、floor楼层、room_no房间号、status使用状态等字段。床位是物理世界中相对稳定的实体即使患者出院换人床位本身不变。② qrcode二维码表主键qrcode_id通过bed_id与床位建立一对一关联。包含qrcode_url二维码指向的扫码地址携带加密token参数、material_type材质类型亚克力/PVC、print_date制作日期、status有效/失效/待更换。③ patient_bed_mapping患者-床位映射表记录当前患者与床位的占用关系。主键mapping_id关联patient_id从HIS同步、bed_id包含check_in_time入院时间、check_out_time出院时间、diet_restriction饮食医嘱如糖尿病餐低盐餐等。关键设计点二维码与床位是强绑定关系qrcode.bed_id bed.bed_id但床位与患者是弱绑定关系仅在住院期间有效。当患者出院时patient_bed_mapping标记check_out_time新的患者入院后创建新的映射记录。二维码本身无需重新制作扫码时通过bed_id反查当前在院患者即可完成定位。扫码流程的技术链路如下患者扫码 → 系统解析二维码中的token → 验证token有效性并获取bed_id → 查询patient_bed_mapping获取当前患者信息 → 加载该患者对应饮食医嘱的菜谱 → 展示点餐界面。整个链路在一次HTTP请求内通过数据库关联查询完成响应时间控制在毫秒级。二维码token采用对称加密生成包含bed_id和有效期信息防止二维码伪造和重放攻击。三、订单聚合与备餐表生成算法每餐预订截止后系统需要对全部未处理的订单进行聚合统计生成备餐表。这听起来像是一个简单的GROUP BY操作但实际场景中的复杂度在于多维度交叉统计和订单状态过滤。订单聚合的核心SQL逻辑可以概括为按菜品维度聚合——SELECT dish_id, dish_name, SUM(quantity) FROM orders WHERE order_date 当日 AND meal_type 午餐 AND status IN (已支付,待支付) GROUP BY dish_id。这是后厨最关心的维度告诉厨师每道菜要做多少份。按科室维度聚合——SELECT d.department_name, o.dish_id, SUM(o.quantity) FROM orders o JOIN beds b ON o.bed_id b.bed_id JOIN departments d ON b.department_id d.department_id WHERE o.order_date 当日 AND o.meal_type 午餐 GROUP BY d.department_id, o.dish_id。用于生成各科室的配餐清单。按饮食类型维度聚合——将普通餐、糖尿病餐、低盐餐、流食等分类汇总。这个维度在传统模式中往往被忽略但恰恰是医院场景区别于普通餐厅的关键特性。对于有特殊饮食医嘱的患者发错餐的后果比不好吃要严重得多。性能方面一个500张床位的医院午餐订单量通常在几百到上千条。单次聚合查询在索引优化order_date meal_type status复合索引的情况下MySQL单表查询耗时在百毫秒以内。对于超大型三甲医院2000张以上床位可以考虑引入定时任务预聚合将统计结果缓存到Redis中备餐时刻直接读取缓存避免数据库的重复计算压力。备餐表的输出格式需要同时支持Web页面展示和云打印机直接打印。打印格式设计为表格形式表头包含菜品名称、规格、数量三列按后厨工作区分组排序热菜区、凉菜区、主食区、汤品区方便不同岗位的厨师直接按自己的区域取单。四、配送路线优化逻辑医院配送场景不同于外卖配送核心差异在于配送终点不是散点分布的地址而是楼栋和楼层空间的网格化分布配送员不骑车而是推餐车走电梯多个配送员并行配送需要分区和负载均衡。好伙狮数字食堂采用的四方阁配送模型是一个分区-分车-分人的三层调度框架第一层分区。将全院划分为若干配送区域Zone。划分依据为楼栋物理位置和楼层分布优先将同一栋楼的订单归入同一区域跨楼配送的交由独立的跨区车辆处理。区域的划分在系统初始化时配置一次后续可根据实际运行数据微调。第二层分车。每个配送区域分配一辆或多辆送餐车。车辆分配基于该区域当前餐次的订单总量进行动态计算——每台车有装载上限一般为几十份到上百份不等取决于餐盒尺寸系统自动计算所需车辆数并均摊订单负载。第三层路线规划。对于每台车的配送任务系统按楼层从低到高或从高到低取决于食堂所在楼层位置排序同一楼层按科室从左到右排序。同时遵循后送先装原则——先配送的餐品放在最外层、后配送的放在底部——装车表明确标注装车顺序。这个模型本质上是将三维配送问题降维楼栋楼层作为空间维度车辆作为运力维度订单作为负载维度。算法复杂度可控且可通过配置参数灵活调整如调整每个区域的覆盖楼栋范围、调整车辆装载上限等。五、与HIS系统的对接方案数字食堂系统需要从HIS获取两类核心信息患者基本信息和饮食医嘱。前者用于扫码后自动识别当前床位的患者身份后者用于菜谱过滤和发餐校验。对接方式主要有三种1数据库视图对接。信息科在HIS数据库中创建只读视图开放患者信息表和饮食医嘱表的查询权限数字食堂系统通过数据库连接直接读取。优点是实施简单、实时性好缺点是对HIS数据库有直接依赖需要网络可达。2接口对接RESTful API或SOAP WebService。HIS厂商提供患者信息和饮食医嘱的查询接口数字食堂系统通过HTTP调用获取数据。优点是解耦性好、标准规范缺点是需要HIS厂商配合开发接口协调周期较长。3中间表同步。定时任务如每15分钟一次将HIS的增量数据写入中间表数字食堂系统从中间表读取。这是一种折中方案在不改动HIS的情况下通过ETL实现数据同步同时避免了直连HIS库的性能风险。三种方案中数据视图对接最为常见因为实施周期短、不依赖HIS厂商配合。但需要在安全层面做好隔离——数字食堂系统仅能读取指定视图不能做任何写操作数据库连接走内网不暴露到公网。饮食医嘱的映射是一个需要特别注意的设计点。HIS中的饮食医嘱通常以编码形式存储如01代表糖尿病餐、02代表低盐餐而数字食堂系统的菜品标签需要与之对应。维护一张dict_diet_mapping饮食类型映射表来建立两边编码的对应关系是标准做法。六、高并发场景处理——早中晚订餐高峰医院订餐有明显的峰谷特征。一天三次用餐对应三个预订高峰期早餐预订集中在头一天下午4点到晚上8点午餐预订集中在上午9点到10点半晚餐预订集中在下午2点到4点。高峰期几百人同时扫码下单对系统的并发处理能力是一个考验。应对策略可以分三个层面1前端优化。扫码页面做极简设计首屏只加载当前餐次的菜品列表而非全部菜品图片使用CDN加速并做压缩处理。静态资源CSS、JS设置合理的Cache-Control头。微信JSSDK的签名获取做服务端缓存避免每次扫码都请求access_token。2接口层优化。菜品列表、菜谱查询这类读多写少的接口使用Redis做缓存TTL设置为5-10分钟。订单创建接口是写操作走数据库事务保证数据一致性。库存扣减某些菜品限量供应时采用Redis的DECR原子操作避免超卖。3数据库优化。订单表按月分表order_202607、order_202608避免单表数据量过大。核心查询字段order_date、meal_type、bed_id、status建立联合索引。慢查询日志开启定期Review并优化。对于一个500张床位的医院并发量级在百级QPS左右标准的Spring Boot MySQL Redis技术栈完全可以胜任不需要引入消息队列等重型中间件。对于超大型医院2000张以上如果单实例MySQL出现瓶颈可以做读写分离或引入RocketMQ对订单创建做异步削峰。七、总结一床一码订餐系统从技术角度看是一个典型的O2OOnline to Offline系统——线上完成订单的创建和聚合线下完成备餐和配送两端通过二维码和手持机实现数据闭环。它的技术挑战不在于单个功能有多复杂而在于整套流程穿起来之后的稳定性、准确性和可运维性。好伙狮数字食堂在这个领域积累的500余家医院落地经验本质上就是对这套流程中每一个细节的持续打磨——从二维码材质的选择到并发缓存的设计从数据模型的演进到配送分区算法的优化。对于信息科的技术负责人来说理解这些技术细节不仅有助于选型评估也能在后续的部署对接中少走弯路。