iis wordpress多站点,seo优化价格,聊城网站制作,个人网站页面设计作品TOC
springboot194基于springboot的医药管理系统
绪论
1.1 选题背景
当人们发现随着生产规模的不断扩大#xff0c;人为计算方面才是一个巨大的短板#xff0c;所以发明了各种计算设备#xff0c;从结绳记事#xff0c;到算筹#xff0c;以及算盘#xff0c;到如今的…TOC
springboot194基于springboot的医药管理系统
绪论
1.1 选题背景
当人们发现随着生产规模的不断扩大人为计算方面才是一个巨大的短板所以发明了各种计算设备从结绳记事到算筹以及算盘到如今的计算机都是在无法满足生产的前提下出现的。随着计算机的发展又出现了互联网技术。到现在为止互联网已经发展了几十年了在几十年的时间里就已经风靡世界。各行各业都发现了计算机的好处计算机刚开始是军用的后来在民用行业开始使用到互联网时代各种行业信息如井喷一般充斥着互联网信息产生和传播的速度不断的提高。针对互联网的优点结合互联网对传统行业信息处理技术进行升级是非常有必要的。本课题对于医药信息的管理方面开发一个医药管理系统在信息管理方面不至于混乱也能降低数据的出错率数据安全方面也有了保证该系统还有其他的优点比如优化信息处理流程降低信息泄露风险减少资金投入产出更高让管理人员的工作更有效率等。所以说医药管理系统是目前不可缺的对使用者相当的重要。
1.2 选题意义
如今的年代已经是步入信息社会了不仅信息更新速度频繁信息量也大在信息时代必须有相应的处理信息的方法如果还采用以前的结绳记事或者笔写纸记不仅是信息录入效率上赶不上节奏在信息检索的速度上更是让人无法承受。幸而当今社会上计算机技术发展的相当不错可以通过计算机在信息处理上面实现自动化或者半自动化的作业采用计算机技术能有效的提高信息录入以及信息检索的效率社会上相同行业之间本身就是效率高的淘汰效率低的既然采用计算机来替代手工记录必然是效率更高稳定性更强成本更低等诸多优点。针对于医药信息管理开发一个医药管理系统不仅可以实现现代化的信息管理也更符合现代化信息管理规范。
在实际的使用效果中医药管理系统的意义如下
第一点医药管理系统的出现就是为了提高工作人员的效率能够在规定时间完成工作任务。
第二点操作页面符合人体工程美学符合日常人为操作习惯使用友好。
第三点区别于传统用纸张记录提高了信息化水平。
第四点在信息处理方面极大的降低了人工处理成本。
1.3 研究内容
本文对系统的描述过程将按照绪论系统开发技术分析设计实现测试等环节进行展开介绍。
绪论本节内容主要展示研究该系统的背景和意义。
系统开发技术本节内容主要展示该系统开发中需要使用的技术和搭建的开发环境。
系统分析本节内容主要就是分析系统包括性能功能上的数据分析也包括可行性分析等内容。
系统设计本节内容主要就是根据系统分析的结果进行设计主要包括功能和数据库的设计。
系统实现本节内容主要就是通过程序编码对系统的功能进行实现同时也对需要介绍的功能进行界面运行效果的展示。
系统测试本节内容主要就是对系统的功能实现部分进行检测发现系统的错误并及时纠正让系统能够保证运行无误。
2 系统开发技术
对系统的开发需要做好准备工作其中安装开发的工具以及学习开发中需要运用的技术都是需要提前进行的本节内容就对开发中运用的工具还有技术进行阐述。
2.1 MySQL数据库
本设计用到的数据库就是MySQL数据库之所以用到这个数据库的原因很多。首先从满足功能需求上面来讲MySQL是符合的其次从学习程度来讲MySQL相比其他数据库不管是从安装还是使用上面来讲都比较简单最重要的是学习起来相当便捷比较容易入手再次MySQL数据库对电脑要求不高不管是什么样的电脑都可以安装MySQL数据库并且并不会对电脑性能造成过多的影响。所以就平常普普通通的电脑就可以作为开发用的电脑不需要进行额外的电脑升级。虽然自从MySQL数据库被Oracle数据库收购后有了一些闭源的风险但是使用者还是很多MySQL数据库目前的开发人员已经超过五百人了对数据库开发者来讲已经是一个很大的开发团队了。MySQL在使用上面来讲普通的增删改查操作已经可以满足大部分业务需求像一些数据导出导入以及一些函数都可以满足一些不同的需求最重要的是MySQL数据库可以创建索引可以大大的提高数据的查询效率当然物极必反如果因为索引好用而滥用索引弄得比数据库表还要多这样会造成MySQL数据库更新表数据时候的运行效率。总而言之MySQL数据库在本次设计的使用上是完全符合使用要求的。
2.2 IDEA简介
IDEA的诞生在Java集成开发工具行业正所谓平地起雷瞬间震动了整个Java开发行业。真的是每个人用过的都说好。IDEA之所以相比于其他比如MyEclipse或者Eclipse之类的Java开发工具来讲比较好原因首先在于设计方面。IDEA采用了所谓的人体工程学设计原理让使用IDEA的人员用了就忘记不了。软件打开首先要设置主题可以选择常规的白色或者暗色系列长时间的白色或者长时间的暗色会让开发人员的眼睛疲劳加重首先从这个细节就让程序开发人员备受青睐让程序员看着舒服然后再对一些常用性插件进行归类让程序的开发注重于提升生产效率而不是一味的让开发者找各种插件有时候插件之间的版本还会存在不兼容IDEA就把兼容的插件双手呈现如此贴心的IDEA怎么能让人不喜爱。所以选择IDEA用来开发本项目就理所当然的了。
2.3 Spring Boot框架
Spring是一个很好的框架但是发展到现在在使用上面已经诟病不断需要配置的越来越多配置大于开发让程序员用更多的精力去配置Spring有点本末倒置了。Spring Boot框架是为了解决Spring框架的缺点而生Spring框架好用是好用但是配置起来相当的繁琐Spring Boot则让简化了很多配置过程让开发变得更有趣也更有效率并且学过Spring框架的开发人员很容易理解Spring Boot框架没有用过框架的人员学习Spring Boot框架的速度也很快的Spring Boot得到了Java开发者的一致好评。
2.4 Vue框架
Vue框架的开发者是一个中国人区别于其他框架的最核心的概念就是渐进式框架Vue的出现让网页前端的开发变成了一种纯前端职业不需要在考虑后台数据类型以及业务逻辑只需要进行数据绑定即可大大的减少了前端开发工程师的学习难度。Vue是当前世界上最火的一种前段框架学习成本比较低只需要熟悉最基本的网页知识就可以理解相关知识并且有很好的免费教程进行学习有各个国家语言的教程尤其是因为是中国人开发的框架让中国的高级程序开发人员做了汉语教程。Vue框架发展之初就是高于IE8版本的所以说只要是当前的主流浏览器都支持Vue框架如果是很旧的那种电脑是不支持的必须安装支持HTML5的浏览器才可以访问用Vue发布的站点。
3 系统分析
对于医药管理系统开发设计到的流程有分析系统的功能设计系统的结构设计数据库编码以及测试其中在系统分析中所做的工作包括功能的确定性能的分析等。
3.1 可行性研究
医药管理系统开发实现分析需要从不同的角度来进行分析可行性比如从时间角度经济角度甚至操作角度。从不同的角度分析可行性会让医药管理系统开发具体化进而达到辩证开发的正确性。
3.1.1 经济可行性
从经济方面分析是第一要素没有经济的支持任何项目都如水中捞月无法实现。实现医药管理系统开发过程不需要额外的经济条件用本人现有的计算机就可以实现这方面不需要额外的支出。
3.1.2 时间可行性
医药管理系统设计主要作为毕业设计在题目确定之后答辩之前使用的项目对不同的开发进度上面都有时间的要求总不至于答辩完成后才能实现功能这个肯定不行所以从时间上来分析项目的工作量发现是可行的符合正常开发时间。
3.1.3 操作可行性
操作必须符合正常人的思维模式市面上有很多符合要求的程序正在使用中可以借鉴其他程序的操作流程变成符合本设计的操作流程在操作上面进行无缝衔接让使用者操作过程中不会感到迷茫。
从上面的角度来分析后续工作可以继续进展。
3.2 系统性能分析
性能分析是软件开发过程中必不可少的一个环节主要是为了降低软件在使用的过程中的容错率。通常来讲分析软件系统的性能一般从以下几个方面进行分析。
3.2.1 系统的安全性
系统开发出来就是让正常使用的那么在如今的互联网时代首先考虑的就是安全性的问题。如果系统的安全性不够那么使用价值就会降低。如果出现使用过程中丢失数据那么用户就不再信赖所以系统的安全性是第一要位只有安全性存在了才能考虑使用的问题总不至于今天用户注册明天用户账号泄露这些都是不友好的。所以账号一般在数据库里存储会通过MD5进行加密这样关键数据加密可以保证系统的安全性。
3.2.2 系统的易用性
安全性分析处理完毕才考虑易用性。一个软件设计得符合操作规范符合正常人类的理解逻辑那么在使用上面就会很舒服如果违背了这条原则安全性再高的软件也是设计失败的毕竟软件开发出来就是让人使用的这一点尤为重要。
3.2.3 系统的健壮性
系统设计易用不代表没有规则那么系统设计使用方面必须健壮必须符合软件处理逻辑。比如设计一个价格类的输入框用户需要输入价格那么可以设定输入框最多两位小数的纯数字输入如果用户不小心输入了其他字符那么就会友好的提示让用户修改正确只有输入符合规范的数据才能进行提交并且存储到数据库里。系统的健壮性就是这样越是规范越是健壮有助于用户理解还有助于程序使用。
3.3 系统流程分析
系统设计不是胡乱的设计必须符合软件设计思想具体的流程参考下图。系统设计的前期就是做各种分析功能的设计数据库的设计等等一切都设计好了逻辑上没有问题符合设计流程和设计规范才可以继续编码环节编码只是实现设计的一个环节而已。 图3.1系统开发流程图
当需要用户登录的时候肯定是要验证的只有验证通过的用户才可以进行下一步操作用户登录成功代表着用户模块的功能对登录用户进行了开放。流程就是如下面的图所示。 图3.3 登录流程图
3.4 系统功能分析
在对设计的总体要求理解了之后就要把要求给具体化也就是功能化要尽量的把每个功能模块和模块之前的关系理清楚必须符合正常人的行为逻辑才可以并且尽量研究同类型的项目这样能避免走弯路最终才能得到设计的具体功能。
医药管理系统把操作该系统的用户群分为两类即管理员员工。
管理员对于医药管理系统操作的功能包括增删改查药品供应商员工信息管理药品进货和销售信息管理供应商信用等级和药品类型信息等。其用例图如图3.4所示 图3.4 管理员用例图
员工对于医药管理系统操作的功能包括查看供应商信息查询药品新增药品进货新增药品销售查询药品进货和销售信息。其用例图如图3.5所示 图3.5 员工用例图
4 系统设计
系统在设计的过程中必然要遵循一定的原则才可以胡乱设计是不可取的。首先用户在使用过程中能够直观感受到功能操作的便利性符合正常思维逻辑的操作这才是系统好用的一个开端给使用者第一印象就是这个系统设计的相当不错。
4.1 系统设计原则
系统遵循设计原则进行开发会有很多可以预料到的好处只要遵循了设计原则那么开发出来的系统必然是有质量保证的。
首先第一条原则就是安全性原则程序必须设定角色管理不同的角色有不同的功能模块不同的角色登录都需要输入相对应的账号和密码否则不允许进行操作相对应的权限。每个用户登录只能修改自己的密码不需要对别的账号进行密码或者其他资料的修改否则就违背了安全性原则的设定。
其次第二条原则就是易用性原则符合安全性只是功能的符合不代表操作就符合所以要设定易用性原则。易用性原则就是规定程序符合操作流程正常人的思维定向为基础在不违背程序运行逻辑定义的情况下必须使用简单操作规范让每个用户使用起来都能看到页面就能感知功能模块的作用短时间的就能使用程序达到易用效果。
再次第三条原则就是实用性原则实用性代表着花里胡哨的功能必须抛弃尽量符合数据处理的简洁性不仅需要这样进行设定还需要有预知性系统后期可能会出现的功能模块尽量要解耦与程序设定要模块化体现这样才能达到扩展性。
第四条原则就是准确性原则准确性原则的唯一定义就是准确包含数据输入格式的准确数据处理的准确以及数据存储的准确。程序里面关于数据准确才有存在的意义如果一堆不相干的数据存在是没有任何用处的甚至会产生各种问题所以必须要保证数据的准确性。
第五条原则是易维护原则易维护代表着程序运行必须是可控的状态如果不可控出现各种问题那么所有的工作都是空谈。程序开发中对于各种程序判定异常必须有统一的处理模式异常是程序开发中不可避免的但是可以对出现的异常进行抛出有助于程序异常处理的复盘只要每个异常都能定位准确那么代表程序设计是趋于完美的维护起来会更加的方便只要有助于程序维护的都必须给予支持。
4.2 功能模块设计
对管理员具体功能的设计结果将以图4.1所示的管理员功能结构图来进行体现。管理员对于医药管理系统操作的功能包括增删改查药品供应商员工信息管理药品进货和销售信息管理供应商信用等级和药品类型信息等。 图4.1 管理员功能结构图
对员工具体功能的设计结果将以图4.2所示的员工功能结构图来进行体现。员工对于医药管理系统操作的功能包括查看供应商信息查询药品新增药品进货新增药品销售查询药品进货和销售信息。 图4.2 员工功能结构图
4.3 数据库设计
用户通过系统的功能操作来进行数据交互包括数据的添加数据的更新数据的删除数据的查询等基本功能操作表面上虽然是操作系统界面提供的功能但是实际上系统的这些数据是在数据库当中进行访问与操作的。目前市场上可供选择的存储数据的数据库有很多除了简单版的Access之外还有SQL ServerDB2InformixMySQL等关系型数据库可供选择由于关系型数据库具有固定的表结构以及对数据一致性要求比较强所以相比没有固定表结构以及具有灵活的数据格式的非关系型数据库而言在程序配套数据库的选择中关系型数据库的使用率更高。本系统选择MySQL来存放数据其相关理论以及技术在经过了很长时间的发展之后变得非常成熟各大网络平台都公开分享其开发源码而且其对计算机的配置要求很低不需要过多内存进行安装很符合本系统对于数据库的选择要求。
4.3.1 数据库E-R图
本节需要对系统中存放在数据库中的数据进行充分分析对数据的实体实体特征联系等进行确定然后通过概念模型的表示方法即E-R图进行表达在E-R图绘制工具中选择椭圆菱形框矩形等形状表达实体属性实体间联系实体这些信息使用实线段将这些形状进行连接即可。初步完成E-R图之后需要进行检查及时进行有误数据的更改删除实体间存在的冗余联系删除E-R图中冗余的数据最终要展示一个内容准确的E-R图。
1进货包括的属性有药品进货数量进货时间等。其属性图如下。 图4.4 进货实体属性图
2销售包括的属性有药品销售数量销售时间等。其属性图如下。 图4.5 销售实体属性图
3员工包括的属性有账户密码姓名等。其属性图如下。 图4.6 员工实体属性图
4药品包括的属性有药品名称药品进价药品照片等。其属性图如下。 图4.7 药品实体属性图
5设计的各实体间关系E-R图如下。 图4.8 实体间关系E-R图
4.3.2 数据库表结构
在指定的数据库里面对数据表进行创建命名然后设计各个数据表的存储结构需要对该数据库的操作非常熟悉并且还需要学习并掌握一定的数据表设计方面的知识比如数据命名作为系统的开发人员为了避免程序运行产生乱码现象以及为了确保系统的正常运行在对数据表进行命名时一般都是采用英文名称同时在对数据表的字段进行编辑时也是采用英文的方式进行为了方便今后对数据表的设计内容进行更改或查看对一些比较重要的字段都会进行中文备注或者是使用中文进行字段描述。设计期间也需要对各个字段选择合适的数据类型以及设置匹配的取值范围当一张数据表设计完成之后还要对该表的主键进行标注就是为了确保该数据表的唯一性与独立性。
表4.1 供应商信息表
字段注释类型空id (主键)主键int(11)否gongyingshang_name供应商名称varchar(200)是gongyingshang_types供应商类型int(11)是gongyingshang_xinyongdengji_types信用等级int(11)是gongyingshang_content供应商详情text是create_time创建时间timestamp是
表4.2 进货表
字段注释类型空id (主键)主键int(11)否jinhuo_uuid_number进货编号varchar(200)是yaopin_id药品int(11)是yuangong_id员工int(11)是jinhuo_shuliang_number进货数量int(11)是jinhuo_content备注text是jinhuo_time进货时间timestamp是insert_time添加时间timestamp是create_time创建时间timestamp是
表4.3 管理员表
字段注释类型空id (主键)主键bigint(20)否username用户名varchar(100)否password密码varchar(100)否role角色varchar(100)是addtime新增时间timestamp否
表4.4 销售表
字段注释类型空id (主键)主键int(11)否xiaoshou_uuid_number销售编号varchar(200)是yaopin_id药品int(11)是yuangong_id员工int(11)是xiaoshou_shuliang_number销售数量int(11)是xiaoshou_content备注text是xiaoshou_time销售时间timestamp是insert_time添加时间timestamp是create_time创建时间timestamp是
表4.5 药品表
字段注释类型空id (主键)主键int(11)否gongyingshang_id供应商int(11)是yaopin_uuid_number药品编号varchar(200)是yaopin_name药品名称varchar(200)是yaopin_gongxiao药品功效varchar(200)是yaopin_jibing所治疾病varchar(200)是yaopin_photo药品照片varchar(200)是yaopin_types药品类型int(11)是yaopin_kucun_number药品库存int(11)是yaopin_jinjia_money进价decimal(10,2)是yaopin_xiaoshou_money售价decimal(10,2)是yaopin_content药品介绍text是yaopin_delete逻辑删除int(11)是create_time创建时间timestamp是
表4.6 员工表
字段注释类型空id (主键)主键int(11)否username账户varchar(200)是password密码varchar(200)是yuangong_name员工姓名varchar(200)是yuangong_phone员工手机号varchar(200)是yuangong_id_number员工身份证号varchar(200)是yuangong_photo员工头像varchar(200)是sex_types性别int(11)是yuangong_email电子邮箱varchar(200)是create_time创建时间timestamp是
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.1.4 销售管理
销售管理界面的运行效果见图5.4。在此界面管理员查看销售药品的员工信息以及销售的药品信息可以更改药品销售数据可以使用销售编号实现对销售药品的查询。 图5.4 销售管理界面
5.1.5 销售药品统计报表
销售药品统计报表界面的运行效果见图5.5。在此界面管理员查看各种药品的销售数量信息同时管理员可以下载销售药品统计报表可以把销售药品统计报表在柱状图与折线图之间进行切换。 图5.5 销售药品统计报表界面
5.2 员工功能实现
5.2.1 进货管理
进货管理界面的运行效果见图5.6。在此界面员工对药品进货详情进行查看包括进货数量进货时间等信息员工也有权限新增药品进货信息可以对药品的进货信息通过进货编号药品编号等查询条件进行查询。 图5.6 进货管理界面
5.2.2 销售管理
销售管理界面的运行效果见图5.7。在此界面员工对药品销售的详情进行查看包括销售药品名称销售编号销售数量等信息员工也有权限新增药品销售信息可以对药品销售信息通过销售编号药品功效所致疾病等查询条件进行查询。 图5.7 销售管理界面
5.2.3 药品查看
药品查看界面的运行效果见图5.8。在此界面员工查看药品库存查看药品进价药品售价药品功效等信息。员工查询药品可以根据药品功效所治疾病等字段进行查询。 图5.8 药品查看界面
系统
MPUtil.java
package com.utils;import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;import org.apache.commons.lang3.StringUtils;import cn.hutool.core.bean.BeanUtil;import com.baomidou.mybatisplus.mapper.Wrapper;/*** Mybatis-Plus工具类*/
public class MPUtil {public static final char UNDERLINE _;//mybatis plus allEQ 表达式转换public static Map allEQMapPre(Object bean,String pre) {MapString, Object map BeanUtil.beanToMap(bean);return camelToUnderlineMap(map,pre);}//mybatis plus allEQ 表达式转换public static Map allEQMap(Object bean) {MapString, Object map BeanUtil.beanToMap(bean);return camelToUnderlineMap(map,);}public static Wrapper allLikePre(Wrapper wrapper,Object bean,String pre) {MapString, Object map BeanUtil.beanToMap(bean);Map result camelToUnderlineMap(map,pre);return genLike(wrapper,result);}public static Wrapper allLike(Wrapper wrapper,Object bean) {Map result BeanUtil.beanToMap(bean, true, true); return genLike(wrapper,result);}public static Wrapper genLike( Wrapper wrapper,Map param) {IteratorMap.EntryString, Object it param.entrySet().iterator();int i0;while (it.hasNext()) {if(i0) wrapper.and();Map.EntryString, Object entry it.next();String key entry.getKey();String value (String) entry.getValue();wrapper.like(key, value);i;}return wrapper;}public static Wrapper likeOrEq(Wrapper wrapper,Object bean) {Map result BeanUtil.beanToMap(bean, true, true); return genLikeOrEq(wrapper,result);}public static Wrapper genLikeOrEq( Wrapper wrapper,Map param) {IteratorMap.EntryString, Object it param.entrySet().iterator();int i0;while (it.hasNext()) {if(i0) wrapper.and();Map.EntryString, Object entry it.next();String key entry.getKey();if(entry.getValue().toString().contains(%)) {wrapper.like(key, entry.getValue().toString().replace(%, ));} else {wrapper.eq(key, entry.getValue());}i;}return wrapper;}public static Wrapper allEq(Wrapper wrapper,Object bean) {Map result BeanUtil.beanToMap(bean, true, true); return genEq(wrapper,result);}public static Wrapper genEq( Wrapper wrapper,Map param) {IteratorMap.EntryString, Object it param.entrySet().iterator();int i0;while (it.hasNext()) {if(i0) wrapper.and();Map.EntryString, Object entry it.next();String key entry.getKey();wrapper.eq(key, entry.getValue());i;}return wrapper;}public static Wrapper between(Wrapper wrapper,MapString, Object params) {for(String key : params.keySet()) {String columnName ;if(key.endsWith(_start)) {columnName key.substring(0, key.indexOf(_start));if(StringUtils.isNotBlank(params.get(key).toString())) {wrapper.ge(columnName, params.get(key));}}if(key.endsWith(_end)) {columnName key.substring(0, key.indexOf(_end));if(StringUtils.isNotBlank(params.get(key).toString())) {wrapper.le(columnName, params.get(key));}}}return wrapper;}public static Wrapper sort(Wrapper wrapper,MapString, Object params) {String order ;if(params.get(order) ! null StringUtils.isNotBlank(params.get(order).toString())) {order params.get(order).toString();}if(params.get(sort) ! null StringUtils.isNotBlank(params.get(sort).toString())) {if(order.equalsIgnoreCase(desc)) {wrapper.orderDesc(Arrays.asList(params.get(sort)));} else {wrapper.orderAsc(Arrays.asList(params.get(sort)));}}return wrapper;}/*** 驼峰格式字符串转换为下划线格式字符串* * param param* return*/public static String camelToUnderline(String param) {if (param null || .equals(param.trim())) {return ;}int len param.length();StringBuilder sb new StringBuilder(len);for (int i 0; i len; i) {char c param.charAt(i);if (Character.isUpperCase(c)) {sb.append(UNDERLINE);sb.append(Character.toLowerCase(c));} else {sb.append(c);}}return sb.toString();}public static void main(String[] ages) {System.out.println(camelToUnderline(ABCddfANM));}public static Map camelToUnderlineMap(Map param, String pre) {MapString, Object newMap new HashMapString, Object();IteratorMap.EntryString, Object it param.entrySet().iterator();while (it.hasNext()) {Map.EntryString, Object entry it.next();String key entry.getKey();String newKey camelToUnderline(key);if (pre.endsWith(.)) {newMap.put(pre newKey, entry.getValue());} else if (StringUtils.isEmpty(pre)) {newMap.put(newKey, entry.getValue());} else {newMap.put(pre . newKey, entry.getValue());}}return newMap;}
}
TokenServiceImpl.java package com.service.impl;import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;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.TokenDao;
import com.entity.TokenEntity;
import com.entity.TokenEntity;
import com.service.TokenService;
import com.utils.CommonUtil;
import com.utils.PageUtils;
import com.utils.Query;/*** token* author*/
Service(tokenService)
public class TokenServiceImpl extends ServiceImplTokenDao, TokenEntity implements TokenService {Overridepublic PageUtils queryPage(MapString, Object params) {PageTokenEntity page this.selectPage(new QueryTokenEntity(params).getPage(),new EntityWrapperTokenEntity());return new PageUtils(page);}Overridepublic ListTokenEntity selectListView(WrapperTokenEntity wrapper) {return baseMapper.selectListView(wrapper);}Overridepublic PageUtils queryPage(MapString, Object params,WrapperTokenEntity wrapper) {PageTokenEntity page new QueryTokenEntity(params).getPage();page.setRecords(baseMapper.selectListView(page,wrapper));PageUtils pageUtil new PageUtils(page);return pageUtil;}Overridepublic String generateToken(Integer userid,String username, String tableName, String role) {TokenEntity tokenEntity this.selectOne(new EntityWrapperTokenEntity().eq(userid, userid).eq(role, role));String token CommonUtil.getRandomString(32);Calendar cal Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.HOUR_OF_DAY, 1);if(tokenEntity!null) {tokenEntity.setToken(token);tokenEntity.setExpiratedtime(cal.getTime());this.updateById(tokenEntity);} else {this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));}return token;}Overridepublic TokenEntity getTokenEntity(String token) {TokenEntity tokenEntity this.selectOne(new EntityWrapperTokenEntity().eq(token, token));if(tokenEntity null || tokenEntity.getExpiratedtime().getTime()new Date().getTime()) {return null;}return tokenEntity;}
}
YaopinServiceImpl.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.YaopinDao;
import com.entity.YaopinEntity;
import com.service.YaopinService;
import com.entity.view.YaopinView;/*** 药品 服务实现类*/
Service(yaopinService)
Transactional
public class YaopinServiceImpl extends ServiceImplYaopinDao, YaopinEntity implements YaopinService {Overridepublic PageUtils queryPage(MapString,Object params) {if(params ! null (params.get(limit) null || params.get(page) null)){params.put(page,1);params.put(limit,10);}PageYaopinView page new QueryYaopinView(params).getPage();page.setRecords(baseMapper.selectListView(page,params));return new PageUtils(page);}}
storage.js
const storage {set(key, value) {localStorage.setItem(key, JSON.stringify(value));},get(key) {return localStorage.getItem(key)?localStorage.getItem(key).replace(,).replace(,):;},getObj(key) {return localStorage.getItem(key)?JSON.parse(localStorage.getItem(key)):null;},remove(key) {localStorage.removeItem(key);},clear() {localStorage.clear();}
}
export default storage;