A-计算机毕业设计定制:23324基于区域链技能的医疗应用管理 (免费领源码) ...

打印 上一主题 下一主题

主题 908|帖子 908|积分 2724

摘 要

  随着信息技能的快速发展,基于区块链技能的应用正在渐渐扩展到各个领域,其中包括医疗行业。传统的医疗管理体系存在很多问题,例如数据安全性、数据隐私性、信息共享等方面的挑战。而区块链技能的去中心化、不可篡改以及数据共享的特性,为医疗应用管理体系提供了一种新的解决方案。因此,基于区块链技能的医疗应用管理的体系设计与实现具有重要的研究意义。
  本文通过市场调研,根据现实要求决定采用Java开辟语言,通过Springboot框架使用MySQL数据库,基于区块链技能举行开辟医疗应用管理体系,该体系的实现可以有效解决传统医疗管理体系所面临的问题。通过体系可以或许提供更高的数据安全性和隐私性,保护用户的医疗信息不被篡改或泄露,同时,可以促进用户、医生与医院之间的合作与协作,增强交流交互,提高医疗服务的质量和效率。
  
  关键词:医疗应用管理;区域链技能;Springboot;Java
  

ABSTRACT

  With the rapid development of information technology, applications based on blockchain technology are gradually expanding to various fields, including the medical industry. Traditional medical management systems face many challenges, such as data security, data privacy, and information sharing. The decentralization, immutability, and data sharing characteristics of blockchain technology provide a new solution for medical application management systems. Therefore, the design and implementation of a medical application management system based on blockchain technology is of great research significance.
  This article conducts market research and decides to use Java development language according to actual requirements. Using the Springboot framework and MySQL database, a medical application management system is developed based on blockchain technology. The implementation of this system can effectively solve the problems faced by traditional medical management systems. The system can provide higher data security and privacy, protect user medical information from tampering or leakage, promote cooperation and collaboration between users, doctors, and hospitals, enhance communication and interaction, and improve the quality and efficiency of medical services.
  
  Key words:Medical application management; Regional chain technology; Springboot; Java
  
  

目 录

  1绪  论
  1.1研究背景与意义
  1.2国表里研究近况
  1.3开辟工具先容
  1.3.1Java编程语言
  1.3.2MySQL数据库
  1.3.3区块链技能
  1.3.4Springboot框架
  2需求分析
  2.1体系概述
  2.2体系功能需求
  2.3体系性能需求
  2.4可行性分析
  2.5开辟环境
  3总体设计
  3.1体系架构设计
  3.2功能模块设计
  3.3数据库设计
  4详细设计及实现
  4.1注册模块的实现
  4.2登录模块的实现
  4.3用户模块的实现
  4.4后台管理模块的实现
  4.5数据库连接
  5体系测试
  5.1测试使命及目标
  5.2测试计划
  5.3测试用例
  5.4测试结论
  结 论
  谢 辞
  参考文献
  附 录
  
  
   1绪  论

  1.1研究背景与意义

  随着信息技能的快速发展,基于区块链技能的应用正在渐渐扩展到各个领域,其中包括医疗行业。智能技能的发展不但改变了工程和制造业,也改变了医疗体系。智能技能的发展使得实时处置惩罚大型数据集变得愈快愈好,同时,区块链技能的使用也使得治疗方案的比较和诊疗意见的主动化成为大概,患者和医疗服务提供者之间的交流也变得更加透明。
  医疗数据需要高度的安全性和隐私性。医疗记录的安全性对于保护数据不受安全漏洞和犯罪运动的影响变得越来越重要。传统的医疗管理体系存在很多问题,例如数据安全性、数据隐私性、信息共享等方面的挑战。而区块链技能的去中心化、不可篡改以及数据共享的特性,为医疗应用管理体系提供了一种新的解决方案。因此,基于区块链技能的医疗应用管理的体系设计与实现具有重要的研究意义。
  “互联网+医疗”为医疗领域事务管理和业务开展提供了丰富便捷的本领和技能,本文通过市场调研,根据现实要求决定采用Java开辟语言,通过Springboot框架使用MySQL数据库,基于区块链技能举行开辟医疗应用管理,该体系的实现可以有效解决传统医疗管理体系所面临的问题。通过体系可以或许提供更高的数据安全性和隐私性,保护用户的医疗信息不被篡改或泄露,同时,可以促进用户、医生与医院之间的合作与协作,增强交流交互,提高医疗服务的质量和效率。别的,区块链技能在医保结算管理和费用结算管理方面也具有潜伏的应用代价。
   因此,设计与实现基于区块链技能的医疗应用管理体系对于提升医疗行业的信息化水平和服务质量具有重要的意义。
  1.2国表里研究近况

  目前,基于区块链技能的医疗应用管理体系的研究和应用已经引起了广泛的关注和讨论,在国表里都取得了一些重要的研究成果。
  在国际上,很多国家和地区都在积极探索基于区块链技能的医疗应用管理体系。例如,美国的一些研究机构和医疗机构已开始实验使用区块链技能来管理患者的医疗信息和数据,以提高数据的安全性和隐私性。同时,一些欧洲国家也在开展相关研究,通过建立基于区块链的电子康健档案体系,实现医疗信息的共享和交互。
  在国内,也有一些研究机构和医疗机构在研究基于区块链技能的医疗应用管理体系。例如,某些医疗大数据平台使用区块链技能确保数据的真实性和可信度,为医疗机构和患者提供安全的数据互换和共享平台。别的,一些医院还在实践基于区块链的电子病历体系,实现医疗数据的安全存储和共享。
  总体而言,基于区块链技能的医疗应用管理体系的研究和实践在国表里正处于起步阶段。固然还存在很多挑战和问题需要解决,例如数据隐私保护、智能合约的设计和实行等,但是区块链技能为医疗行业提供了一种新的解决方案,有望在未来推动医疗信息化的发展,提升医疗服务的质量和效率。
  1.3开辟工具先容

  1.3.1Java编程语言

  Java是一种盛行的编程语言,可以或许面向对象的高级编程语言,具有简朴、可移植、安全和高性能等特点,在软件开辟领域广泛应用。其可移植性得益于Java虚拟机(JVM),使得Java步伐可以在不同平台上运行,只需编写一次代码。Java留意安全性,提供了字节码验证、异常处置惩罚和访问控制等安全机制,确保步伐的稳固和安全,可以或许帮助开辟者轻松构建可靠、可移植和安全的应用步伐。
  1.3.2MySQL数据库

  MySQL是一个开源的关系型数据库管理体系(RDBMS),它是目前世界上最盛行的数据库之一。MySQL由瑞典公司MySQL AB开辟,并于2000年正式发布。它被广泛应用于各种规模的应用步伐,从小型个人项目到大型企业级应用步伐。由于MySQL具有灵活性、可靠性和性能上风,它在各种场景下都得到广泛应用,包括网站、企业级应用步伐、移动应用步伐、数据分析和物联网等。MySQL可以使用关系模型来构造数据,并使用结构化查询语言(SQL)举行数据库管理和数据操纵;运行在多个操纵体系上,包括Windows、Linux、MacOS等;支持横向和纵向扩展,可以通过添加更多的服务器节点或增加硬件资源来处置惩罚更大规模的数据和负载。
  1.3.3区块链技能

  区块链(Block Chain)本质上是一个去中心化的分布式数据库,能实现数据信息的分布式记录与分布式存储。狭义的区块链是一种按照时间次序将数据区块以链条方式组合成特定数据结构,以暗码学方式保证不可篡改和不可伪造的去中心化共享总账,可以或许安全存储简朴的、有先后关系的、能在体系内验证的数据。广义的区块链技能则是使用加密链式区块结构来验证与存储数据、使用分布式节点共识算法生成和更新数据,使用主动化智能合约脚本代码来编程和操纵数据的一种全新的去中心化根本架构与分布式计算范式。
  区块链技能根据现实应用场景和需求具有公共链、同盟链和私有链三种应用模式。公共链是完全去中心化的区块链,无官方构造及管理机构,无中心折务器,参与的构造机构按照体系规则自由接入网络、不受控制,机构间基于共识机制幵展工作。同盟链则是部分去中心化的区块链,由若干机构团结发起,介于公有链和私有链之间,弃取两者权利和义务的分配,并对分布式账本的访问做肯定的访问控制,实用于多个实体构成的构造或同盟。私有链则是完全中心化的区块链,其写入权限由中心机构控制,读取权限可视需求有选择性地对外开放,实用于特定机构的内部数据管理与审计等。区块链具有防篡改、去中心化、不可逆和智能合约等极具代价的特性,对于当前医疗领域存在的行业痛点,区块链技能可以解决医疗领域所面临的信托问题、降低调和成本、减轻中心计算压力,实现资源共享,提供更多的大概性。
  1.3.4Springboot框架

  Spring Boot是一个基于Spring的开源框架,它通过简化配置和快速启动内嵌式服务器,帮助开辟人员快速搭建基于Spring的应用步伐。Spring Boot引入了“约定优于配置”的理念,提供了很多开箱即用的功能和插件,使得开辟者可以或许更加专注于业务逻辑的开辟,而不消花费太多精神在配置上。并且可以或许通过主动配置和约定优于配置的原则,大大简化了应用步伐的配置过程,支持内嵌式的服务器,例如Tomcat、Jetty等,可以快速启动和运行应用步伐,方便开辟和部署。
  
  

2需求分析

  2.1体系概述

  本医疗应用管理起首根据使用该网站的用户的脚色和用户需求划分为普通用户,医生用户,管理员三大模块。
  其中普通用户模块主要实现普通用户的注册登录,并具有首页、交流论坛、通知公告、康健资讯、医生信息、我的账户、个人中心(个人首页、告急医疗、医疗咨询、预约挂号、就诊信息、服务评价、医保结算、费用结算、康健档案、收藏)等功能。
  普通用户脚色的用例展示如图2-1所示。
  

  

  
图2-1 普通用户脚色用例图

  

  医生用户模块主要实现用户的注册登录,并具有首页、交流论坛、通知公告、康健资讯、医生信息、我的账户、个人中心(个人首页、医生信息、告急医疗、医疗咨询、预约挂号、就诊信息、服务评价、药品信息、康健档案、收藏)等功能。
  医生用户脚色的用例展示如图2-2所示。
  

  
图2-2 医生用户脚色用例图

  

  管理员模块主要负责管理体系信息数据和维护体系正常运行,具有后台首页、体系用户、医生信息管理、告急医疗管理、医疗咨询管理、预约挂号管理、就诊信息管理、服务评价管理、医保结算管理、费用结算管理、药品信息管理、康健档案管理、排班信息管理、体系管理、通知公告管理、资源管理等工鞥,可以对信息举行新增、修改、删除、查询等操纵,同时可以对自己账号的个人信息和暗码举行管理。
  管理员脚色的用例展示如图2-3所示。
  

  
图2-3 管理员脚色用例图

  2.2体系功能需求

  根据医疗应用管理功能需求分析,主要划分为了普通用户模块、医生用户和管理员模块这三大模块。详细如下:
  普通用户模块:
  

  • 注册登录:游客可以通过注册成为体系用户,使用账号暗码可举行登录,使用体系功能。
  • 首页:可查看轮播图和使用体系其他功能。
  • 交流论坛:可查看所有交流论坛消息,支持局部搜索,点击可查看详情,可点击举行发布内容操纵,并举行点赞、收藏和评论。
  • 通知公告:可查看包括关于我们、联系方式、网站先容等管理员发布的所有通知公告,点击可查看详情。
  • 康健资讯:可查看所有康健资讯信息,支持局部、筛选、排序搜索,热门文章推荐,点击可查看详情,举行点赞、收藏和评论。
  • 医生信息:可查看所有医生信息,支持医生姓名、排序搜索,点击可查看详情,举行点赞、收藏和评论,并可点击咨询、挂号操纵。
  • 我的账户:对个人资料举行管理,包括修改暗码和修改资料(头像、昵称、邮箱、用户姓名、用户性别)。
  • 个人中心:可对个人首页、告急医疗、医疗咨询、预约挂号、就诊信息、服务评价、医保结算、费用结算、康健档案、收藏等信息举行管控。例如,可查看告急医疗、医疗咨询、预约挂号、就诊信息、服务评价、医保结算、费用结算、康健档案、收藏等详情信息内容,别的还可以举行添加告急医疗信息,填写服务评价,在费用结算中付出自己的费用等操纵。
  医生用户模块:
  

  • 注册登录:医生可以通过注册成为体系用户,使用账号暗码可举行登录,使用体系功能。
  • 首页:可查看轮播图和使用体系其他功能。
  • 交流论坛:可查看所有交流论坛消息,支持局部搜索,点击可查看详情,可点击举行发布内容操纵,并举行点赞、收藏和评论。
  • 通知公告:可查看包括关于我们、联系方式、网站先容等管理员发布的所有通知公告,点击可查看详情。
  • 康健资讯:可查看所有康健资讯信息,支持局部、筛选、排序搜索,热门文章推荐,点击可查看详情,举行点赞、收藏和评论。
  • 医生信息:可查看所有医生信息,支持医生姓名、排序搜索,点击可查看详情,举行点赞、收藏信息。
  • 我的账户:对个人资料举行管理,包括修改暗码和修改资料(头像、昵称、邮箱、用户姓名、用户性别)。
  • 个人中心:可对个人首页、医生信息、告急医疗、医疗咨询、预约挂号、就诊信息、服务评价、药品信息、康健档案、收藏等信息举行管控。例如,可查看人首页、医生信息、告急医疗、医疗咨询、预约挂号、就诊信息、服务评价、药品信息、康健档案、收藏等的详信息情内容,别的还可以对医疗咨询举行回复,稽核预约挂号和告急医疗信息,添加就诊信息等。
  管理员模块:
  

  • 登录:管理员账号暗码由体系直接生成,可以随时进入到体系中,使用体系各项管理操纵,同时还可以对个人信息和修改暗码举行管控。
  • 体系用户:可对普通用户、医生用户和管理员举行管控,包括举行增删改查操纵,点击可查看详情,医生用户账号信息由管理员添加
  • 医生信息管理:可查看所有医生信息,举行增改删查操纵,支持医生姓名搜索,点击可查看详情
  • 告急医疗管理:可查看所有告急医疗信息,举行增改删查操纵,支持用户姓名、稽核状态搜索,点击可查看详情,举行稽核
  • 医疗咨询管理:可查看所有医疗咨询信息,举行查询和删除操纵,支持用户姓名、医生姓名搜索,点击可查看详情
  • 预约挂号管理: 可查看所有预约挂号信息,举行查询和删除操纵,支持用户姓名、医生姓名搜索,点击可查看详情,并可点击就诊,填写并提交就诊信息
  • 就诊信息管理:可查看所有就诊信息信息,举行查询和删除操纵,支持用户姓名、医生姓名搜索,点击可查看详情,并可点击评价和医保,查看评价和医保信息
  • 服务评价管理:可查看所有服务评价信息,举行查询和删除操纵,支持用户姓名、医生姓名搜索,点击可查看详情
  • 医保结算管理:可查看所有医保结算信息,举行查询和删除操纵,支持用户姓名、稽核状态搜索,点击可查看详情,举行稽核,并可点击费用,举行添加费用信息
  • 费用结算管理:可查看所有费用结算信息,举行增改删查操纵,支持用户姓名、稽核状态搜索,点击可查看详情
  • 药品信息管理:可查看所有药品信息,举行增改删查操纵,支持药品名称搜索,点击可查看详情
  • 康健档案管理:可查看所有康健档案信息,举行增改删查操纵,支持用户姓名搜索,点击可查看详情
  • 排班信息管理:可查看所有排班信息,举行增改删查操纵,支持排班时间搜索,点击可查看详情和查看评论
  • 体系管理:可对首页的轮播图举行管理,举行增删改查操纵,支持标题搜索,可点击查看详情
  • 通知公告管理:可对通知公告举行管理,举行增删改查操纵,支持标题搜索,可点击查看详情
  • 资源管理:可对康健资讯和资讯分类举行管理,举行增删改查操纵,康健资讯支持标题、标签、分类搜索,可点击查看详情和查看评论;资讯分类支持类型名称搜索,可点击查看详情
  • 交流管理:可对交流论坛和论坛分类举行管理,举行增删改查操纵,交流论坛支持标题、标签、分类搜索,可点击查看详情和查看评论;交流论坛分类类型名称搜索,可点击查看详情。
  2.3体系性能需求

  体系性能需求是指对一个体系的性能需求举行分析和界说的过程。在举行性能需求分析时,因此医疗应用管理的设计与实现主要需要考虑以下几个方面的性能需求:
  相应时间:相应时间是指体系在接收到请求后,作出相应的时间。根据详细的业务需求和用户体验要求,可以确定体系在不同场景下的相应时间要求。
  吞吐量:吞吐量是指体系在肯定时间内处置惩罚的事务或请求的数目。根据业务需求和用户量的估计,可以确定体系需要支持的最大吞吐量。
  并发用户数:并发用户数是指体系在同时使用的用户数目。根据预期的用户量和并发访问需求,可以确定体系需要支持的最大并发用户数。
  可扩展性:可扩展性是指体系在面对用户量增加或并发访问需求增加时,可否通过增加硬件资源或调整体系架构来满意需求。根据预期的用户增长和扩展计划,可以确定体系需要具备的可扩展性要求。
  故障处置惩罚本领:体系对故障的处置惩罚本领是指在出现错误或故障时,体系可以或许快速、正确地辨认、定位并处置惩罚故障的本领。根据业务的重要性和对故障处置惩罚的要求,可以确定体系需要具备的故障处置惩罚本领。
  安全性:体系在性能需求分析中,也需考虑安全方面的需求,如数据的保密性、完整性和可用性等。根据详细的安全需求和合规要求,可以确定体系需要满意的安全性需求。
  通过对这些性能需求举行详细分析和界说,可以为医疗应用管理的设计和开辟提供指导,确保体系在满意预期的性能需求的同时,具备精良的性能和可靠性。
  2.4可行性分析

  2.4.1技能可行性

  医疗应用管理选择根据现实要求决定采用Java开辟语言,通过Springboot框架使用MySQL数据库,基于区块链技能来实现体系的功能需求,来支持医疗应用管理。具备界面友好、操纵简朴、数据安全、体系稳固可扩展,并通过计算机来编写代码和设计页面,和使用Tomcat服务器,来保证相应硬件设备的稳固性和扩展性。区块链具有防篡改、去中心化、不可逆和智能合约等极具代价的特性,对于当前医疗领域存在的行业痛点,区块链技能可以解决医疗领域所面临的信托问题、降低调和成本、减轻中心计算压力,实现资源共享,提供更多的大概性。同时,所使用的开辟工具都可以或许从网上免费下载,费用低且可行,可以或许节省开辟成本。别的,开辟团队只要具备Web开辟经验和相关领域知识,就可以或允许以或许高效地举行体系设计与开辟。以是从技能角度分析具有可行性。
  2.4.2运行可行性

  基于区域链技能的医疗应用管理在体系开辟阶段举行充分的测试和调试工作,因此确保体系在正式投入使用时各个运行阶段过程都可以或许正常运行;该平台稳固高和可靠强,可以或许克制出现体系崩溃或数据丢失等问题。另外,考虑到未来平台大概会有更多的用户和买卖业务量,医疗应用管理还具备精良的可扩展性和数据安全性,可以或许方便地举行水平扩展或功能扩展,实现医疗应用管理需求。同时,使用者只要具备肯定的电脑知识即可使用普通电脑运行进入医疗应用管理,使用体系功能。以是从运行角度分析具有可行性。
  2.5开辟环境

  为了更好的实现体系功能,医疗应用管理根据现实要求,选择常见的Windows、Linux、MacOS等操纵体系,采用Java开辟语言,通过Springboot框架使用MySQL数据库,基于区块链技能举行设计与实现。
  

3总体设计

  3.1体系架构设计

  体系主要的数据访问方式是:通过浏览器页面用户可以进入体系,体系可以主动对用户向服务器发送的请求举行处置惩罚,处置惩罚请求是在体系后台中举行的,用户在浏览器页面上举行相应操纵,就可以或许看到服务端通报的处置惩罚效果。 基于springboot的小说网站体系主要分为视图-模型-控制三层架构设计。在视图层中,主要是操纵在服务器端向客户端反馈并显示的数据,在模型层中,主要处置惩罚相关的业务逻辑、数据整合等,最后的控制层它介于视图和模型之间,主要是调整两层之间的关系,最终落实数据的通报。
  体系架构图如下图所示。
  

  
图4-1 体系架构图

  。
  3.2功能模块设计

  3.2.1前台功能模块设计

  体系设计的目标是分析体系包括的所有功能结构,为开辟人员设计开辟和实现体系做好准备工作。经过前期的需求调查、分析和整理之后,确定的总体需求主要包括多个模块,体系整体脚色分普通用户、医生用户和管理员,其中管理员是最高权限拥有者。体系功能结构图如下图所示。
  

  
图3-2 功能模块图

  
  3.3数据库设计

  3.3.1概念模型

  数据库设计一样平常包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
  根据前面的数据流程图,结合体系的功能模块设计,设计出符合体系的各信息实体。下面是整个基于区域链技能的医疗应用管理主要的数据库表总E-R实体关系图。
  

  

  
图3-3 数据库总体E-R图

  

  3.3.2数据表

  通过上一小节中医疗应用管理中总E-R关系图上得出一共需要创建很多个数据表。
  在此我主要罗列几个主要的数据库表结构设计。
  

  
表3-1 regular_users (普通用户)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

regular_users_id

int

10

0

N

Y


普通用户ID

2

user_name

varchar

64

0

Y

N


用户姓名

3

user_gender

varchar

64

0

Y

N


用户性别

4

contact_information

varchar

64

0

Y

N


联系方式

5

examine_state

varchar

16

0

N

N

已通过

稽核状态

6

user_id

int

10

0

N

N

0

用户ID

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  

  
表3-2 doctor_users (医生用户)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

doctor_users_id

int

10

0

N

Y


医生用户ID

2

doctors_name

varchar

64

0

Y

N


医生姓名

3

doctors_gender

varchar

64

0

Y

N


医生性别

4

contact_information

varchar

64

0

Y

N


联系方式

5

examine_state

varchar

16

0

N

N

已通过

稽核状态

6

user_id

int

10

0

N

N

0

用户ID

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  

  
表3-3 doctor (医生信息)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

doctor_id

int

10

0

N

Y


医生信息ID

  
续表

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

2

doctor_users

int

10

0

Y

N

0

医生用户

3

doctors_name

varchar

64

0

Y

N


医生姓名

4

doctors_photo

varchar

255

0

Y

N


医生照片

5

working_hours

varchar

64

0

Y

N


上班时间

6

doctors_expertise

varchar

64

0

Y

N


医生专长

7

doctor_qualification

varchar

64

0

Y

N


医生资质

8

employment_time

varchar

64

0

Y

N


从业时间

9

doctor_introduction

text

65535

0

Y

N


医生简介

10

hits

int

10

0

N

N

0

点击数

11

praise_len

int

10

0

N

N

0

点赞数

12

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

13

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  
表3-4 drug_information (药品信息)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

drug_information_id

int

10

0

N

Y


药品信息ID

2

drug_name

varchar

64

0

Y

N


药品名称

3

drug_images

varchar

255

0

Y

N


药品图片

4

drug_number

varchar

64

0

Y

N


药品编号

5

drug_inventory

int

10

0

Y

N

0

药品库存

6

drug_expiration_date

date

10

0

Y

N


药品有效期

7

drug_effects

text

65535

0

Y

N


药品作用

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  
表3-4 emergency_medical_care (告急医疗)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

emergency_medical_care_id

int

10

0

N

Y


告急医疗ID

  

  
续表

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N


用户姓名

4

help_seeking_time

datetime

19

0

Y

N


求助时间

5

help_location

varchar

64

0

Y

N


求助所在

6

patient_situation

text

65535

0

Y

N


患者环境

7

examine_state

varchar

16

0

N

N

未稽核

稽核状态

8

examine_reply

varchar

16

0

Y

N


稽核回复

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  
  

  

  

  

  
表3-6 have_an_appointment_with_a_doctor (预约挂号)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

have_an_appointment_with_a_doctor_id

int

10

0

N

Y


预约挂号ID

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N


用户姓名

4

doctor_users

int

10

0

Y

N

0

医生用户

5

doctors_name

varchar

64

0

Y

N


医生姓名

6

appointment_time

datetime

19

0

Y

N


预约时间

7

appointment_content

text

65535

0

Y

N


预约内容

8

examine_state

varchar

16

0

N

N

未稽核

稽核状态

9

examine_reply

varchar

16

0

Y

N


稽核回复

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  

  
表3-7 health_records (康健档案)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

health_records_id

int

10

0

N

Y


康健档案ID

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N


用户姓名

4

user_blood_pressure

int

10

0

Y

N

0

用户血压

5

disease_history

varchar

64

0

Y

N


疾病史

6

medical_history

varchar

64

0

Y

N


药物史

7

health_condition

text

65535

0

Y

N


康健状态

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  
表3-8 medical_consultation (医疗咨询)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

medical_consultation_id

int

10

0

N

Y


医疗咨询ID

  
续表

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N


用户姓名

4

doctor_users

int

10

0

Y

N

0

医生用户

5

doctors_name

varchar

64

0

Y

N


医生姓名

6

consultation_content

text

65535

0

Y

N


咨询内容

7

reply_content

text

65535

0

Y

N


回复内容

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  

  
表3-9 medical_insurance_settlement (医保结算)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

medical_insurance_settlement_id

int

10

0

N

Y


医保结算ID

2

regular_users

int

10

0

Y

N

0

普通用户

  
续表

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

3

user_name

varchar

64

0

Y

N


用户姓名

4

medical_insurance_type

varchar

64

0

Y

N


医保类型

5

total_expenses

varchar

64

0

Y

N


费用合计

6

declaration_time

datetime

19

0

Y

N


申报时间

7

examine_state

varchar

16

0

N

N

未稽核

稽核状态

8

examine_reply

varchar

16

0

Y

N


稽核回复

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  

  
表3-10 cost_settlement (费用结算)

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

1

cost_settlement_id

int

10

0

N

Y


费用结算ID

  
续表

  
编号

名称

数据类型

长度

小数位

答应空值

主键

默认值

说明

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N


用户姓名

4

total_expenses

int

10

0

Y

N

0

费用合计

5

medical_insurance_reimbursement

int

10

0

Y

N

0

医保报销

6

actual_expenses

varchar

64

0

Y

N


现实费用

7

pay_state

varchar

16

0

N

N

未付出

付出状态

8

pay_type

varchar

16

0

Y

N


付出类型: 微信、付出宝、网银

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

  
4详细设计及实现


  4.1注册模块的实现

  普通用户和医生用户需要举行注册才能拥有体系账号用户在填写数据的时候必须与注册页面上的验证相匹配否则会注册失败,注册页面的表单验证是通过JavaScript举行验证的,用户名的长度必须在6到18之间,邮箱必须带有@符号,暗码和暗码确认必须雷同,你输入的暗码,体系会根据你输入暗码的强度给出指定的值,电话号码和身份证号码必须要求输入格式与生活符合合,当你前台验证通过的时候你点击注册,表单会将你输入的值通过name值通报给后台并生存到数据库中。
  用户注册流程图如下图所示。
  

  
图4-1 用户注册流程图

  用户注册界面如下图所示。
  

  
  
图4-2 用户注册界面

  4.2登录模块的实现

  体系的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处置惩罚判断是否为合法用户,举行页面跳转,进入体系中去。
  登录合法性判断过程:用户输入账号和暗码后,体系起首确定输入输入数据合法性,然后在login.Java页面发送登录请求,调用src下的mainctrl类的dopost方法来验证。
  用户登录模块的IPO如下所示:
  输入:用户名和暗码。
  处置惩罚:
  1)检测用户输入的账号、暗码是否准确及在数据库已对应存在。
  2)从数据库中提取记录,并储存在本地的session中(timeout默认=30min)。
  3)根据用户名,将其显示在体系首页上。
  输出:是否成功的信息。
  登录流程图如下所示。
  

  
图4-3 登录流程图

  用户登录界面如下所示。
  

  
  
图4-4 用户登录界面

  4.3用户模块的实现

  4.3.1前台首页模块

  普通用户和医生用户登录登录进入体系前台首页界面,可查看轮播图、网站公告、幼教新闻等信息,可使用体系其他功能。这里以普通用户的首页界面为例。
  普通用户首页沟通交流界面如下图所示。
  
  
图4-4 普通用户首页界面

  4.3.2交流论坛模块

  普通用户和医生用户点击“交流论坛”可查看所有交流论坛消息,支持局部搜索,点击可查看详情,可点击举行发布内容操纵,并举行点赞、收藏和评论。这里以医生用户的交流论坛界面为例。
  医生用户交流论坛界面如下图所示。
  
  
图4-5 医生用户交流论坛界面

  4.3.3医生信息模块

  普通用户和医生用户点击“医生信息”这一按钮,可查看所有医生信息,支持医生姓名、排序搜索,点击可查看详情,举行点赞、收藏和评论,并且普通用户还可点击咨询、挂号操纵。这里以普通用户的医生信息界面为例。
  普通用户咨询、挂号操纵流程图如下所示。
  

  
图5-6 普通用户医生咨询和预约挂号流程图

  
  普通用户医生信息界面如下图所示。
  
  
图4-7 普通用户医生信息详情界面

  4.3.4普通用户个人中心模块

  普通用户可对个人首页、告急医疗、医疗咨询、预约挂号、就诊信息、服务评价、医保结算、费用结算、康健档案、收藏等信息举行管控。例如,可查看告急医疗、医疗咨询、预约挂号、就诊信息、服务评价、医保结算、费用结算、康健档案、收藏等详情信息内容,别的还可以举行添加告急医疗信息,填写服务评价,在费用结算中付出自己的费用等操纵。界面如下图所示。
  
  
图4-8 普通用户个人中心界面

  4.3.5医生用户个人中心模块

  医生用户点击“个人中心”这一按钮,可对个人首页、医生信息、预约记录、收藏等信息举行管控。点击“医生信息”,可管理自己发布的医生信息,包括举行增改删查操纵,支持教师姓名、课程主题搜索,可点击查看包括发布账号、教师姓名、课程主题、视频文件、发布时间、详情说明等详情信息;点击“预约记录”,可管理自己的预约记录,包括举行查询和删除操纵,支持用户姓名、联系方式、预约时间、稽核状态搜索,可点击查看包括预约账号、用户姓名、联系方式、预约内容、稽核状态、稽核回复等详情信息,并举行稽核;点击“收藏”,可管理包括幼教新闻、医生信息等所有收藏信息,举行查看和删除操纵,点击某一篇可举行查看详情信息。界面如下图所示。
  
  
图4-9 医生用户个人中心界面

  

  4.4后台管理模块的实现

  4.4.1体系用户模块

  可对普通用户、医生用户和管理员举行管控,包括举行增删改查操纵,点击可查看详情,医生用户账号信息由管理员添加。界面如下图所示。
  
  
图4-10 添加医生用户界面

  4.4.2医生信息管理模块

  可查看所有医生信息,举行增改删查操纵,支持医生姓名搜索,点击可查看详情。界面如下图所示。
  
  
图4-11 医生信息管理界面

  4.4.3告急医疗管理模块

  可查看所有告急医疗信息,举行增改删查操纵,支持用户姓名、稽核状态搜索,点击可查看详情,举行稽核。界面如下图所示。
  
  
图4-12 告急医疗管理详情界面

  4.4.4医疗咨询管理模块

  可查看所有医疗咨询信息,举行查询和删除操纵,支持用户姓名、医生姓名搜索,点击可查看详情。界面如下图所示。
  
  
图4-13 医疗咨询管理界面

  4.4.5预约挂号管理模块

   可查看所有预约挂号信息,举行查询和删除操纵,支持用户姓名、医生姓名搜索,点击可查看详情,并可点击就诊,填写并提交就诊信息。界面如下图所示。
  
  
图4-14 预约挂号管理界面

  4.4.6服务评价管理模块

  可查看所有服务评价信息,举行查询和删除操纵,支持用户姓名、医生姓名搜索,点击可查看详情。界面如下图所示。
  
  
图4-15 服务评价管理界面

  4.4.7医保结算管理模块

  可查看所有医保结算信息,举行查询和删除操纵,支持用户姓名、稽核状态搜索,点击可查看详情,举行稽核,并可点击费用,举行添加费用信息。界面如下图所示。
  
  
图4-16 医保结算管理界面

  4.4.8康健档案管理模块

  可查看所有康健档案信息,举行增改删查操纵,支持用户姓名搜索,点击可查看详情。界面如下图所示。
  
  
图4-17 康健档案管理详情界面

  
4.5数据库连接

数据库连接是指应用步伐与数据库之间建立的连接,通过该连接可以举行数据的读取、写入和修改操纵。JDBC连接:JDBC是Java语言访问数据库的标准API。通过JDBC连接,可以使用Java步伐访关系型数据库MySQL。使用JDBC连接数据库的主要步骤包括加载数据库驱动、建立连接、创建Statement对象、实行SQL语句、处置惩罚效果。从Springboot架构的原理可知,二手汽车推荐体系分析体系的各大模块的实现均需要对数据库的数据举行操纵,详细包括查询数据、写入数据、更新数据和删除数据。
数据库流程图如下图所示。


图4-28 数据库查询流程图


数据库配置文件关键代码如下:

db = SQLAlchemy()

app = Springboot(__name__, static_folder='static')

# 数据库链接配置

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@127.0.0.1:3306/projectxxxxx'

app.secret_key = 'v&#prqo7t*(!ktb+8r=+83@#_$n1pg_xig$j=6v^r3#$i)wx87'

db.init_app(app)

app.config['UPLOAD_FOLDER'] = 'static/upload'


5体系测试


5.1测试使命及目标

测试是为了发现在开辟的步伐中所存在的问题,测试这一工作是非常艰巨的,而又是非常困难的,这一部分在步伐的设计中占有很大比例,可以说一个步伐的开辟工作量要是占据了百分至六十,那么剩下的百分之四十必然是测试这一部分,以致更高。所有的软件上线之前,都应该举行富足的测试之后才能保证上线后不会Bug频发,或者是功能不满意需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对体系举行测试以保证体系的稳固性和可靠性。
软件测试和开辟过程有着密切的联系,它们都需要遵循严格的管理学原则,以确保软件的可靠性和可用性。因此,为了验证医疗应用管理的有效性,我们需要对其各个功能模块的运行环境和性能举行严格的查抄和验证。一旦查抄效果出现问题,我们将立即采取步调,并尽快纠正,从而为用户提供更加优质的服务。
5.2测试计划

测试计划是软件测试过程中的一个关键文档,用于指导测试运动的实行。它提供了测试范围、测试目标、测试计谋、测试使命、测试资源和时间安排等信息,以确保测试工作可以按照既定的计划举行。
对于医疗应用管理的设计与实现,以下是详细的测试计划:
简要先容测试计划的目标和背景,以及所涉及的软件体系或模块的概述。明确测试的目标,例如验证体系的功能准确性、性能测试、安全性测试等。明确测试的范围,包括被测体系的模块、功能和性能指标等。界说测试方法和技能,包括黑盒测试、白盒测试、集成测试、回归测试等。列出详细的测试使命和测试运动,包括测试用例设计、测试环境搭建、测试数据准备、测试实行和缺陷管理等。明确测试所需的人员、设备、工具和环境等资源,并举行资源分配和安排。制定测试的时间表和计划安排,包括测试开始时间、竣事时间、里程碑和关键节点等。辨认大概的测试风险和问题,并提供相应的风险管理计谋和步调。界说缺陷陈诉、缺陷分类、缺陷优先级和缺陷解决流程等。界说何时竣事测试,在什么条件下可以发布软件。
5.3测试用例

5.3.1登录模块测试用例

管理员、普通用户、医生用户登录后才能使用全部体系功能。下表是体系登录功能测试用例,检测了用户名和暗码的不同的输入环境,观察体系的相应环境。得出该功能到达了设计目标。

表5-1 体系登录功能测试用例

用例名称
用户登录体系
目标
测试用户通过准确的用户名和暗码可否登录功能
前提
未登录的环境下
测试流程
1) 进入登录页面
2) 输入准确的用户名和暗码
预期效果
用户名和暗码准确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入
现实效果
现实效果与预期效果一致

5.3.2注册模块测试用例

用户需要经过普通用户体系账号,才可以或许举行登录。下表是注册功能测试用例,检测了各种数据的输入环境,观察体系的相应环境。得出该功能到达了设计目标。

表5-2 注册功能测试用例


用例名称
用户注册体系


目标
测试用户通过准确的输入用户名、暗码以及个人信息举行账号注册


前提
未拥有体系账号


测试流程
1) 进入注册页面
2) 输入准确的注册信息


预期效果
注册信息准确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入(医生用户注册信息还需要管理员稽核)


现实效果
现实效果与预期效果一致


5.3.3创建数据模块测试用例

在体系中,创立功能也是根本功能之一,因此创立功能的测试很有代表性。在此章节主要列举在创建时各种环境下体系效果的测试。由于体系涉及创立功能操纵过多,因此将多处统称创立功能。

表5-4 创建数据功能测试用例

用例名称
体系使用者举行创建数据
目标
测试体系使用者通过准确输入信息举行创建数据
前提
登录的环境下
测试流程
1) 体系使用者进入体系页面,举行创建数据
2) 输入准确的数据信息
预期效果
数据信息输入准确的时候,提示创建数据成功,反之则显示错误信息,提示重新输入,创建数据失败
现实效果
现实效果与预期效果一致



5.3.4修改数据模块测试用例

在体系中,修改功能是体系主要实现功能,因此修改功能的测试很有代表性。在此章节主要列举在修改时各种环境下体系效果的测试。由于体系涉及修改功能操纵过多,因此将多处数据表记录修改和状态修改统称修改功能。

表5-4 修改数据功能测试用例

用例名称
体系使用者举行修改数据
目标
测试体系使用者对可修改的数据项举行修改通过准确输入信息举行修改数据
前提
登录的环境下
测试流程
1) 体系使用者进入体系页面,举行修改数据
2) 输入准确的数据信息
预期效果
数据信息输入准确的时候,提示修改数据成功,反之则显示错误信息,提示重新输入,修改数据失败
现实效果
现实效果与预期效果一致

5.3.5查询数据模块测试用例

在体系中,查询功能是使用体系使用最多也是最根本的功能,因此查询功能的测试很有代表性。在此章节主要列举在查询时各种环境下体系效果的测试。。

表5-5 查询数据功能测试用例

用例名称
体系使用者举行查询数据
目标
测试体系使用者对可查询的数据项输入准确信息举行查询数据
前提
登录的环境下
测试流程
1) 体系使用者进入体系页面,举行查询数据
2) 全部查询以及输入关键词查询
预期效果
数据信息输入准确的时候,提示查询数据成功,反之则显示错误信息,提示重新输入,查询数据失败
现实效果
现实效果与预期效果一致

5.3.6删除数据模块测试用例

在体系中,删除功能是使用体系使用最多也是最根本的功能,因此删除功能的测试很有代表性。在此章节主要列举在删除时各种环境下体系效果的测试。。

表5-6 删除数据功能测试用例

用例名称
体系使用者举行删除数据
目标
测试体系使用者对可删除的数据项举行删除
前提
登录的环境下
测试流程
1) 体系使用者进入体系页面,举行删除数据
2) 选择数据举行删除
预期效果
选择可删除的数据删除,提示删除数据成功,反之则删除数据失败
现实效果
现实效果与预期效果一致

5.4测试结论

在本次测试的过程主要针对用户登录和注册,及所有功能下的添加操纵,修改操纵、查询操纵和删除操纵举行测试,并以真实数据逐一举行相关功能项目标输入,涵盖了所有的功能、模块或需求,按照计划举行了全面的测试,最终可以或许保证每个项目涉及的功能都是可以或许正常运行,对发现的缺陷的举行修改完满,因此可以或许保证本次设计的,已实现的功能可以或许正常运行并且相关数据库的信息也同样保证准确。


结 论


在对医疗应用管理举行设计与开辟时,我们选通过市场调研,根据用户需求和现实要求选择采用Java开辟语言,通过Springboot框架使用MySQL数据库,基于区块链技能,来构建一个便捷、高效的医疗应用管理。通过体系可以或许提供更高的数据安全性和隐私性,保护用户的医疗信息不被篡改或泄露;增强用户之间的交流交互,通过体系可以搜索和浏览医疗应用相关信息,并实现在线咨询、挂号、付出等操纵,提高医疗服务的质量和效率。
在体系的开辟过程中,我们充分使用了Springboot框架的上风,如主动配置、快速开辟等特点,加快了项目标迭代和部署速度;通过Springboot提供的丰富的生态体系,我们引入了一些常用的第三方库和组件,增强了体系的功能和性能。同时,充分使用区块链防篡改、去中心化、不可逆和智能合约等极具代价的特性,对于解决当前医疗领域存在的行业痛点,提高信托度、降低调和成本、减轻中心计算压力,实现资源共享,提供更多的大概性。并且还实现平台体系界面的用户友好性,同时相应式设计让本体系适配各种屏幕大小和设备,可以或许支持多种语言。
别的,由于受到了技能水平的限制,在有限的时间,只可以或许将体系功能模拟时的功能实现,在很多功能方面仍然存在很大的弊端,而这些弊端需要不断的测试,不断的总结,不断的改进。
因此,医疗应用管理仍有进一步的改进空间。在未来体系运行中,我们可以继续优化体系的用户界面和提升交互体验,使体系界面和体验更加直观友好。还可以引入更多的智能化技能,提升用户的个性化体验,以及提升管理效率和服务水平。

谢 辞


时间过得飞快,马上就要毕业了,门生活在这个时候即将划上一个句号,但是对于我的人生道路来说,这仅仅是一个逗号,我将面对的是又一次征程的开始。
回忆已往,许很多多的事情浮现在脑海:刚上大学时欢乐心情和高兴的场景还念念不忘。一切都是那么新鲜,那么富有吸引力。有快乐也有艰辛,有劳绩也有失落。衷心感谢信息学院所有支持帮助过我的老师,谢谢你们多年来的关心和爱护。同窗的友谊同样难忘,你们与我共同走过了人生中不平凡的道路,给我留下了值得珍藏的美好记忆。
最后,我要特别感谢指导论文设计的老师。本论文是在他的悉心指导和热情帮助下完成的,老师认真负责的工作态度,严谨的治学精神和博识的理论水平都使我受益匪浅。老师无论在理论上照旧在实践中,都给予我很大的帮助,使我专业技能的应用水平得到很大提高,这对于我以后的工作和学习都有益处。值此论文完成之际,特别向老师表现衷心的感谢和崇高的敬意,谢谢他细心而又耐烦地辅导,使得我得以顺遂的完成毕业设计开辟工作,同时也要感谢其他帮助过我的老师和同砚,他们在我成长过程中给予了我很大的帮助,在此一并表现感谢。

参考文献



  • 马绍阳,王伟东,韩斌倩等.基于Spring Boot+Vue的智能远程医疗平台的设计与实现[J].网络安全技能与应用,2024,(01):55-57.
  • 黄娟.基于SpringBoot和Vue.js的医院数据提取管理平台的设计与实现[J].信息与电脑(理论版),2023,35(22):91-93.
  • 屈晓,周挺,吴楷等.一种SpringBoot基于嵌入式设备的辅助医疗App的设计与实现[J].电脑知识与技能,2023,19(29):55-58+66.DOI:10.14004/j.cnki.ckt.2023.1534.
  • 傅唯佳,冯瑞,葛小玲等.基于区块链技能的儿科区域医疗数据共享平台建立[J].中国医疗东西信息,2023,29(17):47-51+110.DOI:10.15971/j.cnki.cmdi.2023.17.004.
  • 杨志俊,侯江华.基于SpringBoot的聪明养老体系设计[J].无线互联科技,2023,20(17):87-89.
  • 朱江峰,沈祥,汪磊等.区域电力能源云储能买卖业务区块链技能研究[J].电子设计工程,2023,31(16):157-161.DOI:10.14022/j.issn1674-6236.2023.16.033.
  • 王隽.区块链技能在长三角区域交通运输从业人员信息共享中的应用[J].中国产经,2023,(13):167-169.
  • 倪文轩,高深甚.基于区块链技能在区域医联体建立中的探索[C]//全科医疗质量控制同盟.首届全国全科医疗质量论坛论文摘要集.上海市第十人民医院;上海申康医院发展中心;,2023:1.DOI:10.26914/c.cnkihy.2023.024114.
  • 方敬东.医院医疗设备维修管理体系的设计[J].现代仪器与医疗,2023,29(02):67-76.
  • 徐海燕.JAVA编程在计算机应用软件中的应用特征与技能[J].电子技能与软件工程,2023,(03):29-32.
  • 李洪涛,秦善春.区域医联体模式下应用区块链技能开展慢病管理的发展计谋研究[J].中国数字医学,2023,18(01):112-118.
  • 胡安琪.区块链技能视角下公共图书馆区域协同发展路径研究——以长三角地区公共图书馆同盟为例[J].图书馆研究与工作,2022,(11):35-40.
  • 石娜娜.运用区块链技能促进区域农产物品牌建立研究[J].农村经济与科技,2022,33(07):65-67+84.
  • 王曼维,杨荻,李岩等.基于SpringBoot框架的聪明医疗问诊体系设计与实现[J].中国医学装备,2022,19(03):133-136.
  • 贺莹.区域链技能在高校兼职服务平台中的应用[J].黑龙江科学,2022,13(03):40-41.
  • 颜丽萍.区块链技能在网络安全等级保护区域的应用研究[J].信息与电脑(理论版),2022,34(02):193-196.
  • 骆亮.基于区块链技能的区域经济信息共享体系设计[J].微型电脑应用,2021,37(03):140-143.
  • 马传宸.聪明医疗服务平台后端服务模块的设计与实现[D].南京大学,2020.DOI:10.27235/d.cnki.gnjiu.2020.002424.
  • 姜文啸.基于区域链技能的都会聪明教诲平台构建探讨[J].中国教诲信息化,2020,(09):30-32.
  • 卫荣,钱步月,兰欣等.基于区块链技能的区域医疗数据安全共享问题研究[J].中国卫生信息管理杂志,2020,17(02):136-140+150.


附 录


附录A:《软件步伐源代码》
连接数据库的文件在Resources 文件夹下的application.yml文件,代码如下:
server:
  port: 5000
  servlet:
    context-path: /api
spring:
  mvc:
    static-path-pattern: /upload/**
  resources:
    static-locations: file:此处填写所在/project93355/server/src/main/resources/static
datasource:    
jdbc:mysql://127.0.0.1:3306/projectxxxxx?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  jackson:
    property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
    default-property-inclusion: ALWAYS
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
  servlet:
    multipart:
      max-file-size: 500MB
      max-request-size: 500MB
  redis:
    host: 127.0.0.1
    port: 6379
    password:
    database: 2
    lettuce:
      pool:
        max-idle: 30
        min-idle: 10
        max-active: 30
        max-wait: 10000
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.project.demo.entity
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    use-column-label: true
    map-underscore-to-camel-case: false
    lazy-loading-enabled: true
    aggressive-lazy-loading: false
use-generated-keys: true

项目启动文件Application.java,代码如下:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableJpaRepositories
@MapperScan("com.project.demo.dao")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

登岸拦截管理器,在config文件夹下的WebAppConfig.java文件,代码如下:
package com.project.demo.config;

@Configuration
@Slf4j
public class WebAppConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //登录拦截的管理器
        InterceptorRegistration registration = registry.addInterceptor(loginInterceptor());
        //拦截的所在
        registration.addPathPatterns("/**");
        //根据需要拦截,一样平常设置所有所在拦截,放行公共连接
    }
    @Bean
    public LoginInterceptor loginInterceptor(){
        return new LoginInterceptor();
    }
}

登岸担当管理器,在interceptor文件夹下的LoginInterceptor.java文件,控制请求头代码如下:
package com.project.demo.interceptor;

@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
    private String tokenName = "x-auth-token";
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader(this.tokenName);
        setHeader(request, response);
        log.info("[请求接口] - {} , [请求类型] - {}",request.getRequestURL().toString(),request.getMethod());
        if (request.getRequestURL().toString().contains("/api/user/login")){
            return true;
        }
        else if (request.getRequestURL().toString().contains("/api/user/state")){
            return true;
        }
        else if (request.getRequestURL().toString().contains("/api/user/register")){
            return true;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        //更新token
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }

    private void failure(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setHeader("Content-type", "application/json;charset=UTF-8");
        response.setStatus(401);
        response.sendRedirect("https://www.baidu.com");
    }

    private void setHeader(HttpServletRequest request, HttpServletResponse response) {
        //跨域的header设置
        response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
        response.setHeader("Access-Control-Max-Age", "1800");
        //防止乱码,实用于传输JSON数据
        response.setHeader("Content-Type", "application/json;charset=UTF-8");
        response.setStatus(HttpStatus.OK.value());
    }
}

组装sql语句,在constant文件夹下的FindConfig.java文件,代码如下:
package com.project.demo.constant;
public class FindConfig {
    public static String PAGE = "page";
    public static String SIZE = "size";
    public static String LIKE = "like";
    public static String ORDER_BY = "orderby";
    public static String FIELD = "field";
    public static String GROUP_BY = "groupby";
    public static String MIN_ = "_min";
    public static String MAX_ = "_max";
    public static String SQLHWERE = "sqlwhere";
}

项目采用三层架构controller(每一个实体对应一个controller),entity(项目表实体),service
,Controller 均继续自BaseController,注入两个对象,一个是实体类(以Auth为例),另一个是其AuthService:
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
    /**
     * 服务对象
     */
    @Autowired
    public AuthController(AuthService service) {
        setService(service);
    }
}

Controller用于spring控制请求的所在
新增一条数据,通过post传入一个json对象,然后经过request.getReader(),最后经过readBody()转成一个Map,含有String和Object,key用的是字段名,Object存放数据,最终得到Map,insert用拼装sql,读取body,组装成一个insert对象,runCountSql()语句,代码如下:
    @PostMapping("/add")
    @Transactional
    public Map<String, Object> add(HttpServletRequest request) throws IOException {
        service.insert(service.readBody(request.getReader()));
        return success(1);
    }
public Map<String, Object> addMap(Map<String,Object> map){
    service.insert(map);
     return success(1);
 }

修改一个数据,原理与add基本一致,不同点在于通过readConfig()读取关键字,以及通过readQuery()获取URL后面?指定位置的标识,转成Map对象后,实行update操纵,同样通过拼接的sql语句实行,实行过程读取query,toWhereSql()语句完成数据库操纵,body为修改对象的值,代码如下:
    @PostMapping("/set")
@Transactional
    public Map<String, Object> set(HttpServletRequest request) throws IOException {
        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
        return success(1);
    }

删除一条数据,通过readQuery(),获取URL后面的对象所在,删除FROM详细的table,query删除查询FindConfig语句,代码如下:
    @RequestMapping(value = "/del")
    @Transactional
    public Map<String, Object> del(HttpServletRequest request) {
        service.delete(service.readQuery(request), service.readConfig(request));
        return success(1);
    }
    public void delete(Map<String,String> query,Map<String,String> config){
        QueryWrapper wrapper = new QueryWrapper<E>();
        toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
        baseMapper.delete(wrapper);
        log.info("[{}] - 删除操纵:{}",wrapper.getSqlSelect());
    }

通过请求的参数获取一条数据,通过readQuery(),获取URL后面的对象所在,查询FindConfig语句,select筛选Map对象,FIELD为查询字段,未传输的环境下传入“*”,代码如下:
    @RequestMapping("/get_obj")
    public Map<String, Object> obj(HttpServletRequest request) {
        List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
        if (resultList.size() > 0) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("obj",resultList.get(0));
            return success(jsonObject);
        } else {
            return success(null);
        }
    }

通过请求的参数获取列表数据,代码如下:
    @RequestMapping("/get_list")
    public Map<String, Object> getList(HttpServletRequest request) {
        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
        return success(map);
    }

获取某个组下面的数目,代码如下:
    @RequestMapping(value = {"/count_group", "/count"})
    public Map<String, Object> count(HttpServletRequest request) {
        Integer value= service.selectSqlToInteger(service.groupCount(service.readQuery(request), service.readConfig(request)));
        return success(value);
    }

获取某个组下面的总计值,代码如下:
    @RequestMapping(value = {"/sum_group", "/sum"})
    public Map<String, Object> sum(HttpServletRequest request) {
        Integer value = service.selectSqlToInteger(service.sum(service.readQuery(request), service.readConfig(request)));
        return success(value);
    }

图片/文件/视频等的上传方法通过MultipartFile,代码如下:
   @PostMapping("/upload")
    public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
        log.info("进入方法");
        if (file.isEmpty()) {
            return error(30000, "没有选择文件");
        }
        try {
            //判断有没路径,没有则创建
            String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
            File targetDir = new File(filePath);
            if (!targetDir.exists() && !targetDir.isDirectory()) {
                if (targetDir.mkdirs()) {
                    log.info("创建目次成功");
                } else {
                    log.error("创建目次失败");
                }
            }
            String fileName = file.getOriginalFilename();
            File dest = new File(filePath + fileName);
            log.info("文件路径:{}", dest.getPath());
            log.info("文件名:{}", dest.getName());
            file.transferTo(dest);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("url", "/api/upload/" + fileName);
            return success(jsonObject);
        } catch (IOException e) {
            log.info("上传失败:{}", e.getMessage());
        }
        return error(30000, "上传失败");
    }

注册页UserController.java,传入user对象,并将"user_id"、 "state"、 "user_group"、"login_time"、"phone"、"phone_state"、 "username"、"nickname"、"password"、"email"、"email_state"、"avatar"、"create_time"输入,重点是 "username"、"nickname"、"password"必须输入,通过获取username,数据库查询是否有该用户,如果存在,则提示“用户已存在”,否则实行将UserId置为空(数据库表中该字段已设置主动递增),代码如下:

    /**
     * 注册
     * @param user
     * @return
     */
    @PostMapping("register")
    public Map<String, Object> signUp(@RequestBody User user) {
        // 查询用户
        Map<String, String> query = new HashMap<>();
        Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
        query.put("username",user.getUsername());
        List list = service.selectBaseList(service.select(query, new HashMap<>()));
        if (list.size()>0){
            return error(30000, "用户已存在");
        }
        map.put("password",service.encryption(String.valueOf(map.get("password"))));
        service.insert(map);
        return success(1);
}     

注册页password则使用了MD5加密,代码如下:
    public String encryption(String plainText) {
        String re_md5 = new String();
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(plainText.getBytes());
            byte b[] = md.digest();
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }
            re_md5 = buf.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return re_md5;
}

登录页,起首传入"username"、"email"、"phone"、"password",用户可通过用户名、邮箱、手机号举行登岸,通过判断resultList来确定查询效果,然后实行查询用户组UserGroup,用户组里面不存在,依然报“用户不存在”,实行完以上代码,最后涉及到用户带有“稽核”的,会查询examine_state(用户的稽核状态),数据库表user_group中含有source_table和source_field举行查询,以上步骤完成,对输入的暗码举行存储Token到数据库,匹对账号和暗码,数据库中的AccessToken为令牌,用于身份认证,其代码如下:
 /**
     * 登录
     * @param data
     * @param httpServletRequest
     * @return
     */
    @PostMapping("login")
    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
        log.info("[实行登录接口]");
        String username = data.get("username");
        String email = data.get("email");
        String phone = data.get("phone");
        String password = data.get("password");

        List resultList = null;
        Map<String, String> map = new HashMap<>();
        if(username != null && "".equals(username) == false){
            map.put("username", username);
            resultList = service.selectBaseList(service.select(map, new HashMap<>()));
        }
        else if(email != null && "".equals(email) == false){
            map.put("email", email);
            resultList = service.selectBaseList(service.select(map, new HashMap<>()));
        }
        else if(phone != null && "".equals(phone) == false){
            map.put("phone", phone);
            resultList = service.selectBaseList(service.select(map, new HashMap<>()));
        }else{
            return error(30000, "账号或暗码不能为空");
        }
        if (resultList == null || password == null) {
            return error(30000, "账号或暗码不能为空");
        }
        //判断是否有这个用户
        if (resultList.size()<=0){
            return error(30000,"用户不存在");
        }
        User byUsername = (User) resultList.get(0);
        Map<String, String> groupMap = new HashMap<>();
        groupMap.put("name",byUsername.getUserGroup());
        List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
        if (groupList.size()<1){
            return error(30000,"用户组不存在");
        }
        UserGroup userGroup = (UserGroup) groupList.get(0);
        //查询用户稽核状态
        if (!StringUtils.isEmpty(userGroup.getSourceTable())){
            String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
            if (res==null){
                return error(30000,"用户不存在");
            }
            if (!res.equals("已通过")){
                return error(30000,"该用户稽核未通过");
            }
        }
        //查询用户状态
        if (byUsername.getState()!=1){
            return error(30000,"用户非可用状态,不能登录");
        }
        String md5password = service.encryption(password);
        if (byUsername.getPassword().equals(md5password)) {
            // 存储Token到数据库
            AccessToken accessToken = new AccessToken();
            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
            accessToken.setUser_id(byUsername.getUserId());
            Duration duration = Duration.ofSeconds(7200L);
            redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);
            // 返回用户信息
            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
            user.put("token", accessToken.getToken());
            JSONObject ret = new JSONObject();
            ret.put("obj",user);
            return success(ret);
        } else {
            return error(30000, "账号或暗码不准确");
        }
    }

找回暗码,接收用户输入的用户名、暗码、验证码,并举行条件判断,代码如下:
    /**
     * 找回暗码
     * @param form
     * @return
     */
    @PostMapping("forget_password")
    public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
        JSONObject ret = new JSONObject();
        String username = form.getUsername();
        String code = form.getCode();
        String password = form.getPassword();
        // 判断条件
        if(code == null || code.length() == 0){
            return error(30000, "验证码不能为空");
        }
        if(username == null || username.length() == 0){
            return error(30000, "用户名不能为空");
        }
        if(password == null || password.length() == 0){
            return error(30000, "暗码不能为空");
        }

        // 查询用户
        Map<String, String> query = new HashMap<>();
        query.put("username",username);
        List list = service.selectBaseList(service.select(query, service.readConfig(request)));
        if (list.size() > 0) {
            User o = (User) list.get(0);
            JSONObject query2 = new JSONObject();
            JSONObject form2 = new JSONObject();
            // 修改用户暗码
            query2.put("user_id",o.getUserId());
            form2.put("password",service.encryption(password));
            service.update(query, service.readConfig(request), form2);
            return success(1);
        }
        return error(70000,"用户不存在");
    }

修改暗码,通过请求data,获取旧暗码,并将新暗码重新赋值,期间都是需要通过加密,代码如下:
    /**
     * 修改暗码
     * @param data
     * @param request
     * @return
     */
    @PostMapping("change_password")
    public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
        // 根据Token获取UserId
        String token = request.getHeader("x-auth-token");
        Integer userId = tokenGetUserId(token);
        // 根据UserId和旧暗码获取用户
        Map<String, String> query = new HashMap<>();
        String o_password = data.get("o_password");
        query.put("user_id" ,String.valueOf(userId));
        query.put("password" ,service.encryption(o_password));
        int count = service.selectBaseCount(service.count(query, service.readConfig(request)));
        if(count > 0){
            // 修改暗码
            Map<String,Object> form = new HashMap<>();
            form.put("password",service.encryption(data.get("password")));
            service.update(query,service.readConfig(request),form);
            return success(1);
        }
        return error(10000,"暗码修改失败!");
    }
   免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表