《基于 LatentFactor + Redis + ES 实现动态药房分配方法》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • 背景技术
    • 发明目的
    • 具体方案
      • 一、动态药房分配前置准备
      • 二、动态药房分配实现逻辑
      • 三、动态药房分配流程
    • LatentFactor 矩阵因子推导示例
    • 总结陈词


写在前面的话

本篇文章分享一下博主所在公司的动态药房分配的实现方案。
主要是基于 LatentFactor + Redis + ES 实现,由于涉及公司代码要求,内容主要以方案介绍为主,有需要探讨的可以留言。
好,让我们开始。


背景技术

医院药房是集管理、技术、经营、服务等于一体的综合性科室,是医院的重要职能部门之一,其管理影响着医院的药品管理水平和服务质量。随着医院管理模式不断改革和优化,在大规模的医院,药房逐渐趋于多元化管理,不再是以前的单点综合大药房。
门诊和住院往往会根据实际需要,配套建设不同的发药药房,不同的门诊或住院科室开药可以方便患者就近取药。同个科室在不同时间或工作日,都有可能动态配套不同发药药房。
传统模式下,医院采取维护药房配置清单,存储在关系型数据库的二维表中,管理不同维度下药房的分配情况。当医生开单时候将会访问药房配置表,动态获取符合要求的药房,并提示患者前往取药。
由于全院医生的开单操作十分频繁,判定分配药房这一逻辑,需要先从关系表加载药房配置表获取数据后,再进行大量的计算规则判断,在高并发情况下,整体接口响应效率较低,严重影响医生的开药效率和患者就医体验。同时,药房配置规则仅仅考虑单维度情况下的规则分配,因此,最终得出的药房结果,可能存在不是最优药房的情况。


发明目的

本方案发明的目的是基于ES 和 Redis 的相关技术领域,实现一种动态药房分配模式,最终形成一种高效的、更具科学性的的药房管理方法。
该方案具备如下特点:
1、支持维护多维度药房分配规则,包含但不限于科室、时间段、距离、药品库存等,改变了传统药房分配模式采用的单一因素简单验证方式,使得出的药房结果更加合理化和人性化;
2、利用 ES 和 Redis 等技术带来的快速查询机制,分别存储药房规则配置和药房分配结果,改变了传统药房分配模式采用关系型数据库的单独二维配置表方式带来的性能瓶颈,为高频开单操作下的药房分配逻辑的性能带来显著提升;
3、支持以定时策略对预置规则进行不断校准,排除不合理的因素,使规则制定更具备智能化和合理性等特性;


具体方案

本方案是一种基于 LatentFactor + Redis + ES 实现的动态药房分配方法,具体技术方案实现如下。

一、动态药房分配前置准备

1、部署 ES 环境,程序引入 ES 相关依赖,并进行相关配置与功能集成,ES 定义不同维度下的药房分配规则,建立相关结构索引;
2、部署 Redis 环境,程序引入 Redis 相关依赖,并进行相关配置与功能集成,Redis 定义药房规则提取的存储结构;
3、预先维护药房分配规则,包含但不限于如下:不同时间段下药房分配规则、不同科室下的默认药房分配规则、药房与药品库存的对照规则,医院科室与药房距离分布规则等等;
4、将上述维护好的规则,进行加工处理,同步分解各科室所有时间段规则数据,自动往ES的各个索引,写入动态药房基表数据。


二、动态药房分配实现逻辑

若采用动态药房分配模式,当产生药品开单时,其具体流程如下:
1、医生在医生工作站进行下医嘱或处方等操作时,相应的后端HIS服务将接收当前科室、时间、药品等信息,从ES的不同规则索引中,快速查找并命中数据,提取出相应的药房初始设定的规则;
2、程序将提取到的规则,按科室、时间段、各项药品库存、距离等不同策略,进行药房分配运算,得出当前入参情况下的最优药房,具体实现步骤如下;
a、根据入参传递的开单科室,从ES中提取出该科室对应的药房列表,列表中的每一个药房配置项,都配置了推荐因子,程序将药房列表根据推荐因子从大到小排列,暂存为临时变量A,利用LatentFactor潜在因子算法的矩阵编排,得到矩阵清单,“药房/科室 - 潜在因子矩阵”;
b、根据入参传递的开单时间段,从ES中提取出该时间段对应的药房列表,列表中的每一个药房配置项,都配置了时间段所属区段类型,包含但不限于班内班外、工作日和非工作日、节假日和特殊时段等元素,程序将结合当前时间段的正确定位,计算出符合要求的药房交集,并同科室步骤,按推荐因子排序,暂存为临时变量B,并得到相应的“药房/时间段 - 潜在因子矩阵”;
c、根据入参传递的药品信息,从ES中提取出所有药品对应的有存放药品的药房列表,针对列表数据取交集,即获得同时满足所有开单药品需要的药房信息,同时结合药品库存表,实时计算出库存最充足的药房,并同科室步骤,进行排序后,暂存为临时变量C,并得到相应的“药房/药品 - 潜在因子矩阵”;
d、根据入参传递的开单科室的楼层位置,利用定位服务Api,计算出和院内所有药房的实际距离,按距离大小进行排列,距离小的优先,排列后暂存为临时变量D,并得到相应的“药房/位置 - 潜在因子矩阵”;
e、针对上述规则计算得到的潜在矩阵列表,利用LatentFactor算法的稀疏矩阵求和,分别计算四个维度的用户期望药房评分矩阵R1-R4,最终汇总形成“用户/药房的总评分矩阵”,最终得到推荐因子从大到小排列的药房列表,逐个进行再次遍历核验,如果其中一个药房满足需求,则选定为最终分配药房,退出循环;
3、将上述规则计算运算得到的药房分配结果,以Key-Value结构存储到Redis中,其Key为入参传入的药品、科室、当前时间等信息,Value为Object类型,其包含药房分配结果、计算因子、计算耗时、推荐指数、有效利用次数等属性;当下次产生开单操作时,会优先从Redis中尝试查找结果数据。若匹配后,将根据相关Value属性,判定是否采用该结果,若采用则不需要再重复上述的ES提取以及规则运算逻辑。
4、同时将上述计算得到的药房分配结果,存储到开单的相关数据表中,同时返回给前端,流程结束,患者可以根据相应药房信息,前往药房取药;
5、动态药房分配系统会定期进行 ES 和 Redis 存储数据进行排查,当从中发现利用率较低、或计算因子较大、或存在互斥冲突的分配规则,及时调整相应的规则数据;


三、动态药房分配流程

image.png


LatentFactor 矩阵因子推导示例

背景:以三个矩阵,入参是科室A、早上、药品A、位置A为例。

image.png
image.png


总结陈词

上文介绍了博主所在公司的《基于 LatentFactor + Redis + ES 实现动态药房分配方法》方案。
💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377441.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从Centos7升级到Rocky linux 9后,网卡连接显示‘Wired connection 1‘问题解决方法

问题描述 从Centos7升级到Rocky9后, 发现网卡eth0的IP不正确。通过nmcli查看网卡连接,找不到name为eth0的连接,只显示’Wired connection 1’ 查看/etc/NetworkManager/system-connections/,发现找不到网卡配置文件。 原因分析 centos7使…

5G RedCap调查报告

一、5G RedCap技术背景 5G RedCap(Reduced Capability缩写,轻量化5G),是3GPP标准化组织定义下的5G裁剪版本,是5G面向中高速率连接场景的物联网技术,它的能力介于5G NR(含eMBB和uRLLC)和LPWA(如LTE-M和NR-IoT)之间,如图1所示,是5G-A(5G Advanced)的关键技术之一。…

PHP中的函数与调用:深入解析与应用

目录 一、函数基础 1.1 函数的概念 1.2 函数的定义 1.3 函数的调用 二、PHP函数的分类 2.1 内置函数 2.2 用户自定义函数 2.3 匿名函数 2.4 递归函数 2.5 回调函数 2.6 魔术方法 三、函数的参数与返回值 3.1 参数传递 3.2 返回值 四、函数的高级特性 4.1 可变函…

在linux中查找 / 目录下的以.jar结尾的文件(find / -name *.jar)

文章目录 1、查找 / 目录下的以.jar结尾的文件 1、查找 / 目录下的以.jar结尾的文件 [rootiZuf6332h890vozldoxcprZ ~]# find / -name *.jar /etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.342.b07-1.el9_0.x86_64/lib/security/policy/limited/US_export_policy.ja…

【BUG】Python3|COPY 指令合并 ts 文件为 mp4 文件时长不对(含三种可执行源代码和解决方法)

文章目录 前言源代码FFmpeg的安装1 下载2 安装 前言 参考: python 合并 ts 视频(三种方法)使用 FFmpeg 合并多个 ts 视频文件转为 mp4 格式 Windows 平台下,用 Python 合并 ts 文件为 mp4 文件常见的有三种方法: 调用…

设计模式8-桥模式

设计模式8-Bridge 桥模式 由来与目的模式定义结构桥接模式的结构结构说明 代码推导1. 类和接口的定义2. 平台实现3. 业务抽象4. 使用示例总结1. 类数量过多,复杂度高2. 代码重复3. 不符合单一职责原则4. 缺乏扩展性改进后的设计1. 抽象和实现分离(桥接模…

【云岚到家】-day05-6-项目迁移-门户-CMS

【云岚到家】-day05-6-项目迁移-门户-CMS 4 项目迁移-门户4.1 迁移目标4.2 能力基础4.2.1 缓存方案设计与应用能力4.2.2 静态化技术应用能力 4.3 需求分析4.3.1 界面原型 4.4 系统设计4.4.1 表设计4.4.2 接口与方案4.4.2.1 首页信息查询接口4.4.3.1 数据缓存方案4.4.3.2 页面静…

linux的学习(四):磁盘,进程,定时,软件包的相关命令

简介 关于磁盘管理,进程管理,定时任务,软件包管理的命令的使用 磁盘管理类命令 du du 目录名: 查看文件和目录占用的磁盘空间 参数: -h:可以看到大小的单位,g,mb-a:还可以看到文…

红色文化3D虚拟数字展馆搭建意义深远

在房地产与土地市场的浪潮中,无论是新城规划、乡村振兴,还是商圈建设,借助VR全景制作、虚拟现实和web3d开发技术打造的全链条无缝VR看房新体验。不仅极大提升了带看与成交的转化率,更让购房者足不出户,即可享受身临其境…

毕设项目springboot+vue实现的在线求职平台

一、前言 随着信息技术的飞速发展和互联网的普及,线上求职已成为众多求职者和企业招聘的重要渠道。为满足市场需求,我们利用Spring Boot和Vue技术栈,开发了一款功能全面、用户友好的在线求职平台。本文将对该平台的设计、实现及关键技术进行详…

Python与自动化脚本编写

Python与自动化脚本编写 Python因其简洁的语法和强大的库支持,成为了自动化脚本编写的首选语言之一。在这篇文章中,我们将探索如何使用Python来编写自动化脚本,以简化日常任务。 一、Python自动化脚本的基础 1. Python在自动化中的优势 Pyth…

昇思25天学习打卡营第15天|基于MobileNetv2的垃圾分类

一、关于MobileNetv2 MobileNet网络专注于移动端、嵌入式或IoT设备的轻量级CNN网络。MobileNet网络使用深度可分离卷积(Depthwise Separable Convolution)的思想在准确率小幅度降低的前提下,大大减小了模型参数与运算量。并引入宽度系数 α和…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之④:数据分析之三(数据展示)

概述 在先前探讨的文章中,我们构建了一个全面的数据测试体系,该体系遵循“数据获取—数据治理—数据分析”的流程。如何高效地构建数据可视化看板,以直观展现分析结果,正逐渐成为利用新兴技术提升效能的关键领域。伴随业务拓展、数…

SQl server 日期函数查询相关练习

练习1.按月份分析销售数据。 create database date_db; use date_db; CREATE TABLE SalesData ( SaleID INT PRIMARY KEY IDENTITY(1,1), ProductName NVARCHAR(100) NOT NULL, SaleAmount DECIMAL(10, 2) NOT NULL, SaleDate DATE NOT NULL ); INSERT INTO Sa…

华为USG6000V防火墙v1

目录 一、实验拓扑图 二、要求 三、IP地址规划 四、实验配置 1🤣防火墙FW1web服务配置 2.网络配置 要求1:DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 要求2:生产区不…

使用Python和MediaPipe实现手势控制音量(Win/Mac)

1. 依赖库介绍 OpenCV OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它包含了数百个计算机视觉算法。 MediaPipe MediaPipe是一个跨平台的机器学习解决方案库,可以用于实时人类姿势估计、手势识…

Flask 用 Redis 缓存键值对-实例

Flask 使用起 Redis 来简直就是手到擒来,比 MySQL 简单多了,不需要那么多配置,实际代码就这么多,直接复制就能用。除了提供简单实用的实例以外,本文后面还会简单介绍一下 Redis 的安装与使用,初学者也能一看…

Nginx部署Vite打包的带前缀的项目

之前有篇文章,需要参考一下:https://zhangdapeng.blog.csdn.net/article/details/140388105 在这篇文章的基础之上,我测试了Vite打包的项目。 首先,我在vite配置文件里面添加了前缀: import {defineConfig} from v…

生物素-十一聚乙二醇-沙利度胺;Biotin-PEG11-Thalidomide

Biotin-PEG11-Thalidomide,即生物素-十一聚乙二醇-沙利度胺,是一种结合了生物素、十一聚乙二醇(PEG11)和沙利度胺的复杂化合物。以下是对该化合物的详细分析: 一、组成成分及特性 生物素(Biotin&#xff09…

访问 Postman OAuth 2.0 授权的最佳实践

OAuth 2.0 代表了 web 安全协议的发展,便于在多个平台上进行授权服务,同时避免暴露用户凭据。它提供了一种安全的方式,让用户可以授权应用程序访问服务。 在 Postman 中开始使用 OAuth 2.0 Postman 是一个流行的API客户端,支持 …