如何使用ssm实现社区流浪动物救助领养系统的设计与开发+vue

news2024/9/24 1:19:59

@TOC

ssm666社区流浪动物救助领养系统的设计与开发+vue

第一章 课题背景及研究内容

1.1 课题背景

信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的社区流浪动物救助领养系统实现了字典管理、宠物分享管理、回访管理、流浪动物管理、流浪动物收藏管理、流浪动物留言管理、流浪动物领养申请管理、业主管理、志愿者管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让社区流浪动物救助领养系统更能从理念走到现实,确确实实的让人们提升信息处理效率。

1.2 开发目的和意义

小康时代的到来,使得人们满意度上升,生活各个方面都产生了许多变化,比如办公都有相应软件,很多工作都要求员工会操作计算机,可以说现在的时代基本被软件覆盖得差不多了,软件行业的特征就是大家都在使用软件代替传统手工记载操作,软件的出现让我们的生活还有工作又向前翻了新篇章。社区流浪动物救助领养系统是一个利用软件形式管理车辆租赁信息的平台。管理员管理租车信息也不再需要用纸张进行信息记录及查询管理操作,所有的操作都是利用电脑进行办公,用户需要使用密码还有用户名进行系统登录操作,按照系统主页界面的各个功能展示进行相关操作,无论添加或者是删除,拟或是修改查询等操作,时间上不需要太多,短短几分钟就会搞定。况且软件是不限制办公地点以及办公时间的,只要有操作需要,随时随地登录系统就可以完成任务。办公效率提高这个不再是难题。回访租赁店对于租车信息的管理操作早就应该进行变革了,利用软件管理租车信息,节约人力物力成本,这是一个新的租车信息管理的创举。

1.3 论文研究内容

本次开发的社区流浪动物救助领养系统的论文从下面几个部分进行编写:

第一章:本章介绍了程序开发背景和目的意义,罗列出了论文写作内容信息,让我们知道论文编写是如何进展的。

第二章:本章主要讲解了系统开发用到的相关技术方面的知识,比如SSM技术,MySQL数据库知识等内容。帮助人们更好的理解系统技术上面的相关知识。

第三章:文章第3章主要介绍了系统开发的可行性问题,从经济,时间,操作等内容上面进行了大致介绍,确定系统开发确实可行,然后分析了系统的开发流程,确定系统需要具备的大概的功能,保障系统能够稳定使用和运行。

第四章:这个章节主要绘制出了系统功能架构,让我们更直观了解社区流浪动物救助领养系统的功能,对后台数据库表进行了设计,还画出了对应的E-R图。

第五章:这个章节主要介绍系统各个部分功能具体实现的界面效果。让我们了解到各个部分的功能详细情况。

第六章:这个部分主要就是对社区流浪动物救助领养系统进行整体测试,看看程序是否能够达到用户使用要求,程序能否进行验收上交操作。

第二章 相关技术

本次开发社区流浪动物救助领养系统使用的是B/S结构模式进行程序开发,社区流浪动物救助领养系统的数据信息选择MySQL数据库进行存放。

2.1 B/S结构

B/S结构实际上就是Browser/Server(浏览器/服务器)的缩写,B/S结构是目前软件开发中的主流结构,大多数软件开发者都采用B/S这样的三层体系结构。采用B/S结构开发的社区流浪动物救助领养系统能够大大方便用户使用操作,用户随时随地都可以进行社区流浪动物救助领养系统的访问操作,只需要用户拥有一台会连上网络的计算机就行了,并且使用B/S 模式开发的社区流浪动物救助领养系统是基于浏览器的操作方式,在与用户进行交互以及程序的表现方式上面将会更加吸引人,这样的模式也给程序员开发程序降低了难度,程序开发成本也会相应缩减不少。我们在使用社区流浪动物救助领养系统期间,系统也会随着用户需求进行完善升级,使用B/S 模式开发的社区流浪动物救助领养系统就完全不需要担心,因为它的升级速度快,升级产生的成本费用很低,大多依赖于用户自己在网络上下载最新版本进行安装完成程序更新。下图为B/S结构图。

图2.2 B/S结构图

2.2 MySQL数据库

开发的程序面向用户的只是程序的功能界面,让用户操作程序界面的各个功能,那么很多人就会问,用户使用程序功能生成的数据信息放在哪里的?这个就需要涉及到数据库的知识了,一般来说,程序开发通常就会对常用数据存储工具的特点进行分析比对,比如Mysql数据库的特点与优势,Access数据库的特点与优势,Sqlserver数据库的特点与优势等,最终看哪个数据库与需要开发的程序比较匹配,也符合程序功能运行需要的数据存储要求,比如,需要开发商业级别的程序,存储的数据对数据库要求较高,可以选用Oracle,如果只是比较简单的程序,对数据存储没有过多要求,可以选用微软旗下的Access,当开发程序要求数据库占用空间小,并能满足程序数据存储要求时,就可以考虑Oracle公司从瑞典MySQL AB公司在很早之前就收购过一个关系型数据库,它是现在的Mysql数据库。所以社区流浪动物救助领养系统后台数据库使用的是MySQL进行数据库方面的开发工作的,MySQL它是微软开发的一款平台软件,这个软件可以给用户提供高效率的智能数据,并且数据信息还是很可靠,使用它进行数据存储可以满足大众企业管理各种各样的数据信息的需求。MySQL在MySQL版本里面它是最全面的,也是最强大的开发平台, MySQL在许多关键之处都进行了改进的操作,它也增加了很多新特性,这些改进和更新让公司能够对关键应用程序进行高效运行,并且还可以让公司降低发送信息给用户的成本,以及降低数据信息管理的基础设施。因此MySQL在公司以及企业中它的地位是非常高的,ERP还有OA系统,以及公司财务的系统都离不开MySQL,在软件开发非常流行的今天,MySQL也被用来作为网站开发的网站后台数据库,可以说公司使用MySQL进行数据管理不仅节约成本,还可以让公司数据信息的管理效率大大提高,公司数据存放在MySQL平台上,数据信息的安全性也不用担心,因为MySQL他可以给数据库里面的日志还有数据文件以及整个数据库进行加密操作,另外MySQL还提供在线备份功能,这样可以节约存储空间,加快数据备份的速度。总之,选择MySQL进行在线系统的后台数据库开发是很有优势的。这是个不错的软件选择。

第三章 系统分析

3.1可行性分析

可行性分析从时间,经济以及操作和技术上面进行调查和研究,确保合理利用信息资源,避免在进行程序设计过程中因为考虑不周到所带来的困扰,帮助我们更好的进行程序设计。

3.1.1时间可行性

本次进行系统开发,我预留了两个月时间来完成,从系统的需求分析,功能结构设计,功能详细设计以及系统测试等环节,两个月时间是可以完成程序开发操作的,我打算每天早中晚都进行程序的编写操作,这期间也包括查阅各种资料信息,加上同学以及老师的帮助和指点,相信程序开发的时间也会缩短不少。所以时间上是可行的。

3.1.2 经济可行性

社区流浪动物救助领养系统的开发平台是IDEA,数据库选用MySQL数据库,使用的浏览器都是大众浏览器,这些软件是不需要收费就能进行下载安装操作的。在系统开发的硬件选择上面,我使用的是自己的笔记本进行开发操作。因此在进行系统开发时,经济上面无需额外支出。开发出来的程序可以提高办公效率,带来的经济效益比较高,系统开发的投入产出比很可观。

3.1.3 操作可行性

社区流浪动物救助领养系统的界面设计比较简单,界面布局根据用户日常使用习惯进行设计,网站各个功能在导航栏里面清晰可见,网站的数据操作可视化,用户操作网站不需要培训就能上手,只需要跟着网站功能提示进行操作就行。

3.1.4 技术可行性

作为计算机专业学生,在学校期间就学习到许多关于编程方面的知识,像SSM技术,还有MySQL数据库等知识,我对IDEA开发平台以及MySQL数据库的操作也比较熟练,所以技术上面还是有一定把握。

3.1.5 法律可行性

自己本人开发的软件和用到的资料来源都是图书馆以及百度文库和百度网页等渠道,并不涉及违法。在个人毕业设计上面,无论源代码还是论文编写内容不存在抄袭行为。

从上面的经济,操作以及时间上面进行的分析,得出结论就是这次开发的社区流浪动物救助领养系统在开发上面是能够进行的,系统开发出来能创造更大的经济效益,越早开发升值空间越大。

3.2系统流程分析

社区流浪动物救助领养系统的开发也是有对应的流程,开发之前必须要进行用户功能需求的分析,最后根据功能需求进行网站设计还有数据库相关数据的设计工作,此次开发的社区流浪动物救助领养系统开发流程如图3.1所示。

图3.1 系统开发流程图

系统开发完成之后会给用户提供登录入口,在这个界面用户输入的信息会得到验证,通过验证之后才能进去社区流浪动物救助领养系统的访问主界面,系统登录执行流程如下:

图3.2 系统执行流程图

3.3系统功能需求分析

系统的开发离不开前期的需求分析,这个阶段就是让程序员知道自己该做什么事情,在进行需求分析的时候,着重点就是用户对系统的功能要求,这个阶段要是分析得很到位,系统开发出来投入使用时,用户就会发现系统的功能跟用户需求保持一致,程序稳定性也是达标的,可以说需求分析是决定系统开发成败的关键,它主要就是把现实世界进行抽象化,然后把抽象化的对象用来构建模型。

社区流浪动物救助领养系统的受益群体主要是工作人员,该网站能够方便使用者进行数据信息的查找和管理工作,本次开发的网站我们设计的界面展示主要分为管理员界面以及用户界面,具体界面的功能分布如下。

社区流浪动物救助领养系统管理员可以管理用户的基本信息,可以管理回访信息,可以管理回访信息等。

3.4 系统非功能需求分析

(1)完整性需求

本次开发的社区流浪动物救助领养系统里面记录的数据信息不能保持为空,并且数据信息一定要核对正确才行,系统里面数据之间存在的联系不能出错,不能够张冠李戴,数据表里面同一数据在不同数据表里面的显示内容要一样。

(2)性能需求

用户在操作社区流浪动物救助领养系统的各个部分内容时,弹出的页面响应时间不能太长,最好控制在三秒钟以内,最大限制值就是四秒,这个是给用户一个好的程序体验。并且系统还要能够承载多人同时在线进行社区流浪动物救助领养系统的访问操作。

(3)界面需求

社区流浪动物救助领养系统界面设计上面应该考虑到用户日常操作习惯,比如导航栏的设计不能在右边,这个完全违背了用户使用网站的操作习惯,同时功能导航的字体以及颜色应该比较显眼,方便用户容易找寻,避免用户在进行功能操作上面浪费太多时间。

(4)安全性需求

社区流浪动物救助领养系统的安全性要有保证,给用户一种可靠,可以信赖的感觉,系统在运行过程中,不能总是出错,与用户进行功能界面交互时,要及时给出反馈信息,另外系统要设置登录窗口,让不是系统的用户不可以进行系统功能界面的访问操作。系统用户也要经过用户名密码的填写操作,才可以进入系统主界面,这样就可以保障系统数据信息处于一种安全状态。

第四章 系统设计

4.1 总体功能

社区流浪动物救助领养系统是根据需求定制开发,开发软件选用IDEA平台配合MySQL数据库进行开发环境的搭建操作,网站采用WEB应用程序中最流行的B/S结构进行开发,用户访问系统数据仅仅需要在客户端安装谷歌浏览器或者是当下常用浏览器就可以访问网站内容。

4.2 系统模块设计

社区流浪动物救助领养系统系统在进行系统中功能模块的划分时,采用层次图来进行表示。层次图具有树形结构,它能使用矩形框来描绘数据信息。顶层代表的数据结构很完整,顶层下面的矩形框表示的数据就是子集数据,当然处于最下面的矩形框就是不能再进行细分的数据元素了,使用层次方框图描述系统功能能让用户一目了然,能够明白系统的功能,以及对应功能板块下面的子功能都可以清楚领会。社区流浪动物救助领养系统分为管理员和用户两部分操作角色,下面将对他们的功能进行阐述。

管理员可以管理用户的基本信息,可以管理等功能。管理员功能结构图如下:

社区流浪动物救助领养系统

系个人信息管理

管动物领养管理

管志愿者管理

管流浪动物管理

大业主管理

修个人信息修改

修改密码

新业主新增

是业主修改

删业主删除

删流浪动物删除

流浪动物新增

流浪动物修改

删动物领养删除

新动物领养新增

修动物领养修改

用志愿者新增

用志愿者修改

用志愿者删除

管回访管理

新回访新增

吸回访修改

删回访删除

图4.1 管理员功能结构图

4.3 数据库设计

开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合,存储在一起的这些数据也是按照一定的组织方式进行的。目前,数据库能够服务于多种应用程序,则是源于它存储方式最佳,具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务,但它与程序之间也可以保持较高的独立性。总而言之,数据库经历了很长一段时间的发展,从最初的不为人知,到现在的人尽皆知,其相关技术也越发成熟,同时也拥有着坚实的理论基础。

4.3.1 数据库概念设计

这部分内容需要借助数据库关系图来完成,也需要使用专门绘制数据库关系图的工具,比如Visio工具就可以设计E-R图(数据库关系图)。设计数据库,也需要按照设计的流程进行,首先还是要根据需求完成实体的确定,分析实体具有的特征,还有对实体间的关联关系进行确定。最后才是使用E-R模型的表示方法,绘制本系统的E-R图。不管是使用亿图软件,还是Visio工具,对于E-R模型的表示符号都一样,通常矩形代表实体,实体间存在的关系用菱形符号表示,实体的属性也就是实体的特征用符号椭圆表示。最后使用直线将矩形,菱形和椭圆等符号连接起来。接下来就开始对本系统的E-R图进行绘制。

(1)下图是宠物分享实体和其具备的属性。

宠物分享 图4.1 宠物分享实体属性图

(2)下图是流浪动物实体和其具备的属性。

流浪动物 图4.2 流浪动物实体属性图

(3)下图是流浪动物收藏实体和其具备的属性。

流浪动物收藏 图4.3 流浪动物收藏实体属性图

(4)下图是业主实体和其具备的属性。

业主 图4.4 业主实体属性图

(5)下图是志愿者实体和其具备的属性。

志愿者 图4.5 志愿者实体属性图

(6)下图是回访实体和其具备的属性。

回访 图4.6 回访实体属性图

(7)下图是流浪动物留言实体和其具备的属性。

流浪动物留言 图4.7 流浪动物留言实体属性图

(8)下图是流浪动物领养申请实体和其具备的属性。

流浪动物领养申请 图4.8 流浪动物领养申请实体属性图

4.3.3 数据库表设计

数据库里面的数据表存放的就是各种数据记录,我们在进行系统增删改查操作时,其实也是在对应数据表里面进行的增删改查操作,一个好的数据库能够缩短信息处理时间,所以说数据库的设计工作不容小觑,数据库里面设置哪些表,表里面的字段设计以及字段类型和字段长度等信息都要考虑周到才行,比如时间这个字段,它的数据类型就不能是int型,不然在系统操作中就会弹出输入数据格式不符合要求的报错提示。下面简单介绍社区流浪动物救助领养系统的一些数据表。

表4.1字典表

序号列名数据类型说明允许空
1IdIntid
2dic_codeString字段
3dic_nameString字段名
4code_indexInteger编码
5index_nameString编码名字
6super_idInteger父字段id
7beizhuString备注
8create_timeDate创建时间

表4.2宠物分享表

序号列名数据类型说明允许空
1IdIntid
2fenxiang_uuid_numberString分享编号
3liulangdongwu_order_idInteger宠物领养申请
4yezhu_idInteger业主
5fenxiang_nameString分享标题
6fenxiang_typesInteger分享类型
7fenxiang_contentString分享内容
8insert_timeDate分享时间
9create_timeDate创建时间

表4.3回访表

序号列名数据类型说明允许空
1IdIntid
2huifang_uuid_numberString回访编号
3liulangdongwu_order_idInteger宠物领养申请
4zhiyuanzhe_idInteger志愿者
5huifang_nameString回访标题
6huifang_typesInteger回访类型
7huifang_contentString回访结果
8insert_timeDate回访时间
9create_timeDate创建时间

表4.4流浪动物表

序号列名数据类型说明允许空
1IdIntid
2yezhu_idInteger业主
3liulangdongwu_nameString流浪动物名称
4liulangdongwu_uuid_numberString流浪动物编号
5liulangdongwu_photoString动物照片
6liulangdongwu_typesInteger动物类型
7liulangdongwu_pinzhong_typesInteger动物品种
8liulangdongwu_didianString流浪地点
9liulangdongwu_ageString动物年龄
10liulangdongwu_clicknumInteger宠物热度
11jiuzhu_typesInteger是否救助
12jiankang_typesInteger是否健康
13jueyu_typesInteger是否绝育
14yimiao_typesInteger是否打疫苗
15liulangdongwu_contentString动物详细状况
16lingyang_typesInteger是否领养
17liulangdongwu_deleteInteger逻辑删除
18create_timeDate创建时间

表4.5流浪动物收藏表

序号列名数据类型说明允许空
1IdIntid
2liulangdongwu_idInteger流浪动物
3yezhu_idInteger业主
4liulangdongwu_collection_typesInteger类型
5insert_timeDate收藏时间
6create_timeDate创建时间

表4.6流浪动物留言表

序号列名数据类型说明允许空
1IdIntid
2liulangdongwu_idInteger流浪动物
3yezhu_idInteger业主
4liulangdongwu_liuyan_textString留言内容
5insert_timeDate留言时间
6reply_textString回复内容
7update_timeDate回复时间
8create_timeDate创建时间

表4.7流浪动物领养申请表

序号列名数据类型说明允许空
1IdIntid
2liulangdongwu_order_uuid_numberString申请编号
3liulangdongwu_idInteger流浪动物
4yezhu_idInteger业主
5tiaojian_contentString个人条件
6insert_timeDate申请时间
7liulangdongwu_order_yesno_typesInteger申请状态
8liulangdongwu_order_yesno_textString审核意见
9liulangdongwu_order_shenhe_timeDate审核时间
10create_timeDate创建时间

表4.8业主表

序号列名数据类型说明允许空
1IdIntid
2yezhu_nameString业主姓名
3yezhu_phoneString业主手机号
4yezhu_id_numberString业主身份证号
5yezhu_photoString业主头像
6yezhu_emailString电子邮箱
7create_timeDate创建时间

表4.9志愿者表

序号列名数据类型说明允许空
1IdIntid
2zhiyuanzhe_nameString志愿者姓名
3zhiyuanzhe_phoneString志愿者手机号
4zhiyuanzhe_id_numberString志愿者身份证号
5zhiyuanzhe_photoString志愿者照片
6zhiyuanzhe_emailString电子邮箱
7create_timeDate创建时间

表4.10管理员表

序号列名数据类型说明允许空
1IdIntid
2usernameString用户名
3passwordString密码
4roleString角色
5addtimeDate新增时间

第五章 系统实现

5.1 管理员功能模块的实现

5.1.1 流浪动物列表

如图5.1显示的就是流浪动物列表页面,此页面提供给管理员的功能有:查看流浪动物、新增流浪动物、修改流浪动物、删除流浪动物等。

图5.1 流浪动物列表页面

5.1.2 回访信息管理

管理员可以对回访管理的基本信息进行管理,可以添加回访,修改回访,删除错误回访信息等。回访信息管理界面如图5.2所示。

图5.2 回访信息管理页面

5.1.3 回访类型管理

回访类型管理页面显示所有回访类型,在此页面既可以让管理员添加新的回访信息类型,也能对已有的回访类型信息执行编辑更新,失效的回访类型信息也能让管理员快速删除。下图就是回访类型管理页面。回访类型管理界面如图5.3所示。

图5.3回访类型管理界面

ConfigController.java

package com.controller;


import java.util.Arrays;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("config")
@RestController
public class ConfigController{
	
	@Autowired
	private ConfigService configService;

	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }
    
	/**
     * 列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 详情
     */
    @IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 根据name获取信息
     */
    @RequestMapping("/info")
    public R infoByName(@RequestParam String name){
        ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
        return R.ok().put("data", config);
    }
    
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody ConfigEntity config){
//    	ValidatorUtils.validateEntity(config);
    	configService.insert(config);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ConfigEntity config){
//        ValidatorUtils.validateEntity(config);
        configService.updateById(config);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
    	configService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

LiulangdongwuLiuyanController.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("/liulangdongwuLiuyan")
public class LiulangdongwuLiuyanController {
    private static final Logger logger = LoggerFactory.getLogger(LiulangdongwuLiuyanController.class);

    @Autowired
    private LiulangdongwuLiuyanService liulangdongwuLiuyanService;


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

    //级联表service
    @Autowired
    private LiulangdongwuService liulangdongwuService;
    @Autowired
    private YezhuService yezhuService;

    @Autowired
    private ZhiyuanzheService zhiyuanzheService;


    /**
    * 后端列表
    */
    @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("yezhuId",request.getSession().getAttribute("userId"));
        else if("志愿者".equals(role))
            params.put("zhiyuanzheId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = liulangdongwuLiuyanService.queryPage(params);

        //字典表数据转换
        List<LiulangdongwuLiuyanView> list =(List<LiulangdongwuLiuyanView>)page.getList();
        for(LiulangdongwuLiuyanView 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);
        LiulangdongwuLiuyanEntity liulangdongwuLiuyan = liulangdongwuLiuyanService.selectById(id);
        if(liulangdongwuLiuyan !=null){
            //entity转view
            LiulangdongwuLiuyanView view = new LiulangdongwuLiuyanView();
            BeanUtils.copyProperties( liulangdongwuLiuyan , view );//把实体数据重构到view中

                //级联表
                LiulangdongwuEntity liulangdongwu = liulangdongwuService.selectById(liulangdongwuLiuyan.getLiulangdongwuId());
                if(liulangdongwu != null){
                    BeanUtils.copyProperties( liulangdongwu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yezhuId"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setLiulangdongwuId(liulangdongwu.getId());
                    view.setLiulangdongwuYezhuId(liulangdongwu.getYezhuId());
                }
                //级联表
                YezhuEntity yezhu = yezhuService.selectById(liulangdongwuLiuyan.getYezhuId());
                if(yezhu != null){
                    BeanUtils.copyProperties( yezhu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYezhuId(yezhu.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

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

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");
        else if("业主".equals(role))
            liulangdongwuLiuyan.setYezhuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        liulangdongwuLiuyan.setInsertTime(new Date());
        liulangdongwuLiuyan.setCreateTime(new Date());
        liulangdongwuLiuyanService.insert(liulangdongwuLiuyan);
        return R.ok();
    }

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

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("业主".equals(role))
//            liulangdongwuLiuyan.setYezhuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<LiulangdongwuLiuyanEntity> queryWrapper = new EntityWrapper<LiulangdongwuLiuyanEntity>()
            .eq("id",0)
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        LiulangdongwuLiuyanEntity liulangdongwuLiuyanEntity = liulangdongwuLiuyanService.selectOne(queryWrapper);
        liulangdongwuLiuyan.setUpdateTime(new Date());
        if(liulangdongwuLiuyanEntity==null){
            liulangdongwuLiuyanService.updateById(liulangdongwuLiuyan);//根据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());
        liulangdongwuLiuyanService.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<LiulangdongwuLiuyanEntity> liulangdongwuLiuyanList = 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){
                            //循环
                            LiulangdongwuLiuyanEntity liulangdongwuLiuyanEntity = new LiulangdongwuLiuyanEntity();
//                            liulangdongwuLiuyanEntity.setLiulangdongwuId(Integer.valueOf(data.get(0)));   //流浪动物 要改的
//                            liulangdongwuLiuyanEntity.setYezhuId(Integer.valueOf(data.get(0)));   //业主 要改的
//                            liulangdongwuLiuyanEntity.setLiulangdongwuLiuyanText(data.get(0));                    //留言内容 要改的
//                            liulangdongwuLiuyanEntity.setInsertTime(date);//时间
//                            liulangdongwuLiuyanEntity.setReplyText(data.get(0));                    //回复内容 要改的
//                            liulangdongwuLiuyanEntity.setUpdateTime(sdf.parse(data.get(0)));          //回复时间 要改的
//                            liulangdongwuLiuyanEntity.setCreateTime(date);//时间
                            liulangdongwuLiuyanList.add(liulangdongwuLiuyanEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        liulangdongwuLiuyanService.insertBatch(liulangdongwuLiuyanList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }





    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = liulangdongwuLiuyanService.queryPage(params);

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

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        LiulangdongwuLiuyanEntity liulangdongwuLiuyan = liulangdongwuLiuyanService.selectById(id);
            if(liulangdongwuLiuyan !=null){


                //entity转view
                LiulangdongwuLiuyanView view = new LiulangdongwuLiuyanView();
                BeanUtils.copyProperties( liulangdongwuLiuyan , view );//把实体数据重构到view中

                //级联表
                    LiulangdongwuEntity liulangdongwu = liulangdongwuService.selectById(liulangdongwuLiuyan.getLiulangdongwuId());
                if(liulangdongwu != null){
                    BeanUtils.copyProperties( liulangdongwu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setLiulangdongwuId(liulangdongwu.getId());
                }
                //级联表
                    YezhuEntity yezhu = yezhuService.selectById(liulangdongwuLiuyan.getYezhuId());
                if(yezhu != null){
                    BeanUtils.copyProperties( yezhu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYezhuId(yezhu.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody LiulangdongwuLiuyanEntity liulangdongwuLiuyan, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,liulangdongwuLiuyan:{}",this.getClass().getName(),liulangdongwuLiuyan.toString());
        liulangdongwuLiuyan.setInsertTime(new Date());
        liulangdongwuLiuyan.setCreateTime(new Date());
        liulangdongwuLiuyanService.insert(liulangdongwuLiuyan);
        return R.ok();
        }


}

ConfigServiceImpl.java

package com.service.impl;


import java.util.Map;

import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.ConfigDao;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.Query;


/**
 * 系统用户
 * @author yangliyuan
 * @date 2019年10月10日 上午9:17:59
 */
@Service("configService")
public class ConfigServiceImpl extends ServiceImpl<ConfigDao, ConfigEntity> implements ConfigService {
	@Override
	public PageUtils queryPage(Map<String, Object> params) {
		Page<ConfigEntity> page = this.selectPage(
                new Query<ConfigEntity>(params).getPage(),
                new EntityWrapper<ConfigEntity>()
        );
        return new PageUtils(page);
	}
}

声明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka 消费者线程安全问题详细探讨

内容概要 主要内容 常见错误案例 下面这段代码大概逻辑 初始化时 实例化KafkaConsumer, 开启线程拉取消息并且处理 资源释放回调 停止线程、调用kafkaConsumer.close进行资源释放 表面上没有问题&#xff0c;但实际上可能出现线程安全问题&#xff0c;因为poll 和 close 两…

python按照财年分组案例

有如下数据&#xff1a;需要按照如下要求进行分组。 需求是对Site进行分组 条件当值是Act得时候&#xff0c;分组名字就是 条件当值是Rebase*得时候&#xff0c;分组名字就是FY?1/?1 条件当值是FIRM 得时候&#xff0c;分组名字就是 每年得7月到次年得6月为一个财年&#xff…

C++之初识STL(概念)

STL&#xff08;标准模板库&#xff09; STL广义分类为&#xff1a;容器&#xff0c;算法&#xff0c;迭代器 * **容器**和**算法**之间通过**迭代器**进行无缝连接 意义&#xff1a;C的**面向对象**和**泛型编程**思想&#xff0c;目的就是**复用性的提升** STL六大组件 1. 容…

MODELS 2024:闪现奥地利,现场直击报道

周末出逃&#xff01;小编闪现至奥地利林茨&#xff0c;亲临第27届MODELS 2024国际会议&#xff0c;以第一视角引领你深入会议现场&#xff0c;领略其独特风采。利用午饭时间&#xff0c;小编紧急码字&#xff0c;只为第一时间将热点资讯呈现给你~ 会议介绍&#xff1a; MODEL…

计算机毕业设计之:微信小程序的校园闲置物品交易平台(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

JavaEE: 深入探索TCP网络编程的奇妙世界(六)

文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…

开关频率与谐振频率对应的模态图

当fsfr时 当fr2<fs<fr1时 当fs>fr1时 开关频率对应输入电压的频率 谐振频率对应的是谐振电流的频率

JavaSE - 面向对象编程05

01 正则表达式 【1】概念&#xff1a;正则表达式是由一些特定字符组成的&#xff0c;代表的是一个规则。 【2】可以用来做什么&#xff1f; ① 用于校验数据格式的合法性 ② 用于在文本中爬取满足要求的内容 ③ 用于String类的replace方法&#xff0c;split方法的替换和分割 …

动态时间【JavaScript】

这个代码实现了一个动态显示当前日期和时间的功能。具体来说&#xff0c;它会每秒更新一次时间并在页面上显示出来。 实现效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><…

GUI编程之MATLAB入门详解(01)

⛄前言 图形用户界面的设计是MATLAB的核心应用之一。当用户与计算机之间或用户与计算机程序之间进行交互操作时&#xff0c;舒服高效的用户接口功能则会对用户产生极大的吸引力。图形用户界面&#xff08;GUI&#xff09;则通过窗口、图标、按钮、菜单、文本等图形对象构成用户…

美业SaaS收银系统如何收银?博弈美业实操/美业门店管理系统源码

1.打开博弈美业APP 2.工作台上方的【收银台】、【扫码核销】、【密码核销】均可完成收银 3.【收银台】可直接选择商品/服务/课程&#xff0c;再选择客户后提交订单收款 4.【扫码核销】【密码核销】可直接扫描二维码、输入核销码进行收银

大模型日报|7 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.中科大团队提出人像视频编辑方法 PortraitGen 中国科学技术大学团队提出了 PortraitGen&#xff0c;这是一种功能强大的人像视频编辑方法&#xff0c;它能通过多模态提示实现一致且富有表现力的风格化。 传统的人…

SLAM面经1(百度)

百度面经 百度共三面,如果面试效果俱佳,会增加一个hr面。前二面主要是技术面,分为在线coding+代码知识+专业知识+工程能力。第三面是主管面,偏向于管理方面,和hr面相似。 一面 1)在线coding 在线coding的考试内容为下面力扣的变种。 2)专业面 (1)VINS-FUSION与ORB…

鲲鹏计算这五年:硬生态基本盘稳住,才能放手进击软生态

文 | 智能相对论 作者 | 叶远风 数智化深入发展、新质生产力成为主旋律的当下&#xff0c;本土计算产业的发展被寄予越来越多的关注和期待。自2019年开启以来&#xff0c;鲲鹏计算产业生态已经整整走过5个年头。 因此&#xff0c;今年华为全联接大会的鲲鹏之夜&#xff0c;在…

【网络安全】依赖混淆漏洞实现RCE

未经许可&#xff0c;不得转载。 文章目录 正文 依赖混淆是一种供应链攻击漏洞&#xff0c;发生在企业的内部依赖包错误地从公共库&#xff08;如npm&#xff09;下载&#xff0c;而不是从其私有注册表下载。攻击者可以在公共注册表中上传一个与公司内部包同名的恶意包&#xf…

java基础(2)方法的使用

目录 1.前言 2.正文 2.1方法的定义 2.2方法的调用过程 2.3方法的实参与形参 2.3.1形参 2.3.2实参 2.3.3参数传递 2.4方法的重载 3.小结 1.前言 哈喽大家好啊&#xff0c;今天博主继续带领大家学习java的基本语法&#xff0c;java的基础语法部分打算用六到七篇博文完…

关于uniapp wifi调用走过的坑

1. uniapp老脚手架与uni-wif带来的兼容性问题 且几乎找不到解决方法 2. uni-wif需要插件市场安装 3.还有一种可以使用导入安卓类的方式&#xff0c;可以正常获取到已经连接ssid&#xff08;wifi名称&#xff09;&#xff0c;也可以获取到wifi列表 &#xff0c; 但ScanResul…

p18 docker镜像原理之联合文件系统,p19 docker镜像分层的理解

镜像是什么 镜像其实就是一种轻量级的&#xff0c;可执行的一种软件包&#xff0c;用来打包基于环境开发的软件&#xff0c;里面可以包括代码&#xff0c;环境&#xff0c;数据库&#xff0c;配置文件等信息 如何得到镜像&#xff1f; 可以从镜像仓库下载比方说dockerhub 比…

道路车辆功能安全 ISO 26262标准(2)—功能安全管理

写在前面 本系列文章主要讲解道路车辆功能安全ISO26262标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解功能安全标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 1. 道路车辆功能安全ISO 26262标准 2. ISO 26262-2 功能安全管理 IS…

基于SpringBoot+Vue的旅游攻略平台管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…