大家好,我是一名在校Java练习生,现在来分享一下学习成果,与各位共同学习进步。

经过几个月的奋战,“中州养老护理系统”的项目学习终于顺利完结了。回顾这段历程,与其说记录解决了多少Bug,不如说是记录了如何将一个个复杂的技术点(如若依框架、华为云IoT、百度千帆大模型)落地到真实的业务场景中。

这个项目不仅仅是一个CRUD的管理系统,它包含了一个后台管理系统(管理员和员工用)和一个微信小程序(家属用)。今天,我想重点分享几个项目中最具挑战性、也是我最满意的核心技术实现。


第一部分:基于若依(RuoYi)框架的高效开发

技术栈: SpringBoot + MyBatis-Plus + MySQL + Redis + Vue3

项目初期,为了快速搭建基础功能并保证开发效率,项目选择了**若依(RuoYi)**作为后端基础框架。

  • 代码生成器: 对于“房型设置”、“护理项目”这类标准的CRUD模块,我直接利用若依的代码生成功能,根据数据库表结构一键生成了前后端的基础代码。这让我可以跳过重复性工作,将精力集中在业务逻辑上。
  • 动态表单: 在“入住办理”模块中,表单字段非常多且复杂。我使用了若依提供的动态表单功能,通过拖拽的方式快速构建了前端页面,省去了大量手写表单验证和布局的时间。

总的来说,若依框架帮助我快速完成了项目的骨架搭建和基础功能开发。


第二部分:处理海量IoT设备数据

问题背景: 养老院部署了大量智能设备(如手环),用于监测老人的心率、血氧等健康数据。我们预估这些设备每天会产生约70万条上报数据。

解决方案:
面对如此大的数据量,项目中采取了以下措施来保证系统稳定:

  1. 异步处理: 设备数据通过华为云IoT平台上报后,我们将其推送到 RabbitMQ 消息队列。后端服务通过自定义的线程池异步消费这些消息,避免了同步写库造成的阻塞。
  2. 冷热数据分离:
    • Redis缓存最新数据: 家属在小程序上查看老人状态时,只需要最新的数据。我们将这部分高频访问的数据存入Redis,确保查询速度。
    • MySQL存储历史数据: 所有原始数据都会持久化到MySQL,用于后续的历史趋势分析。
  3. 数据清理与索引优化:
    • 定时清理: 考虑到大部分历史数据(尤其是正常的)价值会随时间递减,我们设置了一个定时任务,定期清理半个月之前的正常数据,有效控制了数据库的体量。
    • 添加索引: 针对家属查询历史数据的场景,我们在MySQL的数据表上为常用的查询字段(如设备ID、时间戳)创建了索引,显著提升了查询效率。

这套方案在保证数据完整性和查询性能的同时,也保证了家属端的流畅体验。


第三部分:实用的智能报警机制

业务需求: 当设备上报的数据异常(如心率过高)时,系统需要通知护理员。但为了避免因数据抖动导致频繁报警(“狼来了”效应),我们需要一种更智能的处理方式。

实现方案(基于Redis):
我们的报警机制主要依赖Redis的两个特性:计数器和带过期时间的Key。

  1. 沉默期检查: 每次收到设备数据,首先检查Redis中是否存在该设备的“沉默Key”。如果存在,说明该设备正处于沉默期,直接丢弃本次数据,不再进行后续判断。
  2. 异常计数: 如果不在沉默期,则根据预设的报警规则判断数据是否异常。若异常,则对该设备的异常计数器执行 INCR 操作。
  3. 阈值触发与沉默: 当计数器的值达到设定的阈值(例如连续3次异常),系统会触发报警(通过WebSocket实时推送给护理员),并同时在Redis中为该设备设置一个带过期时间(例如5分钟)的“沉默Key”。

具体实现逻辑:
当接收到一条设备数据时,系统首先检查该设备是否存在“沉默Key”。如果存在,则直接丢弃,不再进行任何处理。如果不存在,则根据报警规则判断数据是否异常。若异常,则对计数器执行 INCR,并检查计数值是否达到阈值。一旦达到,立刻触发报警,并同时设置一个带过期时间的“沉默Key”。

效果:这个设计简单有效,既能及时发现持续性的异常情况,又能有效过滤掉瞬时的、无意义的数据波动。


第四部分:AI辅助健康评估

功能介绍: 老人入住前需提供一份PDF格式的体检报告。传统方式下,工作人员需要花费大量时间阅读报告并做出评估。为此,我们引入了AI来辅助这项工作。

技术实现:

  • 大模型选型: 经过调研,我们最终选择了百度千帆大模型(ERNIE Bot 4.0),主要因为它在中文理解和医疗领域有较好的表现,并提供了易用的SDK。
  • Prompt工程: 我们最初尝试让大模型直接读取OSS上的PDF链接,但发现其内容提取不完整。后来改为先用工具将PDF解析为纯文本,再将文本拼接到Prompt中发送给大模型。虽然这种方式增加了Token消耗(单次评估成本约1元),但换来了更高的分析准确度。
  • 输出结构化: 我们在Prompt中明确要求大模型以JSON格式输出结果,包含“健康评分”、“异常项解读”和“护理建议”三个部分,方便前端直接展示。

这个功能极大地减轻了工作人员的负担,让他们能更快地了解老人的健康状况,并结合自身经验做出更精准的护理等级判定。


第五部分:总结与展望


通过这个项目的学习,我深刻体会到,一个优秀的系统不仅仅是代码的堆砌,更是对业务逻辑的深度理解。从若依框架的快速搭建,到利用Redis和MQ解决高并发问题,再到引入AI大模型处理非结构化数据,每一个环节都让我成长了许多。

此外,这个项目还有很多可以优化的地方,比如未来可以考虑将单体架构拆分为微服务,以应对更大的业务规模。

 

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐