基于区块链技术的移动医疗系统设计与实现

2022-04-28 00:23
电声技术 2022年3期
关键词:应用层病历科室

刘 欣

(桂林信息科技学院,广西 桂林 541004)

0 引言

日益增长的健康需求会导致患者就医次数的增加。患者每次就医都会产生相应的医疗信息数据。医疗信息包含个人就医时病症检查、医嘱、药物使用以及各种非文本形式的信息(如心电图、核磁共振图等)。这些信息都会在就医时记录在病历本或者电子病历上。但是,不同医院并不能共享这些信息数据,患者去不同的医院,无法准确提供历史就医信息。同时,医疗记录包含了大量的个人敏感信息,使用文本或者医院电子病历容易丢失或泄露个人隐私。而且,由于不同医院的医科重点不同,一个患者可能会针对不同的病情选择不同医院进行诊疗。不同医院所记录的医疗信息是不共享的,有可能造成因历史病情不明确而引起误诊的情况。

随着互联网技术的飞速发展,移动互联网已经完全融入人们的生活,给人们生活带来了极大的便利。许多人出门只带一部手机,就能满足生活的各种需求。如果将医疗信息在手机上展示,用户能够随时随地查看,就医时也可以方便提供给医生,这将对医疗行业的发展产生一定的促进作用[1]。

近年来,区块链技术的出现为许多行业带来了新的可能。区块链在我国的发展范围比较广,在身份验证、跨境支付、溯源防伪、车联网及版权保护等不同领域都有一定的应用。区块链具有去中心化、不可伪造、不可虚构、不可篡改等特点,这些特点非常适用于医疗信息在真实、稳定、安全方面的需求[2]。

1 技术简介

移动医疗系统设计的主要目的是安全地储存患者的医疗数据,同时方便用户查看病历。本系统采用区块链技术存储患者数据,依靠区块链的不可篡改特性,保障数据安全。为方便患者和医生的操作,本系统在区块链的基础上设计上层应用,提供Web 页面供医生上传病历数据、发布医疗相关新闻等,提供移动App 端供患者查看病历,并且提供病症初步自查的功能。

本系统采用的技术架构为Spring Boot+Mybatis-Plus+Kafka+Dubbo+MySQL+Maven+JetPack。

Spring Boot 本身并不是一门技术,而是一个框架。它更快、更敏捷地集成Spring 开发所需要的各种配置,大大降低了Spting 入门的难度。

Kafka 是一种高吞吐量的分布式发布订阅消息系统。它可以解耦系统的各个模块,使用消息队列的方式进行数据通信,非常适用于大并发量、高负荷的系统工作。

MySQL 是轻量级的关系型数据库。本系统使用MySQL 数据库存储医疗信息外的非关键性数据,以减轻区块链的负担。

Maven 是用于构建和管理Java 项目的工具,其主要作用是对于Jar 的引用和项目的构建。开发者只需要在pom.xml 文件中声明groupId,artifactId以及version 等信息,Maven 将自动下载配置好对应版本的Jar 包。

Dubbo 是一个分布式服务框架,主要用于远程通信,是目前主流的微服务框架。Zookeeper 是一个分布式的、开放源码的分布式应用程序,提供协调服务。它提供的服务包括配置维护、域名服务、分布式同步及组服务等。Zookeeper 适合作为Dubbo注册中心发布服务。

Jetpack 是Google 官方发布的一个基于Android的组件架构库。它是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android 版本和设备中一致运行的代码,轻松地处理由Android 版本不一致和设备不同产生的差异性和兼容性问题[3]。此类库包含界面导航、分页、数据绑定、视图绑定及生命周期等。Android Jetpack 用于管理各种烦琐的操作进程,如后台任务、导航及生命周期管理等。

2 系统分析

本系统分为底层和应用层两部分。底层主要为区块链部分,用于存储重要的医疗数据;应用层主要为Web 系统和App,方便医生上传数据,病人查看数据。

2.1 区块链部分

使用Merkle Tree 作为区块链的数据结构,可以快速归纳和检验区块数据的存在性和完整性。需要构建出一颗二叉树,将区块中的消息作为二叉树的叶节点,根节点存放树的Hash 值。由此,只需检验根节点Hash 值是否匹配即可检验消息是否被篡改。

区块链由多个区块相互链接而成,数据主要存储在区块中,区块链中的第一个区块称为创世区块。所以,要完成区块链的设计首先需要设计好区块。区块包含了区块头、区块体、区块Hash 值三部分。其中,区块头用来存放版本号、父区块Hash 值等数据,区块体存放消息数组Merkle Tree,区块Hash 值使用Pow 共识算法进行计算得出具体值[4]。区块链使用时需要满足消息传输功能,一方面需要与应用层相互通信,另一方面区块链网络中其他节点发出请求时需要处理响应请求。

基于区块链技术设计医疗系统,主要是为了保证数据的可靠性和安全性,使得查询出的数据能够被人信任,解决跨机构的信任危机。区块链处于系统底层部分,主要实现构建与通信的功能。

2.2 应用层部分

应用层分为Web 端与App 端。Web 端主要管理医生信息、医院科室信息以及病历信息。App 端用于查看病历信息、浏览新闻以及查看、修改个人信息等。

3 系统设计

3.1 区块链结构设计

本系统设计出一套区块结构用来存储数据,同时也方便查询数据。大体思路如下:首先设计出消息类Message 用来在Kafka 中传递和接收消息,再设计出节点类MessageNode 来存储Message 数据,根据多个MessageNode,构建出一颗Merkle 树,然后填充区块,最后将区块加到区块链中。

3.2 应用层设计

本系统应用层主要由用户端App 和医生端Web 管理后台两个部分组成。App 端包含注册登录、查看病历、浏览新闻及管理个人信息等功能[5]。Web 端包含注册登录、新增病历、病历列表及发布新闻等功能。若Web 端账号权限为管理员,则具有科室管理和医生管理等权限。

3.3 应用层与区块链层的交互设计

医生在应用层上传病历信息,用户或者医生也可以在应用层查看病历信息,而病历信息作为核心数据,保存在区块链层。由于应用层与区块链层分属不同的服务,无法像普通数据库一样对数据进行直接操作。本系统采用Kafka 和Dubbo 技术解决跨服务通信问题。为保证数据的安全性,本系统还采用了RSA 加密方式对传输的信息进行加密。应用层把加密信息通过Kafka 传递给区块链,区块链接收到信息后进行解密与校验。应用层需要查询病历信息时,使用Dubbo技术从区块链中获取数据。应用层查询病历信息时的泳道图如图1 所示。

图1 应用层与区块链病历查询泳道图

4 系统实现

4.1 Web 医生端

系统会为医院管理员提供专用的管理账号,由管理员为医院医生创建个人账号。医生主要拥有新闻管理、病历管理及个人信息模块。管理员在此基础上还拥有医生管理和科室分类模块。管理员登录成功后的系统界面如图2 所示。

图2 管理员功能界面图

4.1.1 新闻管理功能

新闻管理模块主要用于医生发布与医疗相关的信息,如某疾病的病理、养生知识及药物使用规范等,主要用于宣传医疗常识。医生在新闻管理页面可以编辑新闻标题,并使用富文本框编辑新闻内容,编辑完成后提交到后台数据库。若用户具有管理员权限,可以为新闻设置推荐,被推荐的新闻将在用户App 中优先展示。

4.1.2 病历管理

病历管理主要包括病历列表和新增病历两个功能。

(1)病历列表。医生可以输入患者的身份证号进行病历查询,查询结果将以列表形式展现在页面中。由于病历信息存在于区块链中,所以当页面将数据提交给服务器时,服务器通过Dubbo 调用区块链服务,在区块链中进行数据查询,最终将查询到的结果返回至应用层进行展示。

(2)新增病历。患者就医会产生医疗信息,医疗信息由医生导入到系统中。医生需要将患者的身份证号与医疗信息进行绑定。新增病历页面包含病情标题、病情详细描述,同时还能上传图片。由于病历信息需要存储于区块链中,系统会将所有数据打包加密发送给Kafka。区块链通过Kafka 接收信息,并对信息进行解密和验证[6]。

4.1.3 医生管理

医生并不能直接注册账号,需要医院管理员为其创建账号。医生管理模块有医生列表、新增医生信息、修改医生信息、删除医生信息等功能。医生信息主要包含工号、所属科室、账号、密码及身份证号等。

4.1.4 科室分类

每个医院都会有不同的科室,科室分类主要用于管理医院的科室。该模块有科室列表、新增科室、修改科室及删除科室等功能。

4.1.5 个人中心

用户可以从主页中的头像处进入个人中心。个人中心包含工号、科室、身份证号等由管理员管理且不可更改的信息,同时包含头像、姓名、手机号、邮箱及个人签名等可以自主修改的信息。

4.2 用户App 端

系统提供基于Jetpack 框架开发的App 端。App 主页主要分为搜索推荐区、功能区以及新闻区三部分。主体页面使用RecyclerView 进行布局,其中搜索推荐区和功能区以HeadView 的形式嵌入滑动列表。功能区为了预留新功能位置,也设计为RecyclerView 的网格布局类型[7]。用户可以在App端查看自己的病历信息,同时可以浏览新闻、自查病症。App 端主界面如图3 所示。

图3 App 主界面

4.2.1 注册登录

用户可输入账号密码进行注册,系统将判断此用户是否存在。若用户已存在则用Toast 消息告知用户;若不存在,系统将提示用户注册成功,同时将注册的账号密码携带跳转至登录页面,并且自动填入输入框。

用户点击登录时,系统会判断账号密码是否正确,若错误则给出提示;若正确,系统将记录后台返回的uid。用户下次使用此App 时,系统将判断uid是否被记录,若有记录则自动进入系统,无需再次登录。

4.2.2 新闻模块

App 以轮播图的形式展示医院推荐的新闻,同时其余的新闻会以列表的形式放在页面下方供用户滑动查看。当用户点击新闻时会进入新闻详情页。

4.2.3 病历查询

用户可以在此系统查询自己的病历,但是使用之前必须进入个人中心进行实名认证。查询到病历信息后,界面将病历以列表的形式展示,用户点击列表项,可以展开详细的病历信息[8]。

4.2.4 病症自查

用户在搜索框中输入关键字,系统将会在新闻中根据关键字进行模糊搜索。用户可以查看搜索结果,对病症有一个初步的判断。

4.2.5 个人中心

用户可以在个人中心设置自己的头像、昵称及手机号等信息,并且可以修改密码。而且,用户必须在此模块进行实名认证,才能进行病历查询。

5 结语

本文从数据安全、操作简单、使用方便的角度出发,为医疗体系建立一套可行性高的医疗数据存储系统。医疗数据的安全、可靠是所有患者关注的重点。本系统利用区块链的去中心化和不可篡改性,在很大程度上杜绝了人为修改医疗信息的可能性。

猜你喜欢
应用层病历科室
消毒供应中心与临床科室建立有效沟通的实践与探讨
科室层级护理质量控制网的实施与探讨
电子病历评级的分析与总结
“病例”和“病历”
浅析公立医院内部绩效审计的作用
爱紧张的猫大夫
传输层和应用层的隧道技术
基于分级保护的OA系统应用层访问控制研究
临床表现为心悸的预激综合征B型心电图1例
物联网技术在信息机房制冷系统中的应用