《基于 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.mfbz.cn/a/789355.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

echarts——横坐标轴文字过长如何换行

横坐标轴文字过长,想要换行 实现如下效果 具体实现代码如下: axisLabel: {show: true,interval: 0,formatter: function (value) {var ret "";//拼接加\n返回的类目项 var maxLength 4;//每项显示文字个数 var valLength value.length;//X轴类目项…

MP | 基于kmer的泛基因组分析方法及应用

2024年5月24日,中国农业大学分子设计育种前沿科学中心作物杂种优势与利用教育部重点实验室郭伟龙与姚颖垠团队在《Molecular Plant》发表了题为《A k-mer-based pangenome approach for cataloging seed-storage-protein genes in wheat to facilitate genotype-to-…

一道笔试题 - 反转列表

文章目录 描述预期结果代码 描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 如当输入链表{1,2,3}时, 经反转后,原链表变…

【RHCE】NFS 实验

主服务器 下载nfs-utils软件包: 1.如果停⽌该服务,启动并启⽤该服务: systemctl enable - now rpcbind 2.要启动 NFS 服务器,并使其在引导时⾃动启动:systemctl enable - now nfs- server 3.配置防火墙,开…

基于swagger插件的方式推送接口文档至torna

目录 一、前言二、登录torna三、创建/选择空间四、创建/选择项目五、创建/选择应用六、获取应用的token七、服务推送7.1 引入maven依赖7.2 test下面按照如下方式新建文件 一、前言 Torna作为一款企业级文档管理系统,支持了很多种接口文档的推送方式。官方比较推荐的…

【深度学习】PyTorch深度学习笔记02-线性模型

1. 监督学习 2. 数据集的划分 3. 平均平方误差MSE 4. 线性模型Linear Model 用穷举法确定线性模型的参数 import numpy as np import matplotlib.pyplot as pltx_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]def forward(x):return x * w# loss function 是 均方根误差 lo…

YoloV8改进策略:卷积篇Kan行天下之JacobiKAN,KAN遇见Jacobi多项式

摘要 将Kolmogorov-Arnold Networks (KAN) 中的B-spline替换为Jacobi多项式是一个很有创意的想法,因为Jacobi多项式在函数逼近方面表现出色,并且具有递归计算的特性。经过测试,Jacobi多项式的KAN在YoloV8中,取得了非常不错的涨点效果。下面我将概述如何构建基于Jacobi多项…

【库架一体立体库】与【传统立体库】对比

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 随着冷链物流行业的快速发展,对于冷藏设施的要求也在不断提高。库架一体式智能立体冷藏库以其高效、节能、智能化的特点,正逐渐成为行业发展的新趋势。 分享一…

大模型应用中什么是SFT(监督微调)?

大模型应用中什么是SFT(监督微调)? 一、SFT的基本概念 监督微调(Supervised Fine-Tuning, SFT)是对已经预训练的模型进行特定任务的训练,以提高其在该任务上的表现。预训练模型通常在大量通用数据上进行训…

算法:字符串相关

目录 题目一:最长公共前缀 题目二:最长回文子串 题目三:二进制求和 题目四:字符串相乘 题目一:最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀,返回空字符串 "…

mysql判断时间段是否重合

mysql判断时间段是否重合 SELECT CASE WHEN t1.start_time < t2.end_time AND t1.end_time > t2.start_time THEN ‘重合’ ELSE ‘不重合’ END AS result FROM table_name t1, table_name t2 WHERE t1.id <> t2.id;

产品经理-交互设计动手实践(11)

业内有很多画交互的工具&#xff0c;这里不过多介绍&#xff0c;互联网公司最常用的工具是Axure,墨刀,蓝湖,小瀑 它是一个专业的快速原型设计工具&#xff0c;使用它能够快速创建线框图、流程图、原型和规格说明文档。 它能快速、高效地创建原型&#xff0c;同时支持多人协作设…

不想成为失业大军,就要学习六西格玛?

最近&#xff0c;优思学院收到一封邮件&#xff0c;这封邮件的发送者是一位完成了我们六西格玛绿带课程的学生。 他的公司裡有20%的工程师被裁员&#xff0c;但值得注意的是&#xff0c;留下来的工程师中有70%人竟然都持有六西格玛绿带或黑带证书。 他的公司不仅希望利用这些…

科普文:深入理解Mybatis

概叙 (1) JDBC JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。 优点…

React文档内网搭建

React文档内网搭建流程 官网地址 官网中文地址 通过官网我们可以找到React的github存储库 ReactGitHub 在介绍中可以找到对应的文档存储库 React文档存储库 此存储库是英文文档地址,我们通过中文文档地址以及该存储库作者目录下找到中文存储库 React文档中文存储库 下载…

JavaSE语法 | 初识Java!!!

初识Java 一、Java开发环境二、初步认识Java的main方法2.1 main方法的实现2.2 运行Java程序 三、注释四、标识符五、关键字 一、Java开发环境 IDEA版本&#xff1a;IntelliJ IDEA Community Edition 2022.3.3 JDK17 Windows 11 二、初步认识Java的main方法 2.1 main方法的实…

C语言入门-1.数据的类型、数据的输入输出

数据类型常量变量&#xff08;整型-浮点-字符&#xff09; 数据类型 基本类型 整型int 符号常量 定义一个整形变量时要使用关键字int #include <stdio.h> //符号常量练习 #define PI 3 2 int main() {int i PI * 2;printf("i%d\n",i);return 0; } //7 …

解密 AI 客服:LangChain+ChatGPT 打造智能客服新时代

你需要了解 ChatGPT ChatGPT 是 OpenAI 开发的一种基于人工智能技术的自然语言处理模型。它可以通过对大量文本数据进行训练&#xff0c;自动生成高质量的回答和对话。ChatGPT 具有高效、准确、自然的特点&#xff0c;可以帮助人们更加高效地处理信息和交流。 ChatGPT 有很多…

QT TCP多线程网络通信

学习目标&#xff1a; TCP网络通信编程 学习前置环境 运行环境:qt creator 4.12 QT TCP网络通信编程-CSDN博客 Qt 线程 QThread类详解-CSDN博客 学习内容 使用多线程技术实现服务端计数器 核心代码 客户端 客户端&#xff1a;负责连接服务端&#xff0c;每次连接次数1。…

启动tomcat时提示The JRE_HOME environment variable is not defined correctly

我的情况是在已经安装过jdk后&#xff0c;启动tomcat时出现以下问题 原因是环境变量配置不正确导致的 首先确认一下jre的实际安装路径 然后修改环境变量配置文件 vim /etc/profile 添加以下内容&#xff0c;JRE_HOME为实际jre的路径 然后保存退出 让文件生效一下 source…