如何使用ssm实现基于java 的病房管理系统+vue

322 篇文章 0 订阅
129 篇文章 0 订阅

@TOC

ssm715基于java 的病房管理系统+vue

第1章 绪论

1.1 选题动因

到现在为止,互联网已经进入了千家万户,最普通的平民百姓也有属于自己的智能设备,计算机各种技术的储备也是相当的丰富,并且实现也是没有难度,各行各业,包括一些个人,也积极拥抱互联网时代的到来,也可以说是互联网时代的到来把人们都给包在互联网之中。从刚开始的政府办公,国家企业的开头使用,到如今的老百姓都能用上,别说那些普通企业了。计算机就是有这样的魅力,互联网被称为浪潮不是浪得虚名的。采用计算机技术,开发一些软件,实现软件所在的目的,这是一个常理,这个基础的常理缩短了地域之间的联系,提高了地域竞争水准,减低了人力成本和数据存储成本。本课题研究的病房管理系统,也是采用了计算机技术,该系统能够提高病房信息数据的检索速度,使用起来非常的方便。

1.2 目的和意义

在病房管理系统实际操作中,使用者会发现使用起来相当的方便,并且对数据的管理者来讲,也能及时的获得自己想要的数据,对整个数据的所有者能提供强大的帮助,病房管理系统从操作者的角度出发,不管是在数据的接收以及传递,以及处理结果,都有一个很明显的要求,对有效数据的处理,并且形成集合,并且对有效数据集合进行固定化处理,可以得到更有效的数据,有了病房管理系统,让管理层不至于把大量的人力和财力资源消耗在数据处理整合方面,完全可以让不知疲倦的计算机来进行,不仅投入减低,并且产出也不少。互联网时代就是如此,顺之者昌,响应互联网时代,不至于说可以乘风破浪,起码可以降低直接淘汰出局的几率。病房管理系统的出现是顺应时代的。

1.3 论文结构安排

病房管理系统的论文结构将从6个章节进行阐述。具体结构安排如下:

第1章:本章节对本课题的选题动因,本课题的研究目的和意义进行说明。

第2章:本章节对本课题需要运用的环境和技术进行说明。

第3章:本章节对本课题性能,功能进行分析,对系统开发的经济,技术等条件是否可行进行说明。

第4章:本章节对本课题具体的功能进行设计,同时也对系统的数据库进行E-R图设计以及数据表设计。

第5章:本章节对实现的功能的运行效果图进行展示,同时对系统的功能进行说明。

第6章:本章节对系统功能上的测试进行说明,对测试的结果进行分析。

第2章 开发环境与技术

病房管理系统需要提前对功能进行调查分析,并且根据分析结果进行技术上的辩证,可以选择更合理的开发技术以及开发工具。

2.1 Tomcat 简介

只要学习Java Web项目就不得不学习Tomcat。Tomcat是一种免费的开源的一种Java Web项目的容器,完美继承了 Apache服务器的特性,并且里面添加可以自动化运行的Java Web组件,让Java Web项目可以完全的运行到Tomcat里面。对于特大型项目来讲,直接用Tomcat会造成启动变慢,处理有限等,所以对项目进行了前后端分离技术,但是对于需要称不上特大型的项目来讲,普通的大中型项目用Tomcat作为Java Web项目的运行容器是完全够资格的。最重要的是Tomcat完全跟着Java EE,每一次Java EE的升级,Tomcat都会有着对应的版本出现,版本更新速度是非常快的。更新速度快,代表着有技术方面的支持,值得用户使用的,让用户更加信赖Tomcat产品。

2.2 Eclipse简介

Eclipse这款开发工具最最重要的特点就是免费,不管是用来开发任何的东西,哪怕用来教学或者是生产,只要是能带了商业价值的生产都可以免费使用,这一点对于IDEA或者MyEclipse来讲,是非常的具有前瞻性的。免费的也许有很多不足,但是就是因为免费,所以很多人愿意贡献自己的力量,让这款免费的工具可以拥有更多的插件,用起来更加的舒心。可以这么说,Eclipse就是Java语言开发行业的鼻祖,只要是学过Java的人,对Eclipse没有不熟悉的。Eclipse操作起来非常的方便,可以不用安装,直接解压了就可以使用,并且可以在不同的操作系统上面都可以安装到对应的版本。Eclipse是真的不要钱,免费,下载就能用,这么多年以来长期占领着Java开发市场的半壁江山。Eclipse可以在官网上进行捐款,捐款可以支持Eclipse进一步发展,也可以不捐款直接使用,一切随心,不会强求。Eclipse真的是一款良心Java生产工具。

2.3 Navicat简介

Navicat是一款管理数据库的软件。众所周知,所有的数据库只是以特定的存放格式进行存放的,访问也需要特定的接口以及语句进行访问。如果访问数据库都用各种命令,不仅仅是开发效率上会大大的降低,并且看起来也不舒服,对于某些数据或者数据库来讲这样并不友好,如何对数据库进行友好的访问到现在为止,不同的数据库厂商都推出了适合自己数据库的管理工具,但是有一点就是,数据库厂商推出之后,只要能用就行,并没有符合人体工程学,所有的数据库厂商推出的数据库管理工具都是免费的,所以并没有对于数据库管理工具进行过多的优化,用起来相当的不友好,并且各个数据库工具是不能通用的,这一点数据库厂商肯定不会去做匹配其他数据库的管理工具,所以Navicat就应运而生,可以采用Navicat管理各种各样的数据库,可以同时访问各种数据库并且通过不同的连接进行访问,还可以访问不同电脑的数据库,页面操作简单,美观大方,用起来很好用,并且占用电脑资源很小,很适合作为替代其他数据库厂商推出的数据库管理工具使用。

第3章 系统分析

通过对系统的功能进行具体分析,可以参考已经发表过的具有参考价值的文章作为对比,这样能把功能分析的很透彻,并且也会因为功能的分析而对性能也有大致的了解,并且可以预测性能,实现性能分析的结果。

3.1 可行性分析

系统的设计必须符合正常逻辑,所以设计之处,也需要从其他方面来论证其可行性。

3.1.1 经济可行性

开发病房管理系统,存在经济上面的支持,必须经济上的支持才可以有序进行,比如是否需要额外购买开发工具,购买开发电脑,或者从开发技术上是否是免费开源,达到的效果上面是否支出与收入不匹配,这些都需要进行分析。由于开发本系统,开发技术开源且稳定,电脑用正在使用的电脑就能满足,不需要太多的经济支出就可以达到目的,经济可行性通过。

3.1.2 技术可行性

病房管理系统软件主要用到的一些工具,而这些工具正好在学校就使用过,并且网上有很多免费的并且符合的开发工具,技术方面也学过,并且有图书馆的资源和网络资源可以充分利用。所以在技术角度上面来分析是可以的。

3.1.3 操作可行性

操作方面分为开发过程,实现过程,项目具体操作流程。这些因为都学过,并且有其他的项目流程作为参考。总体实现一般就是用户的登录相关,权限分配,基础数据的变更体现。让不同的角色有不同的操作界面,符合正确角色定位,使用者在操作上面并不会感觉到很突兀,影响操作流程。所以操作方面是可以的。

通过以上不同角度的分析,最后论证分析了可行性是没有问题的,完全可以进行后续步骤。

3.2 系统流程分析

操作逻辑是一个可以用画图工具展示的,因为数据在录入过程中的不可见,只能看到返回结果,所以把流程画成图可以更好的理解其中的顺序。

在系统的各项操作中,其他的录入环节,会对操作者具体操作的每条信息都会提出验证要求,比如不能为空,只能是汉字,以及其他的要求等,这些都在前端需要编写清楚,达到友好提示的目的,有效的帮助操作人员理解操作。具体数据的流程如下面的图所示。当操作员输入信息后,点击提交后台就会接收操作员提交的信息,并且提前编写好的逻辑会继续验证,如果数据合格就存入到数据库里并且返回成功提示,这样一个录入环节就达到了设计要求。

图3.1 添加信息流程图

有时候录入的一些数据可能需要修改,修改就是纠正之前的操作,所以修改数据必须是先把想要修改的数据从数据库里获取出来,然后在这个之上进行修改,修改数据也有相应的操作流程。

图3.2 修改信息流程图

数据的查询是在任何程序上都是一个常规的操作,面对的数据量不一样,想要获取想要的数据时间也不一样,都是尽快的获取自己想要的结果,所以数据查询就需要有个查询条件作为查询关键词,这样可以更好的获取符合关键词的数据。

图3.3 查询信息流程图

3.3 系统性能分析

关于病房管理系统从性能需求方面来分析,主要从五个角度分析。五个角度分别从设计的实用性,设计的操作性,设计的安全性,设计的适应性和维护性这五个角度来进行分析。

首先分析第一点,设计的实用性。本设计的目的就是让管理员可以综合的处理各种基础信息,并且有相应的权限来进行操作,达到数据同步,集中管理的目的,并且可以让用户处理用户相关信息,符合设计的既定目标,达到使用效果。

其次分析第二点,设计的操作性。开发出来的系统必须有操作性,如果操作起来丢三落四,出现各种不符合流程的操作,那么就是不符合设计规则的,设计的操作性必须符合人体工程学使用原则,从上到下,从左到右,让操作起来更加的有逻辑性,不需要不符合逻辑的页面数据体验和操作流程,让设计的操作性体现出来,看到操作界面就会有相应的下一步理解。

再次是安全性,虽然从任何角度来讲,安全性应该放到第一位,但是有些时候安全性是在数据量大并且数据重要的前提下才会对数据的安全性来进行设计,正常的软件使用过程只要数据设计合理,并且目标单一,让黑客不屑于或者付出不成正比的情况下,安全性自然可以稍微降低一点,毕竟面对的使用群体决定了安全性的强度。本设计主要是从毕业设计的角度出发,增加一点数据校验的安全性就行,没必要设置硬件防火墙之类的资源,所以安全性上面也是符合的。

再次是适应性。适应性主要是面对各种平台的操作系统,目前本设计的开发可以使用本人电脑进行开发,服务器可以架设到任何地方,并且有对应的服务器软件版本。而用户方面只需要能上网,有最新版本的浏览器进行支持即可,所以适应性是相当不错的。

最后是分析维护性。这一点只需要维护服务端代码即可,每次服务端代码维护都可以先把服务器停止,然后在开发电脑上进行测试,最后测试无误再在服务器上进行部署,维护性并不会增加多少成本。

3.4 系统功能分析

当设计人员通过参考各种文献以及其他类似项目的调研后,就会对项目具体的功能进行分析,这样有的放矢可以更快的设计程序的功能。

病房管理系统的操作者有管理员,分析的管理员功能将使用用例图进行展示。图3.4展示了管理员用例图。管理员对开方类型,药品类型,职位等基础数据进行管理,对病床,病床使用,患者,医护人员,药品,开方等信息进行管理。

图3.4 管理员用例图

病房管理系统的操作者有医生,分析的医生的功能将使用用例图进行展示。图3.5展示了医生用例图。医生增删改查病例,开方,药品信息,查看病床信息以及病床使用信息。

图3.5 医生用例图

病房管理系统的操作者有医护人员,分析的医护人员的功能将使用用例图进行展示。图3.6展示了医护人员用例图。医护人员主要是查看患者,病例,开方信息以及药品信息,查看病床信息以及病床使用信息。

图3.6 医护人员用例图

病房管理系统的操作者有患者,分析的患者的功能将使用用例图进行展示。图3.7展示了患者用例图。患者查看病例,查看开方信息,查看病床使用信息。

图3.7 患者用例图

第4章 系统设计

在系统设计环境,业务的处理逻辑和数据的设计逻辑虽然是重中之重,但是这些都是用户看不见摸不着的,用户也只是能看到部署好的项目运行起来的结果,所以用户对界面布局以及界面功能比较看重。所以说,如今只要是开发网站不仅仅是需要懂一点页面设计就行,也需要懂得UI设计的人群。传统的网页设计其实就是换几个颜色,放几张图片,然后来充实操作页面,让操作页面不至于太单调,但是互联网发展至今,开发也越来越精细化,用户越来越挑剔,还用凑合方式来进行程序开发,已经是属于落后的状态了。

4.1 布局设计原则

布局不是传统的把页面分分类,输入和显示页面,调整调整间距这些笼统的说法了,布局设计也是有一定的原则的。

首先,布局一定要清晰合理。布局的清晰不是说图片清晰或者文字清晰,而是说用户在使用过程中,看到导航的布局,就能明白所有功能模块都可以在导航里寻找,打开一个页面,就能知道重要与不重要的资料,必须与不必须的填写,甚至是输入的格式是什么规格,都可以让用户使用的时候一目了然。因为界面是有限的,所以说布局是相当重要的一点设计原则。

其次,布局的体现要符合大众审美,比如说导航,尽量都是网页的上方或者左侧。如果把导航放到网页下方或者右方,这些代码都是可以实现,但是不符合正常人的思维定向。现代人的读写习惯都是从上而下,从左到右的阅读方式,人们身体和心灵已经习惯了这种方式,如果布局到其他方向首先用户会感到新颖,但是却不会买账,因为操作几遍后就会不习惯。

最后,布局也要考虑这个软件是用来做什么的,常用这个软件的人员的年龄划分,性别划分,以及职业划分。划分了使用人群,就可以对背景进行调色填充,如果是长时间用电脑的人群尽量设计的有护眼功能,不至于看一会眼睛就受不了,尽量要区分长时间使用和短时间使用的背景,这一点很重要。

综上所述,系统设计需要考虑方方面面,布局设计也是需要精细化考虑,系统设计需要考虑太多,但是实现却不能弄得操作上太复杂,系统设计尽量的要满足用户需要,提高用户满意度。

4.2 功能结构设计

在基于系统功能分析的基础之上,开始对系统的详细功能进行设计,最终将使用结构图的形式对设计的结果进行展示。

管理员具备的详细功能将参照最终的设计结果,即图4.1所示的管理员功能结构图。其中管理员对开方类型,药品类型,职位等基础数据进行管理,对病床,病床使用,患者,医护人员,药品,开方等信息进行管理。

图4.1 管理员功能结构图

医生具备的详细功能将参照最终的设计结果,即图4.2所示的医生功能结构图。其中医生增删改查病例,开方,药品信息,查看病床信息以及病床使用信息。

图4.2 医生功能结构图

医护人员具备的详细功能将参照最终的设计结果,即图4.3所示的医护人员功能结构图。其中医护人员主要是查看患者,病例,开方信息以及药品信息,查看病床信息以及病床使用信息。

图4.3 医护人员功能结构图

患者具备的详细功能将参照最终的设计结果,即图4.4所示的患者功能结构图。其中患者查看病例,查看开方信息,查看病床使用信息。

图4.4 患者功能结构图

4.3 数据库设计

数据库的选用方面肯定要选一个市场反应比较好,性价比比较高的数据库,不能凭空想象数据库,要结合程序设计的需求来选择对应的数据库。目前来讲,市面上常用的关系型数据库足够达到需求。

4.3.1 数据库E-R图设计

想好更好的设计出数据库使用效果,那么就要对数据的存放格式以及存放关系作出调查和梳理,所以通过分析E-R图之间的数据实体关系是最好不过的。而设计数据库E-R图是有下面几点好处:

第一点:数据的冗余是一件很恐怖的事情,所以要对有些数据进行冗余筛选;

第二点:防止内存溢出,数据量太大,需要提前做好预测并且设定好规则;

第三点:数据库一定要完整,非完整数据也只是数据垃圾而已,没有任何作用;

第四点:提高数据检索性能;

这节主要是描述对系统的E-R模型的设计,数据存储格式的判断,实现的方法,用户的需要,这些都要统一,不能想当然。并且各个模型中间的关系尤其要突出。

(1)把患者具备的属性通过属性图进行展示,绘制的属性图见图4.4。

图4.4 患者实体属性图

(2)把开方具备的属性通过属性图进行展示,绘制的属性图见图4.5。

图4.5 开方实体属性图

(3)把医生具备的属性通过属性图进行展示,绘制的属性图见图4.6。

图4.6 医生实体属性图

(4)把病例具备的属性通过属性图进行展示,绘制的属性图见图4.7。

图4.7 病例实体属性图

(5)上述实体间关系见图4.8。

图4.8 实体间关系E-R图

4.3.2 数据库表结构设计

数据库设计必须符合规范,那就是三大范式,这样能确保数据的合理:

第一范式:保证表之间的字段关系不存在混淆的描述,必须描述准确,并且单一,不能分解;

第二范式:在上述的满足条件上,主键的设计必须要在固定的列上,不能忽前忽后;

第三范式:继续满足上个条件,保证每个字段都可以根据主键获取到,并且在一个数据表里体现。

所以说,三个范式是一脉相承的,不是说零碎的,从第一个范式上就会发现,第一个永远是基础,后面的设定就是后者的实现必须在前面范式的基础之上的要求,这些设计可以最大化的减少数据冗余,提高数据库运行效率。

表4.1 病床表

字段注释类型
id (主键)主键int(11)
bingchuang_uuid_number病床编号varchar(200)
fangjian_name房间名varchar(200)
fangjian_address房间位置varchar(200)
chuanghao床号varchar(200)
shifoushiyong_types是否使用int(11)
insert_time记录时间timestamp
create_time创建时间timestamp

表4.2 病床使用表

字段注释类型
id (主键)主键int(11)
huanzhe_id患者int(11)
bingchuang_id病床int(11)
bingli_uuid_number病房使用唯一编号varchar(200)
ruzhu_time入住时间timestamp
likai_time离开时间timestamp
zhuangtai_types状态int(11)
insert_time记录时间timestamp
create_time创建时间timestamp

表4.3 病例表

字段注释类型
id (主键)主键int(11)
huanzhe_id患者int(11)
bingli_uuid_number病例编号varchar(200)
zhuyuan_time住院时间timestamp
yichuan_text遗传史text
zhusu_text患者主诉text
zhenduan_text诊断结果text
insert_time记录时间timestamp
create_time创建时间timestamp

表4.4 患者表

字段注释类型
id (主键)主键int(11)
username账户varchar(200)
password密码varchar(200)
huanzhe_name患者姓名varchar(200)
huanzhe_phone患者手机号varchar(200)
huanzhe_id_number患者身份证号varchar(200)
huanzhe_photo患者照片varchar(200)
sex_types性别int(11)
age年龄int(11)
huanzhe_email电子邮箱varchar(200)
hunyin_types婚姻int(11)
xian_address现住址varchar(200)
huji_address户籍地址varchar(200)
create_time创建时间timestamp

表4.5 开方表

字段注释类型
id (主键)主键int(11)
huanzhe_id患者int(11)
kaifang_uuid_number开方编号varchar(200)
kaifang_name药方名称varchar(200)
kaifang_types开方类型int(11)
kaifang_content开方内容text
insert_time开方时间timestamp
create_time创建时间timestamp

表4.6 管理员表

字段注释类型
id (主键)主键bigint(20)
username用户名varchar(100)
password密码varchar(100)
role角色varchar(100)
addtime新增时间timestamp

表4.7 药品表

字段注释类型
id (主键)主键int(11)
yaopin_uuid_number药品编号varchar(200)
yaopin_name药品名称varchar(200)
yaopin_photo药品照片varchar(200)
yaopin_types药品类型int(11)
yaopin_kucun_number库存数量int(11)
yaopin_content药品详细介绍text
create_time创建时间timestamp

表4.8 医护人员表

字段注释类型
id (主键)主键int(11)
username账户varchar(200)
password密码varchar(200)
yihurenyuan_name医护人员姓名varchar(200)
yihurenyuan_phone医护人员手机号varchar(200)
yihurenyuan_id_number医护人员身份证号varchar(200)
yihurenyuan_photo医护人员头像varchar(200)
sex_types性别int(11)
yihurenyuan_email电子邮箱varchar(200)
yihurenyuan_zhiwei_types医护职位int(11)
create_time创建时间timestamp

表4.9 医生表

字段注释类型
id (主键)主键int(11)
username账户varchar(200)
password密码varchar(200)
yisheng_name医生姓名varchar(200)
yisheng_phone医生手机号varchar(200)
yisheng_id_number医生身份证号varchar(200)
yisheng_photo医生头像varchar(200)
sex_types性别int(11)
yisheng_email电子邮箱varchar(200)
keshi_types科室int(11)
zhiwei_types职位int(11)
yisheng_shanchang擅长varchar(200)
yisheng_rongyu所获荣誉varchar(200)
create_time创建时间timestamp

打开新的 phpMyAdmin 窗口

第5章 系统实现

下面主要是对系统实现的功能进行描述,一般在系统实现阶段只算是一个粗略的功能实现,可能符合开发人员的设计预期,但是对于具体使用者来讲还是需要其他人进行发现的,所以这个环节是很有必要进行描述的。

5.1 管理员功能实现

5.1.1 患者管理

实现患者管理功能,其界面运行的效果图见图5.1。患者信息有现住址,户籍地址,婚姻,患者照片,性别等信息,管理员可以修改有错误数据的患者信息,以及使用删除功能删除需要删除的患者信息等。

图5.1 患者管理界面

5.1.2 病床管理

实现病床管理功能,其界面运行的效果图见图5.2。病床信息有房间名,房间位置,床号,是否使用等信息,管理员修改有错误数据的病床信息,使用删除功能删除需要删除的病床信息,或者使用床号,房间名实现对病床信息的查询。

图5.2 病床管理界面

5.1.3 病床使用管理

实现病床使用管理功能,其界面运行的效果图见图5.3。病床使用信息也需要管理员登记,其中包括病床编号,患者手机号,患者入住时间,状态等信息,病床使用信息有错误,管理员需要修改,对于需要清理的病床使用信息,管理员使用删除功能即可删除。

图5.3 病床使用管理界面

5.2 医生功能实现

5.2.1 病例管理

实现病例管理功能,其界面运行的效果图见图5.4。医生为患者看病之后,为患者添加病例信息,包括患者主诉,诊断结果,住院时间等信息,医生也能修改登记错误的病例信息,以及通过病例编号实现对患者病例的查询。

图5.4 病例管理界面

5.2.2 开方管理

实现开方管理功能,其界面运行的效果图见图5.5。医生针对患者病情的诊断结果开具处方,其中包括药方类型,开发类型,开方时间等信息,以及医生对开方信息进行修改,查询等。

图5.5 开方管理界面

5.2.3 药品管理

实现药品管理功能,其界面运行的效果图见图5.6。在该界面,医生负责添加药品,修改添加错误的药品信息,删除需要删除的药品信息,以及管理药品的库存,主要管理方式是增加药品的库存,或对药品库存进行减少等操作。

图5.6 药品管理界面

5.3 医护人员功能实现

5.3.1 病床使用查看

实现病床使用查看功能,其界面运行的效果图见图5.7。医护人员查询病床使用信息,查询前,可以提供患者姓名,病床编号,状态等查询条件来查询病床使用信息。

图5.7 病床使用查看界面

5.3.2 病例查看

实现病例查看功能,其界面运行的效果图见图5.8。医护人员查询患者病例,查看病例的诊断结果,住院时间,患者主诉信息等。

图5.8 病例查看界面

5.3.3 开方查看

实现开方查看功能,其界面运行的效果图见图5.9。医护人员查询医生为患者开具的药方,以及对开方的药方名称,开方时间等信息进行查看。

图5.9 开方查看界面

5.4 患者功能实现

5.4.1 病例查看

实现病例查看功能,其界面运行的效果图见图5.10。患者查询病例,查看诊断结果等详细信息。

图5.10 病例查看界面

5.4.2 开方查看

实现开方查看功能,其界面运行的效果图见图5.11。患者查询开方,查看药方名称,开方编号,开方类型等信息。

图5.11 开方查看界面

UsersServiceImpl.java

package com.service.impl;


import java.util.List;
import java.util.Map;

import com.service.UsersService;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.UsersDao;
import com.entity.UsersEntity;
import com.utils.PageUtils;
import com.utils.Query;


/**
 * 系统用户
 * @author
 */
@Service("userService")
public class UsersServiceImpl extends ServiceImpl<UsersDao, UsersEntity> implements UsersService {

	@Override
	public PageUtils queryPage(Map<String, Object> params) {
		Page<UsersEntity> page = this.selectPage(
                new Query<UsersEntity>(params).getPage(),
                new EntityWrapper<UsersEntity>()
        );
        return new PageUtils(page);
	}

	@Override
	public List<UsersEntity> selectListView(Wrapper<UsersEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public PageUtils queryPage(Map<String, Object> params,
			Wrapper<UsersEntity> wrapper) {
		 Page<UsersEntity> page =new Query<UsersEntity>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
	}
}

YihurenyuanServiceImpl.java
package com.service.impl;

import com.utils.StringUtil;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import com.dao.YihurenyuanDao;
import com.entity.YihurenyuanEntity;
import com.service.YihurenyuanService;
import com.entity.view.YihurenyuanView;

/**
 * 医护人员 服务实现类
 */
@Service("yihurenyuanService")
@Transactional
public class YihurenyuanServiceImpl extends ServiceImpl<YihurenyuanDao, YihurenyuanEntity> implements YihurenyuanService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        if(params != null && (params.get("limit") == null || params.get("page") == null)){
            params.put("page","1");
            params.put("limit","10");
        }
        Page<YihurenyuanView> page =new Query<YihurenyuanView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }


}

YihurenyuanController.java

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 医护人员
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/yihurenyuan")
public class YihurenyuanController {
    private static final Logger logger = LoggerFactory.getLogger(YihurenyuanController.class);

    @Autowired
    private YihurenyuanService yihurenyuanService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service

    @Autowired
    private HuanzheService huanzheService;
    @Autowired
    private YishengService yishengService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("患者".equals(role))
            params.put("huanzheId",request.getSession().getAttribute("userId"));
        else if("医护人员".equals(role))
            params.put("yihurenyuanId",request.getSession().getAttribute("userId"));
        else if("医生".equals(role))
            params.put("yishengId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = yihurenyuanService.queryPage(params);

        //字典表数据转换
        List<YihurenyuanView> list =(List<YihurenyuanView>)page.getList();
        for(YihurenyuanView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        YihurenyuanEntity yihurenyuan = yihurenyuanService.selectById(id);
        if(yihurenyuan !=null){
            //entity转view
            YihurenyuanView view = new YihurenyuanView();
            BeanUtils.copyProperties( yihurenyuan , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody YihurenyuanEntity yihurenyuan, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,yihurenyuan:{}",this.getClass().getName(),yihurenyuan.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<YihurenyuanEntity> queryWrapper = new EntityWrapper<YihurenyuanEntity>()
            .eq("username", yihurenyuan.getUsername())
            .or()
            .eq("yihurenyuan_phone", yihurenyuan.getYihurenyuanPhone())
            .or()
            .eq("yihurenyuan_id_number", yihurenyuan.getYihurenyuanIdNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        YihurenyuanEntity yihurenyuanEntity = yihurenyuanService.selectOne(queryWrapper);
        if(yihurenyuanEntity==null){
            yihurenyuan.setCreateTime(new Date());
            yihurenyuan.setPassword("123456");
            yihurenyuanService.insert(yihurenyuan);
            return R.ok();
        }else {
            return R.error(511,"账户或者医护人员手机号或者医护人员身份证号已经被使用");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody YihurenyuanEntity yihurenyuan, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,yihurenyuan:{}",this.getClass().getName(),yihurenyuan.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        //根据字段查询是否有相同数据
        Wrapper<YihurenyuanEntity> queryWrapper = new EntityWrapper<YihurenyuanEntity>()
            .notIn("id",yihurenyuan.getId())
            .andNew()
            .eq("username", yihurenyuan.getUsername())
            .or()
            .eq("yihurenyuan_phone", yihurenyuan.getYihurenyuanPhone())
            .or()
            .eq("yihurenyuan_id_number", yihurenyuan.getYihurenyuanIdNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        YihurenyuanEntity yihurenyuanEntity = yihurenyuanService.selectOne(queryWrapper);
        if("".equals(yihurenyuan.getYihurenyuanPhoto()) || "null".equals(yihurenyuan.getYihurenyuanPhoto())){
                yihurenyuan.setYihurenyuanPhoto(null);
        }
        if(yihurenyuanEntity==null){
            yihurenyuanService.updateById(yihurenyuan);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"账户或者医护人员手机号或者医护人员身份证号已经被使用");
        }
    }



    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        yihurenyuanService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName, HttpServletRequest request){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            List<YihurenyuanEntity> yihurenyuanList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            YihurenyuanEntity yihurenyuanEntity = new YihurenyuanEntity();
//                            yihurenyuanEntity.setUsername(data.get(0));                    //账户 要改的
//                            //yihurenyuanEntity.setPassword("123456");//密码
//                            yihurenyuanEntity.setYihurenyuanName(data.get(0));                    //医护人员姓名 要改的
//                            yihurenyuanEntity.setYihurenyuanPhone(data.get(0));                    //医护人员手机号 要改的
//                            yihurenyuanEntity.setYihurenyuanIdNumber(data.get(0));                    //医护人员身份证号 要改的
//                            yihurenyuanEntity.setYihurenyuanPhoto("");//详情和图片
//                            yihurenyuanEntity.setSexTypes(Integer.valueOf(data.get(0)));   //性别 要改的
//                            yihurenyuanEntity.setYihurenyuanEmail(data.get(0));                    //电子邮箱 要改的
//                            yihurenyuanEntity.setYihurenyuanZhiweiTypes(Integer.valueOf(data.get(0)));   //医护职位 要改的
//                            yihurenyuanEntity.setCreateTime(date);//时间
                            yihurenyuanList.add(yihurenyuanEntity);


                            //把要查询是否重复的字段放入map中
                                //账户
                                if(seachFields.containsKey("username")){
                                    List<String> username = seachFields.get("username");
                                    username.add(data.get(0));//要改的
                                }else{
                                    List<String> username = new ArrayList<>();
                                    username.add(data.get(0));//要改的
                                    seachFields.put("username",username);
                                }
                                //医护人员手机号
                                if(seachFields.containsKey("yihurenyuanPhone")){
                                    List<String> yihurenyuanPhone = seachFields.get("yihurenyuanPhone");
                                    yihurenyuanPhone.add(data.get(0));//要改的
                                }else{
                                    List<String> yihurenyuanPhone = new ArrayList<>();
                                    yihurenyuanPhone.add(data.get(0));//要改的
                                    seachFields.put("yihurenyuanPhone",yihurenyuanPhone);
                                }
                                //医护人员身份证号
                                if(seachFields.containsKey("yihurenyuanIdNumber")){
                                    List<String> yihurenyuanIdNumber = seachFields.get("yihurenyuanIdNumber");
                                    yihurenyuanIdNumber.add(data.get(0));//要改的
                                }else{
                                    List<String> yihurenyuanIdNumber = new ArrayList<>();
                                    yihurenyuanIdNumber.add(data.get(0));//要改的
                                    seachFields.put("yihurenyuanIdNumber",yihurenyuanIdNumber);
                                }
                        }

                        //查询是否重复
                         //账户
                        List<YihurenyuanEntity> yihurenyuanEntities_username = yihurenyuanService.selectList(new EntityWrapper<YihurenyuanEntity>().in("username", seachFields.get("username")));
                        if(yihurenyuanEntities_username.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(YihurenyuanEntity s:yihurenyuanEntities_username){
                                repeatFields.add(s.getUsername());
                            }
                            return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                         //医护人员手机号
                        List<YihurenyuanEntity> yihurenyuanEntities_yihurenyuanPhone = yihurenyuanService.selectList(new EntityWrapper<YihurenyuanEntity>().in("yihurenyuan_phone", seachFields.get("yihurenyuanPhone")));
                        if(yihurenyuanEntities_yihurenyuanPhone.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(YihurenyuanEntity s:yihurenyuanEntities_yihurenyuanPhone){
                                repeatFields.add(s.getYihurenyuanPhone());
                            }
                            return R.error(511,"数据库的该表中的 [医护人员手机号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                         //医护人员身份证号
                        List<YihurenyuanEntity> yihurenyuanEntities_yihurenyuanIdNumber = yihurenyuanService.selectList(new EntityWrapper<YihurenyuanEntity>().in("yihurenyuan_id_number", seachFields.get("yihurenyuanIdNumber")));
                        if(yihurenyuanEntities_yihurenyuanIdNumber.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(YihurenyuanEntity s:yihurenyuanEntities_yihurenyuanIdNumber){
                                repeatFields.add(s.getYihurenyuanIdNumber());
                            }
                            return R.error(511,"数据库的该表中的 [医护人员身份证号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                        yihurenyuanService.insertBatch(yihurenyuanList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }


    /**
    * 登录
    */
    @IgnoreAuth
    @RequestMapping(value = "/login")
    public R login(String username, String password, String captcha, HttpServletRequest request) {
        YihurenyuanEntity yihurenyuan = yihurenyuanService.selectOne(new EntityWrapper<YihurenyuanEntity>().eq("username", username));
        if(yihurenyuan==null || !yihurenyuan.getPassword().equals(password))
            return R.error("账号或密码不正确");
        //  // 获取监听器中的字典表
        // ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
        // Map<String, Map<Integer, String>> dictionaryMap= (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
        // Map<Integer, String> role_types = dictionaryMap.get("role_types");
        // role_types.get(.getRoleTypes());
        String token = tokenService.generateToken(yihurenyuan.getId(),username, "yihurenyuan", "医护人员");
        R r = R.ok();
        r.put("token", token);
        r.put("role","医护人员");
        r.put("username",yihurenyuan.getYihurenyuanName());
        r.put("tableName","yihurenyuan");
        r.put("userId",yihurenyuan.getId());
        return r;
    }

    /**
    * 注册
    */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody YihurenyuanEntity yihurenyuan){
//    	ValidatorUtils.validateEntity(user);
        Wrapper<YihurenyuanEntity> queryWrapper = new EntityWrapper<YihurenyuanEntity>()
            .eq("username", yihurenyuan.getUsername())
            .or()
            .eq("yihurenyuan_phone", yihurenyuan.getYihurenyuanPhone())
            .or()
            .eq("yihurenyuan_id_number", yihurenyuan.getYihurenyuanIdNumber())
            ;
        YihurenyuanEntity yihurenyuanEntity = yihurenyuanService.selectOne(queryWrapper);
        if(yihurenyuanEntity != null)
            return R.error("账户或者医护人员手机号或者医护人员身份证号已经被使用");
        yihurenyuan.setCreateTime(new Date());
        yihurenyuanService.insert(yihurenyuan);
        return R.ok();
    }

    /**
     * 重置密码
     */
    @GetMapping(value = "/resetPassword")
    public R resetPassword(Integer  id){
        YihurenyuanEntity yihurenyuan = new YihurenyuanEntity();
        yihurenyuan.setPassword("123456");
        yihurenyuan.setId(id);
        yihurenyuanService.updateById(yihurenyuan);
        return R.ok();
    }


    /**
     * 忘记密码
     */
    @IgnoreAuth
    @RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request) {
        YihurenyuanEntity yihurenyuan = yihurenyuanService.selectOne(new EntityWrapper<YihurenyuanEntity>().eq("username", username));
        if(yihurenyuan!=null){
            yihurenyuan.setPassword("123456");
            boolean b = yihurenyuanService.updateById(yihurenyuan);
            if(!b){
               return R.error();
            }
        }else{
           return R.error("账号不存在");
        }
        return R.ok();
    }


    /**
    * 获取用户的session用户信息
    */
    @RequestMapping("/session")
    public R getCurrYihurenyuan(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        YihurenyuanEntity yihurenyuan = yihurenyuanService.selectById(id);
        if(yihurenyuan !=null){
            //entity转view
            YihurenyuanView view = new YihurenyuanView();
            BeanUtils.copyProperties( yihurenyuan , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }
    }


    /**
    * 退出
    */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }





}

HomeProgress.vue
<template>
  <div class="home-progress">
    <div class="title">月访问量</div>
    <div class="tip">同上期增长</div>
    <el-progress
      class="progress"
      :text-inside="true"
      :stroke-width="24"
      :percentage="20"
      status="success"
    ></el-progress>
    <div class="title">月用户量</div>
    <div class="tip">同上期增长</div>
    <el-progress
      class="progress"
      :text-inside="true"
      :stroke-width="24"
      :percentage="50"
      status="success"
    ></el-progress>
    <div class="title">月收入</div>
    <div class="tip">同上期减少</div>
    <el-progress
      class="progress"
      :text-inside="true"
      :stroke-width="24"
      :percentage="28"
      status="exception"
    ></el-progress>
  </div>
</template>
<script>
export default {};
</script>
<style lang="scss">
.home-progress {
  background: #ffffff;
  height: 400px;
  padding: 20px;
  .title {
    color: #666666;
    font-weight: bold;
    font-size: 20px;
    margin-top: 10px;
  }
  .tip {
    color: #888888;
    font-size: 16px;
    margin-top: 10px;
  }
  .progress {
    margin-top: 10px;
  }
}
</style>

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值