《基于 Kafka + Quartz 实现时限质控方案》

news2024/9/22 5:39:26

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • 背景技术
    • 发明目的
    • 具体方案
      • 消息中心的搭建
      • 构建时限质控核心服务
      • 实现时限质控辅助板块
      • 展示一些实际案例
      • 流程图:时限质控任务生成
      • 流程图:时限质控任务关闭
      • 时限质控系统总结
    • 方案特征
    • 总结陈词

CSDN.gif

写在前面的话

本篇文章分享一下博主所在公司的时限质控系统的解决方案。
主要是基于Kafka + Quartz实现,由于涉及公司隐私,内容主要以方案介绍为主,有需要探讨的可以留言。
好,让我们开始。


背景技术

1、医院质控信息系统,要求医护人员在日常工作中,需按时完成相应的病历书写任务,同时必须遵循时效性上的要求,该任务的完成情况,通常也会被加入绩效考核评估结果。针对上述工作要求,从而衍生的功能模块也称为时限质控模块。时限质控主要是对针对入科、取消入科、转科、取消转科、出院、取消出院、病情变化、完成病历书写等业务场景,根据对应的病历类型是否完成书写任务,以及是否满足时效性要求,进行提醒、统计和评分。通过时限质控提醒,医护人员可以更直观的接收到病历的书写的时限,并在时限内完成病历,医务部则可以通过有无超时书写病历来进行质控评分。
2、传统的时限质控系统,通常采用“程序定时器轮询”或“数据库触发器”实现,两者在实现时限质控功能的同时,也都存在若干缺陷。
2.1、程序定时器轮询方式,通过定时服务不断轮询关键业务数据表,当查询到符合要求的数据则触发时限质控,该方式无论从配置和实现上看都不灵活,同时耗费服务资源,效率较低。
2.2、数据库触发器方式,主要通过监听程序执行的DML语句以做出相应操作,但触发执行的逻辑功能比较单一,只适合于简单的场景,无法运行复杂程序。


发明目的

本方案的发明目的是基于Kafka + Quartz 实现低耦合、易扩展、高及时性和高灵活性的时限质控方案。通过预先针对时限质控规则进行规则维护、事件管理、质控类别维护等,利用相应的触发机制,生成或关闭相应任务,最终实现时限质控要求。
本方案摒弃了传统的程序定时器轮询或数据库触发器实现方式带来的缺陷,将时限质控涉及的临床业务节点定义成一个个事件,事件交由具体业务代码在完成相应操作的同时触发消息中心,而时限质控的生成任务和关闭任务的服务,仅需要被消息中心对应事件主题订阅即可实现。
各业务系统和时限质控系统只需要专注于自身业务逻辑,模块之间的通讯统一交由消息中心完成,最终达到模块解耦的目的。引入消息中心和事件驱动机制后,时限质控的流程是这样的,入院模块只需要关注自身逻辑,完成入院逻辑后,调用消息中心,消息中心负责触发时限质控的生成任务服务,生成相应文书的书写任务并分发给指定用户。当用户完成相应病历文书的书写工作时,病历书写模块在完成自身逻辑后,也会触发消息中心,消息中心也会负责订阅时限质控的关闭任务服务,针对用户的任务按实际时限进行处理。
可以看出,整个过程中,时限质控系统和各个业务系统都是充分解耦的,同时事件主题的发布/订阅模式,可以不仅仅局限于时限质控板块,也适用于其他更多的业务需求。


具体方案

消息中心的搭建

采用 Kafka + Zookeeper 集群作为核心中间件,时限质控涉及的相关临床业务事件作为 Topic,院内的HIS和EMR系统作为消息生产者,时限质控服务作为消费者,整体采用Kafka的发布订阅模式。
1、事件模块准备步骤:
分析医院信息系统中涉及与时限质控相关的临床业务,将这些临床业务定义为一个个事件,事件包含事件编号、事件名称、病历文书类型、以及其他关键业务属性等。当信息系统中的临床业务触发后,可以通过消息中心,快速通知或触发其他系统执行相应操作,这个过程是联动并且解耦的。
2、生产者模块实现步骤:
创建生产者模块服务,该服务提供对外开放接口。当消息中心被调用后,执行生产者校验功能,包含利用XSD进行消息入参格式校验、依据消息唯一编号进行消息查重校验、以及验证事件的有效性等。校验通过后,利用生产者单例去完成消息发送,具体就是以指定的事件编号作为Topic,投递消息到Kafka。
3、消费者模块实现步骤:
创建时限质控的消费者组服务,该服务会不断从集群上拉取消息,当拉取到订阅消息后,将启动新的工作线程进行相应的逻辑处理,具体逻辑是调用时限质控核心服务,生成或关闭相应任务。

构建时限质控核心服务

时限质控核心服务主要负责时限质控相关任务的生成和关闭,该服务订阅了消息中心相应主题,当相应业务主题被触发时,消费者将调用时限质控核心服务。
时限质控核心服务包含生成任务服务、关闭任务服务、和任务中心三大板块。
1、生成任务服务的实现步骤:
1)解析消息入参,进行合法性校验,提取关键信息,例如:事件主题、患者信息、医生信息等,存储至临时变量;
2)根据事件主题读取相关时限质控规则配置信息,根据规则构建相应任务主表,任务属性包含但不限于“单次/连续配置”、“超时配置”、“关闭配置”、“提醒配置”、“触发配置”等等;
3)读取上述规则配置中的接收人配置,使用入参传递的患者和医生信息,动态替换,得出相应接收人列表;
4)利用 Quartz 产生生成时限质控任务的相应定时器,当定时器符合触发要求时,将调用任务中心进行后续操作;
2、关闭任务服务的实现步骤:
1)解析消息入参,进行合法性校验,提取关键信息,例如:事件主题、患者信息、病历类型等,存储至临时变量;
2)根据事件主题读取相关时限质控规则配置信息,根据病历类型和患者信息,判断任务是否达到完成标准;
3)若符合标准,则对任务进行关闭操作,并根据完成的时间和情况对任务状态进行更新;
4)利用 Quartz 产生关闭时限质控任务的相应定时器,当定时器符合触发要求时,将调用任务中心进行后续操作;
3、任务中心的实现步骤:
1)任务中心是最终控制时限质控任务生成和关闭的枢纽,质控核心服务中的生成任务和关闭任务服务,仅触发相应定时器,符合要求时,触发任务中心,任务中心也负责与前端的交互。
2)当任务生成服务的定时器达到触发要求,任务中心将根据预置的任务生成配置模板和相应业务入参信息,生成相应的任务,构建时限质控任务细表数据,并使用 WebSocket 等技术推送至前端,至此,任务生成完毕。
3)当任务关闭服务的定时器达到触发要求,任务中心将根据患者信息预置的任务关闭配置模板,查找符合要求的待关闭任务列表,更新时限质控任务细表数据,使用 WebSocket 等技术推送至前端,对已产生的任务进行关闭操作,至此,任务关闭完成。

实现时限质控辅助板块

1、实时推送
时限质控任务的生成和关闭,都要和用户前端进行实时交互,当任务产生的时候,需要告知用户前台界面,并实时展示出来;当任务关闭的时候,也需要告知用户前台界面,将相应任务进行删除处理。
这种效果,可以采用诸如 WebSocket 等的长连接推送模式,在浏览器和服务器完成一个握手的动作,在建立连接之后,服务器可以主动传送数据给客户端,客户端也可以随时向服务器发送数据。
使用 WebSocket 等推送模式,要考虑其高可用性,建立完善的功能机制,包含但不限于如下:心跳机制、断网自动重连、消息补发机制、离线消息处理、历史消息查询、消息的压缩机制等。
2、任务看板
在医护人员登入之后的前台主界面,需要一个专门的组件,用于时限质控信息展示,该组件可以是一个独立的使用iframe嵌套的html界面。
该组件可以用于展示该用户未完成的时限任务,例如:如XX患者,首次病程需在入院后8小时内完成(超时x小时/x小时候超时),用户点击该任务,即可跳转到该病人的病历书写界面,进行病历的创建。
当任务关闭的时候,前台界面收到推送消息,也可以在该组件针对该任务做出响应,例如:添加删除线效果。
3、质控统计
时限质控的数据表,将会收集到所有产生的用户任务的处理情况,需要针对此类数据,做出统计分析功能,才可以利用时限质控带来的效果,例如用于作为输出报表或作为绩效扣分的依据。
质控系统的时限质控统计界面,应该包含但不限于如下功能:按不同维度查询各类数据、导出各类报表、生成统计图表,针对质控情况进行评分,质控任务的闭环信息查看,以及对后续情况进行预测分析。
统计页面的关键信息包含但不限于:时限任务的基本规则属性、参与人员、开始时间、完成的时间、超时完成/超时未完成的时间、任务完成状态等,方便质控员清晰地看出病历的整体书写情况。
4、评分判定
时限质控的最终目的是为了规范医疗人员的日常行为,引导其满足及时性要求,因此,通过需要与绩效评分挂钩。
在质控的方案管理界面通过将评分规则与时限质控规则进行绑定,在时限质控统计界面,对医生超时完成/超时未完成的时限规则进行快速评分。
5、数据修正与定时补推
借助消息中心事件驱动机制实现的实现的时限质控效果,在达到解耦灵活的同时,我们也需要充分考虑由于消息中间件稳定性引发的数据丢失,以及对应的处理方案。
针对时限质控的数据丢失,可以考虑增加数据修正功能。在质控的数据修正界面,记录了触发失败的时限规则,可以对其进行一个重试操作,还可以对时限任务进行关闭操作,保障了当有配置错误或程序问题导致的任务提醒或关闭异常,进行一个手动的修复。
与此同时,也可以考虑增加定时补推机制,利用定时服务,定时去判断是否存在应该生成但是没生成的,例如通过日志捕捉业务方触发了相关埋点,这种情况给予生成;判断应该关闭但是没关闭的,例如已经书写了病历,但任务没被关闭,针对这种情况,直接将任务给予关闭。
6、统一定时规则配置
提供统一的质控任务定时规则配置界面,不依赖于业务方,针对单次指定时间、连续固定时间、连续不规则频率等定时任务产生规则,进行统一的配置。针对任务关闭,也支持设置业务根据组合Key、互斥关闭等高级功能。

展示一些实际案例

案例1:关于“首次病程记录在入院8小时内完成”的时限质控流程
1)护士为患者办理“入院登记”,该业务的后端接口,将在完成相应入院逻辑后,触发消息中心的“入院”事件;
2)由于该“入院”事件,订阅了“时限质控 - 生成服务”,当该事件对应主题,有消息产生时,消息中心消费者将拉取相应消息,帮触发该时限质控服务;
3)该“时限质控 - 生成服务”,会产生相应的病历文书的时限质控书写任务,其中包含“首次病程记录在入院8小时内完成”,同时利用消息入参信息,查询到该患者的主管医生,通过 WebSocket 等实时推送机制,将产生的时限质控任务详情推送给指定医生前端系统,进而在该医生的工作桌面上,将接收到这一推送消息,在任务看板等展示组件中,生成“首次病程记录在入院8小时内完成”任务;
4)当该主管医生完成了该患者的首次病程记录的书写,在点击“确认完成”按钮的同时,将在完成相应书写任务完成的逻辑后,还将触发消息中心的“完成病历书写”事件;
5)由于该“完成病历书写”事件,订阅了“时限质控 - 关闭服务”,同样的,在该事件对应主题,有消息产生时,消息中心消费者将拉取相应消息,帮触发该时限质控服务;
6)该“时限质控 - 关闭服务”,将从消息入参里,提取该份病历的患者基本信息、病历类型等元素,进而判断是否关闭已产生的病历书写任务,若符合关闭要求,则根据完成时间针对已产生任务做出时效性评价,同时,通过 WebSocket 等推送机制,将关闭任务的信息推送至指定医生的前端系统,做出相应处理,例如自动关闭该任务。

流程图:时限质控任务生成

image.png

流程图:时限质控任务关闭

image.png

时限质控系统总结

一种基于事件驱动的时限质控系统,包括如下步骤:
1、业务系统异步触发消息中心的指定事件埋点;
2、消费者服务从消息中心拉取消息,触发时限质控服务;
3、时限质控服务根据事件类型和规则配置,判定任务操作是生成还是关闭,以此生成对应的定时器;
4、定时器满足触发条件后,调用任务中心服务,生成或关闭对应的任务,并推送至用户前台进行相应展示;


方案特征

1、基于Kafka + Quartz 实现时限质控方案:
本方案采用事件驱动架构,借助事件消息的通讯作为基础,构建完善的时限质控系统。摒弃了传统的程序定时器或数据库触发器实现方式带来的缺陷,将时限质控涉及的临床业务节点定义成一个个事件,事件交由具体业务代码在完成相应操作的同时触发消息中心,时限质控的生成任务和关闭任务的服务,仅需要被消息中心对应事件主题订阅即可实现,真正做到了低耦合、高内聚的模块化设计。
同时,利用 Quartz 作业调度框架,实现定时任务生成与关闭的效果。简化了定时任务的管理和调度,允许开发人员定义各种不同类型的任务,并在指定的时间点或间隔触发它们的执行。Quartz 提供了可靠的任务调度机制,确保任务按照预定的计划运行,并具备容错和持久化的能力,即使在应用程序重启后也能保持任务的状态。
2、时限质控任务的易扩展:
由于底层基于事件驱动架构实现,若需要增加其他相同或不同业务场景下的时限质控规则,无需修改任何时限质控服务代码,业务系统至多仅需要触发相应的消息中心事件埋点,订阅对应的时限质控服务,针对任务的基本属性进行配置即可实现。完全做到灵活便捷的扩展,让时限质控服务与业务系统解耦。


总结陈词

上文介绍了博主所在公司的《基于 Kafka + Quartz 实现时限质控方案》方案。
💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

CSDN_END.gif

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玳数科技集成 Flink CDC 3.0 的实践

摘要:本文投稿自玳数科技工程师杨槐老师,介绍了 Flink CDC 3.0 与 ChunJun 框架在玳数科技的集成实践。主要分为以下六个内容: 背景技术选型架构设计挑战与解决方案上线效果未来规划 1. 背景 玳数科技对内外部用户提供了一站式的数据开发治理…

【BUG】已解决:error: subprocess-exited-with-error

已解决:error: subprocess-exited-with-error 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主…

【Vue】深入解析 Vue 生命周期:从创建到销毁的完整流程

文章目录 一、Vue 生命周期概述二、创建阶段1. beforeCreate 钩子2. created 钩子 三、挂载阶段1. beforeMount 钩子2. mounted 钩子 四、更新阶段1. beforeUpdate 钩子2. updated 钩子 五、销毁阶段1. beforeDestroy 钩子2. destroyed 钩子 六、Vue 3 的生命周期钩子变化七、生…

PHP pwn 学习 (2)

文章目录 A. 逆向分析A.1 基本数据获取A.2 函数逆向zif_addHackerzif_removeHackerzif_displayHackerzif_editHacker A.3 PHP 内存分配 A.4 漏洞挖掘B. 漏洞利用B.1 PHP调试B.2 exp 上一篇blog中,我们学习了一些PHP extension for C的基本内容,下面结合一…

软件著作权申请教程(超详细)(2024新版)软著申请

目录 一、注册账号与实名登记 二、材料准备 三、申请步骤 1.办理身份 2.软件申请信息 3.软件开发信息 4.软件功能与特点 5.填报完成 一、注册账号与实名登记 首先我们需要在官网里面注册一个账号,并且完成实名认证,一般是注册【个人】的身份。中…

STM32智能城市交通管理系统教程

目录 引言环境准备智能城市交通管理系统基础代码实现:实现智能城市交通管理系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:城市交通管理与优化问题解决方案与优化收尾与总结 1. 引言 智能城…

HTTP协议、Wireshark抓包工具、json解析、天气爬虫

HTTP超文本传输协议 HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP 协议的重要特点: 一发一收…

vscode+wsl2+anaconda环境的配置与使用

目录 下载anaconda Anaconda使用参考 vscodeubuntuanaconda 先用vscode连接本地ubuntu。 如果没有安装wsl2与ubuntu,可点击下面的链接。 问题:wsl install 无法解析服务器 成功记录: 在vscode终端用ubuntu安装anaconda。 创建pytho…

mybatis 主键的特殊要求

这是一条插入语句: 其目的就是为了将这个role对象插入到数据库, 然后他会根据getGeneratedKeys来自动回填id. 但是, 实际工作往往不是我们想象的那么简单,需要根据一些特殊的关系设置主键id 的值。 假设我们取消表trole 的id自增的规则,我们的要求是:如…

【element plus】el-tooltip限制宽度及自定义背景色

根据官方文档&#xff0c;使用popper-class参数为tooltip添加自定义内容&#xff1b;其中该类名注意不能够加scope标签中&#xff0c;否则无效。 <el-tooltip effect"dark" :popper-class"box-item" :hide-after"100" placement"right&q…

PyTorch 深度学习实践-处理多维特征的输入

视频指路 参考博客笔记 参考笔记二 通过多个线性模型来模拟非线性的空间变换&#xff0c;矩阵计算就是不同维度之间的空间转换 说明&#xff1a;1、乘的权重(w)都一样&#xff0c;加的偏置(b)也一样。b变成矩阵时使用广播机制。神经网络的参数w和b是网络需要学习的&#xff0c…

【Chatgpt大语言模型医学领域中如何应用】

随着人工智能技术 AI 的不断发展和应用&#xff0c;ChatGPT 作为一种强大的自然语言处理技术&#xff0c;无论是 自然语言处理、对话系统、机器翻译、内容生成、图像生成&#xff0c;还是语音识别、计算机视觉等方面&#xff0c;ChatGPT 都有着广泛的应用前景。特别在临床医学领…

Web3D:WebGL为什么在渲染性能上输给了WebGPU。

WebGL已经成为了web3D的标配&#xff0c;市面上有N多基于webGL的3D引擎&#xff0c;WebGPU作为挑战者&#xff0c;在渲染性能上确实改过webGL一头&#xff0c;由于起步较晚&#xff0c;想通过这个优势加持&#xff0c;赶上并超越webGL仍需时日。 贝格前端工场为大家分享一下这…

大数据架构对比记录

Lambda架构 -维护两套项目&#xff0c;开发和维护成本高 -两套链路&#xff0c;数据容易不一致 -数据计算成本大&#xff08;例如原定每小时计算一次&#xff0c;但有额外新需求需要计算两点半-三点半之间数据&#xff0c;则需要重新计算&#xff09; Kappa -过于依赖kafka消…

Fiddler下载安装使用教程(包含移动端抓包)

一、官网下载安装 Download Fiddler Web Debugging Tool for Free by Telerik 1、下载Classic版本&#xff0c;并安装 2、安装完成后展示页面如下 3、点击Tools-options&#xff0c;如图所示勾选&#xff0c;允许抓取https请求 4、点击Actions-Export Root Certificate to D…

Spring如何管理Mapper

目录 一、背景二、猜测三、源码查看步骤1、创建MapperScannerConfigurer.java2、MapperScan注解3、MapperScannerRegistrar执行registerBeanDefinitions方法4、MapperScannerConfigurer执行postProcessBeanDefinitionRegistry方法5、执行doscan6、设置beanClass7、使用jdk生成代…

【自学安全防御】三、企业双机热备和带宽管理的综合实验

实验拓扑&#xff1a; 实验任务&#xff1a; 12&#xff0c;对现有网络进行改造升级&#xff0c;将当个防火墙组网改成双机热备的组网形式&#xff0c;做负载分担模式&#xff0c;游客区和DMZ区走FW3&#xff0c;生产区和办公区的流量走FW1 13&#xff0c;办公区上网用户限制流…

解读「快意」大模型关键技术,揭秘实践中的挑战与创新

导读 2024年6月&#xff0c;GAITC 2024全球人工智能技术大会在杭州举办&#xff0c;在视觉大模型关键技术与应用主题论坛上&#xff0c;快手NLP专家林梓佳向参会者汇报了快手「快意」大模型研发过程中的多个关键技术创新&#xff0c;以及应用落地过程中的经验与挑战。 快手作…

为什么需要加密软件?2024五款电脑文件加密软件推荐

在高度数字化的2024年&#xff0c;数据安全对于个人和企业而言都显得至关重要。加密软件作为保护敏感信息的利器&#xff0c;扮演着不可或缺的角色。从个人隐私数据到企业财务记录、健康信息乃至企业核心机密&#xff0c;加密软件都能有效防止未经授权的访问。 加密软件的重要…

GitHub私有派生仓库(fork仓库) | 派生仓库改为私有

GitHub私有派生仓库 前言解决方案 前言 在GitHub上Fork的派生仓库默认为公有仓库&#xff0c;且无法修改为私有仓库。 若想创建私有的派生仓库&#xff0c;可通过GitHub的导入仓库功能实现&#xff0c;具体步骤请参见下文解决方案。 解决方案 打开GitHub页面&#xff0c;在个…