📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍
文章目录
写在前面的话
本篇文章将介绍,基于 Kafka + Spark + Redis 等技术,在药品开单的过程中,实现一种智能推荐平替药品的方案。
标题:
发明目的
本专利发明的目的是基于 Kafka + Spark + Redis 等技术,在药品开单的过程中,实现一种智能推荐平替药品的方案。
该方案可以实现海量药品的平替药品推荐值管理,同时可以不断自动校准相关推荐值,进而优化医院的药品管理,更好的服务于医护和患者。
具体方案
本专利是基于 Kafka + Spark + Redis 实现平替药品智能推荐功能,具体技术方案实现如下。
一、前置环境准备
1、部署 Kafka 环境,程序引入 Kafka 相关依赖,并进行相关配置与功能集成,定义"危急值发送"和"危急值反馈"事件,同时配置事件的消息入参格式与XSD校验文本,这两个事件将作为 Kafka 的两个主题 Topic,其中,Kafka 用于充当消息中间件,负责提供生产者和消费者的协作模式;
2、部署 Redis 环境,程序引入 Redis 相关依赖,并进行相关配置与功能集成,Redis 定义若干存储结构,将作为目标药品、平替药品、推荐值等内容的存储,并利用 Sorted Sets 结构,进行统计分析;
3、部署 Spark 环境,程序引入 Spark 相关依赖,并进行相关配置与功能集成,Spark 充当呈上启下的衔接角色,一方面用于消费 Kafka 投递的主题消息,另一方面,通过相关 API,将数据运算后,输出存储到 Redis 当中;
4、药品基础数据准备,根据院内药品字典,维护药品平替关系库,并设置平替初始推荐值;
二、核心服务实现
1、提供对外的消息生产者接口
开发消息中心生产者接口,并对外部系统开放,该接口可以用于"药品扣库存"和"平替药品推荐"这两个场景。
主要逻辑是,针对消息入参进行合理性校验、解析和处理,再通过调用 Kafka API 进行消息发送,利用生产者单例去完成消息发送。
2、利用 Spark 消费 Kafka
利用 Spark 相关的API,添加 Kafka 作为数据来源,并订阅"药品扣库存"和"平替药品推荐"这两个 Topic。
针对拉取到的消息,添加消息消费处理的代码块。
3、利用 Spark 加工流数据
Spark 通过加工引擎从Kafka中消费出数据流,在 Spark Streaming 流式计算引擎中,通过编写不同规则的脚本,对实时的数据链路进行计算,得到药品各项指标数据,保证并发的效率,又可保证数据的准确性,这样才能可以使我们系统保持稳定的进行数据的批处理。
核心内容是从 Redis 提取出目标药品的关联数据和历史数据,同时根据医生的推荐状态进行相应的推荐值运算,最终再更新回Redis中,该流程不影响药品主流程的运行。
根据医生的推荐结果,具体方案包含但不限于如下:
3.1、医生从平替药品列表中,选择某药品A进行平替,说明智能推荐是有效的,程序将加大药品A的推荐指数,并更新目标药品的 Redis 相应存储信息;
3.2、医生拒绝从平替药品列表中使用任何药品平替,继续沿用原来的目标药品,则该目标药品的还没有办法用该药品平替,程序将降低平替药品的推荐指数,并更新目标药品的 Redis 相应存储信息;
3.3、医生新增了额外的平替药品A作为替换,则目标药品的平替药品列表将新增药品A,同时设置初始值和增加推荐指数,并更新目标药品的 Redis 相应存储信息;
三、与用户门户的交互实现
1、药品开单的时候,开单界面再显示平替药品推荐列表,上面会显示药品名称、药品库存、药品推荐指数等关键信息;
2、医生若选择某项平替药品,后端推荐服务将被触发,向Kafka投递相应Topic信息,传递目标药品信息、平替药品信息、以及其他患者本次就诊相关信息等参数;
3、推荐服务消费到Kafka消息后,将从Redis 提取出相关历史数据,根据推荐状态进行运算:
四、推荐值核对扩展模块
1、增加平替药品推荐值定时服务,定期遍历提取出药品相关平替信息,进行推荐值排列更新以及平替药品的关联结构,原则上非实时的大运算都放在定时服务执行;
2、通过实时推荐和定时推荐服务的运作,将产生所有目标药品的完整推荐值清单,提供前端平替药品盘点页面,让药房管理人员,进行人工盘点审核,去除不合理的选项,进一步增加平替药品推荐库的可靠性;
技术补充
1、基于 Kafka + Spark 组合实现,利用了大数据流式引擎技术的优势,针对关联平替药品的推荐值运算,实现高可靠、高效实时、高扩展性的数据加工,最终实现平替药品清单的智能推荐;
2、将消息中心事件驱动机制应用于平替药品推荐值运算场景,从海量的诊疗事件中,为药品推荐相关的关键节点建立消息事件,通过动态订阅的方式为事件指定订阅服务,流程清晰可插拔。
json
{
"全局配置": {
"单次推荐缺省添加值" : 5,
"单次不推荐缺省扣除值" : 5,
"同医生重复推荐模式" : "allow",
"同医生重复推荐增加值" : 1,
"推荐同步计算模式" : "high",
"推荐药品展示模式" : "common",
...
},
"药品A的配置": {
"药品A的平替药品清单": [{...}],
....
/*配置包含全局配置,优先级覆盖全局配置*/
},
}
总结陈词
💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。