1. 引言
目前医院体检预约管理后台系统是面向广大市民的,虽然体检项目多,通用性高,但是没有任何一款系统是面向在校学生的,这就导致现有的医院体检预约管理系统面向的用户不专一。本文设计的校医院体检预约后台管理系统是专门为在校生设计的一款体检预约系统,不仅为学生提供了各种体检组项目,还为学生量身设计了体检套餐供学生选择,学生可以自主的根据时间安排进行线上体检预约,避免了校外医院体检预约的时间限制、人数限制、预约不上的弊端。
2. 系统可行性分析
2.1. SpringBoot框架
SpringBoot是由 Pivotal 团队设计开发的高效率框架结构,通过简化配置来优化Spring应用的搭建和开发过程 [1] [2]。其中最重要的两个核心就是开箱即用和约定大于配置,开箱即用是SpringBoot之所以被广泛使用的主要因素之一,只需配置pom文件即可直接使用对应功能。这大大简化了编程人员的配置工作,使他们可以将更多精力投入到项目的功能开发上。后者是约定大于逻辑,这表明SpringBoot本身会提供默认的配置文件,若其自带的配置符合编程人员的要求,那么我们就不用再去做相应更改 [3] [4]。另外SpringBoot中的Spring Security框架是一款用于系统用户权限管理的安全框架,本系统中在对院方不同的用户进行权限管理的时候只需要在当前的工程模块中引入安全框架的相关依赖,简单配置采用注解式开发就能够实现不同用户的权限管理功能。
2.2. MyBatis-Plus框架
MyBatis-Plus是MyBatis的增强版,在MyBatis的基础上只对功能做了增强,无修改,无侵入,损耗小,是一款十分优秀的持久层ORM (Object Relational Mapping,对象关系映射)框架 [5]。MyBatis-Plus框架里面内置了大量的CRUD (泛指增、删、改、查)操作,能够满足几乎所有的数据库语言的请求。本系统中只需要在父工程的pom文件中引入MyBatis-Plus框架依赖并通过内置的Mapper接口和实现相应的Service就可以实现对数据的增、删、改、查等操作。而且MyBatis-Plus内置了分页相关插件,支持多种数据库语言,兼容性好,可靠性高。
2.3. Element UI + Vue框架
Element UI是一个为Vue而生的UI框架,Element UI是一个ui库,它不依赖于Vue,是现阶段和vue配合做项目开发的一个较好的UI框架 [6]。开发人员无需自己定义网页的标签、按钮等,只需要引入相关的JavaScript插件和Element UI的组件库即可快速完成网站页面的开发。利用Element UI技术对前端界面元素进行设计,可以有效解决计算机能够显示完整的网页界面而手机端出现网页界面不全的问题 [7]。Vue是一套构建用户界面的渐进式框架 [8] [9],其最大的特点就是数据的双向绑定功能特别强大,该框架采用MVVM (Model-View-ViewModel)开发模式,这种模式将前端从原始的“DOM”操作中解放出来,我们不再需要花费大量的时间来维护视图和数据的统一,只需要关注数据“Data”的变化 [10]。ViewModel会随着View的变化发生自动更新,与此同时它的变化也会在View中显示出来,而不需要开发人员为数据绑定投入更多的精力,可以多注重于业务层的代码实现。Element UI + Vue框架的组合式开发,能够让网站页面设计的更加快速、美观、细腻丝滑,能够给用户很好的用户体验和视觉感受,大大减少了开发人员在前台所耗费的时间。
3. 系统功能架构
本系统采用微服务框架进行搭建和开发,选择Dubbo服务框架实现服务的治理功能。Dubbo是阿里巴巴公司开源出来的SOA服务化治理方案的核心框架,它是一个分布式的专注于提供高性能和透明化的RPC远程服务调用,以及SOA服务治理的方案 [11] [12]。

Figure 1. Functional architecture diagram
图1. 功能架构图
该系统中需要启动服务提供者的服务,体检和权限管理相关服务全部注册到Dubbo的注册中心去,Zookeeper实现服务的注册和负载均衡功能,同时监控中心实现对服务的实时监控,负责统计服务调用次数和服务的运行状态。服务消费者启动时向注册中心订阅自己所需要的服务,后台根据业务实际需要直接从Dubbo中拉去服务使用,业务完成后通过持久化技术栈将数据保存到数据库中去。该系统的功能架构如图1所示。
4. 系统设计
整个系统采用SpringBoot框架进行搭建,系统的接口、实现类、控制层、实体类等代码采用MyBatis-Plus代码生成器生成,然后将生成不同业务类型的代码复制到该系统不同业务的目录下。系统采用maven分模块开发方式,整个系统模块拆分为若干maven工程,父工程提供统一的依赖规范,而在其余的子工程中存放特定类型的代码。该系统的项目结构简单描述如下:
Parent:父工程,打包方式为pom,统一锁定依赖的版本,同时聚合其他子模块便于统一执行maven命令。该模块不需要写任何代码,只需要导入子工程所需要的公共依赖和指定版本供子工程使用;
POJO:数据库对应的实体类,MyBatis-Plus代码生成器根据数据库中的表生成相对应的实体类,然后将实体类代码全部复制到该目录下;
Utils:工具类模块,该目录存放各种封装好的工具类供开发人员使用,存放项目中使用到的一些工具类、返回结果和常量类;
Interface:该目录主要存放服务的接口,该接口只起到声明作用,具体的业务需要在该接口的实现类中编写;
Provider:Dubbo服务方模块,存放服务接口的实现类、Dao接口、Mapper映射文件等,作为服务提供方,注册到Dubbo的注册中心去,供其他服务调用。所有体检相关信息的业务全部在本模块的实现类中编写;
Controller:Dubbo消费方模块,也称为控制层,存放 Controller、HTML页面、JavaScript、CSS、Spring配置文件等,作为服务消费者同样需要注册到Dubbo的注册中心去,该模块处理前台的Http请求,根据具体的请求来调用Provider中的不同的业务,然后将业务处理结果返回到前台;
Security:权限管理模块,该模块主要负责系统用户的权限管理的设计。
4.1. 数据库设计
数据库位于整个系统的底层,是整个系统设计中最为重要的一环。该系统的数据库总共包括10张表,包括体检相关信息的5张表和用户权限管理的5张表。主要数据表的简单描述如下:
t_checkitem,体检项信息表,用于保存院方发布的各种体检项信息,其表中字段描述如表1所示:

Table 1. Physical examination items information sheet
表1. 体检项信息表
t_checkgroup:体检组信息表,用于保存体检组相关的信息,该表和体检项信息表是多对多关系,一个体检组可以包括多个体检项,同时一个体检项也可以隶属于多个体检组,二者通过关联表产生关联关系,其表中的字段描述如表2:

Table 2. Physical examination group information sheet
表2. 体检组信息表
t_setmeal:套餐信息表,用于保存院方发布的各种套餐信息,其表中字段描述如表3所示:
t_user:用户信息表,用于存储登录用户的相关信息,其表中的字段描述如表4所示:
t_role:角色信息表,用户存储用户所拥有的角色的相关信息,其表中的字段描述如表5所示:
t_menu:权限信息表,用户存储角色所拥有的权限的相关信息,其表中的字段描述如表6所示:

Table 6. Permission information sheet
表6. 权限信息表
而最终设计好的数据库架构如图2所示:
4.2. 体检项模块设计
系统默认显示的页面是体检项页面,该页面显示各种体检项信息。院方用户登录后可以查看当前所有的已发布体检项相关信息,可以输入搜索条件查询指定的体检项。院方能够点击修改按钮对已经发布的体检项信息进行修改,能够点击删除按钮删除不需要的体检项,也能够根据实际需要新建一个体检项。系统首页体检项信息的展示如图3所示:

Figure 3. Display of physical examination items
图3. 体检项展示
4.3. 体检组模块设计
用户可以点击前台页面导航栏的体检组信息管理按钮实现对体检组信息的查看,体检组信息展示页面如图4所示:

Figure 4. Display of physical examination group
图4. 体检组展示
用户可以查看所有体检组信息,也可以输入搜索条件查询指定的体检组信息。一个体检组包括了多个体检项,因此对于体检组的增、删、改操作不仅要操作体检组本身的数据,还需要对当前体检组下属的体检项信息进行操作。
体检组新增:用户点击新建按钮,弹出对话框输入相关的体检组信息,同时也要回显当前院方发布的所有的体检项相关信息供用户选择,选择当前新建体检组所需要的体检项选项,完成体检组信息的创建,体检组新建展示和体检项信息回显展示如图5和图6所示:

Figure 5. Display of the echo physical examination items
图5. 体检项回显展示

Figure 6. Display of physical examination items information
图6. 体检项信息回显
体检组编辑:用户点击编辑按钮,实现对体检组信息的编辑。点击按钮的同时要实现当前正在编辑的体检组信息的回显和体检项信息的回显,然后在对体检组的进行修改,修改完成点击提交按钮即可完成数据库中体检组信息的更新。体检组编辑展示如图7:

Figure 7. Display of editing physical examination group
图7. 体检组编辑展示
体检组删除:用户点击删除按钮,可以实现体检组的删除。体检组和体检项是通过关联表产生关联关系的,数据库中删除体检组的同时也要把关联表的数据删除。
4.4. 套餐模块设计
该系统的套餐模块是专门为学生设计的,是本系统中的特色模块,该模块下包含多种套餐,可供不同群体的学生选择和体检,其中包括为毕业生设计的男女入职体检套餐和针对新生设计的全身体检套餐等。套餐与体检组是多对多关系,套餐下面包括多个体检组,学生预约套餐成功后即可根据该套餐的信息去相应的门诊去体检。用户可以点击前台页面导航栏的体检组信息管理按钮实现对体检套餐的查看,体检套餐信息展示页面如图8所示:
套餐查询:院方可以根据实时情况查询所需要的套餐信息,直接在输入框输入套餐编码、套餐名称或者套餐助记码即可查询其对应的套餐。查询编码为001的套餐展示如图9所示:
套餐新增:院方用户点击新建按钮,弹出对话框,输入套餐相关信息,包括套餐编码、名称、适用性别和助记码等,新增套餐的同时也要回显当前院方发布的所有的体检组相关信息供用户选择,输入完套餐信息和选择完该套餐下的体检组后点击确定按钮即可实现套餐的新增。新增套餐和体检组信息回显如图10和图11所示:
套餐编辑:用户点击编辑按钮,实现对套餐信息的编辑。点击按钮的同时要实现当前正在编辑的套餐信息的回显和体检组信息的回显,然后再对当前套餐进行修改,修改完成点击确定按钮即可完成数据库中套餐数据的更新。编辑编码为0001的套餐如图12所示:
套餐删除:用户点击删除,弹出对话框二次确认是否删除,点击确认完成数据库中套餐数据的删除。套餐和体检组是通过关联表产生关联关系的,删除数据库中的套餐数据同时也要把关联表的数据删除。
4.5. 用户权限管理设计
该系统中根据不同的用户设置了不同的权限,院方不同级别的用户拥有不同的操作权限,主任、副主任医师等具有对体检组、体检项和套餐的增、删、改、查权限,普通医生只有查看体检相关信息权限。权限管理设计需要五张表,即t_user (用户信息表)、t_user_role (用户和角色关联表)、t_role (角色表)、t_role_menu (角色和权限关联表)和t_menu (权限表)。权限管理模块不同于其它工程模块,关于权限管理的业务需要写在SpringSecurity安全框架中的UserDetailsService接口的实现类中,该接口是Spring Security专门用于权限认证的接口,其实现类的返回值类型是UserDetails。权限管理的具体设计如下阐述:
首先用户通过用户名和密码登录系统,根据用户名去数据库中的t_user表查询该用户的信息,根据查询的用户id去t_user_role关联表中查询该用户id对应的外键所对应的角色id对应的外键,然后再根据t_user_role关联中表查询出来的角色id对应的外键去t_role表中查询该用户所拥有的角色id,进而查询到该用户所拥有的角色信息,将角色信息中的角色关键字用Spring Security中专门的权限认证构造函数SimpleGrantedAuthority封装,封装完后在将结果存放到ArrayList集合中。然后采用相同的方式将查询到的权限关键字用SimpleGrantedAuthority封装,封装完后同样存放到ArrayList集合中去。权限管理业务最终的返回值类型为User,其中有三个参数,第一个为系统登陆用户的用户名,第二个为用户密码,第三个为存放着用户角色和权限的ArrayList集合。具体的业务实现流程如图13所示。
具体的权限认证方式在Controller层上采用注解式开发进行权限认证,这里使用@PreAuthorize (“hasAnyAuthority (‘权限关键字’)”)和@Secured (“角色关键字”)这两个注解实现。@PreAuthorize (“hasAnyAuthority (‘权限关键字’)”)表示当前登录用户拥有指定权限关键字才能够调用业务层方法,@Secured (“角色关键字”)表示当前用户是指定角色才能调用业务层方法。
5. 结语
随着计算机科学技术在校园生活中的应用,以信息化的方式来代替学生们线下体检预约必将成为未来校园的发展趋势。本文根据当前疫情的扩散和现有的医院体检预约管理后台系统不够专一的情况,提出了一种基于SpringBoot的校医院体检预约后台管理系统的设计。该系统为不同群体的学生提供了相对应的体检套餐,学生们能够根据自己的性别、年龄和实际情况选择适合自己的体检套餐进行预约体检。由于本系统是面向在校生的,不为社会人员开放,因此能够大大提高学生体检流程的效率,减少学生用户体检排队时长,既加强了学生和校医院之间的联系,也进一步提升了学生对校医院的满意度,为其它校医院的体检预约工作提供了参考。
基金项目
2020年国家自然科学基金,62003191,基于稀疏慢特征分析的间歇过程故障诊断方法研究。
2020年山东省自然科学基金,ZR2020QF072,基于融合特征稀疏表征GSFA的间歇过程故障检测和识别方法研究。
参考文献