如何使用ssm实现双星小区物业管理系统的设计与实现

106 篇文章 0 订阅
52 篇文章 0 订阅

@TOC

ssm297双星小区物业管理系统的设计与实现+jsp

第1章 绪论

1.1选题动因

当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广泛运用,以及各种计算机硬件的完善和升级,市面上的电脑和笔记本的性能都得到提升,可以支持的软件也逐渐增多,因此,在计算机上安装软件来发挥其高效地信息处理的作用,则很受人们的青睐。对于双星小区物业信息来讲,通过手工形式处理,在面对庞大的信息数量时,就显得不适宜了,首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,为了解决上述问题,有必要建立双星小区物业管理系统,来规范双星小区物业信息管理流程,让管理工作可以系统化和程序化,同时,双星小区物业管理系统的有效运用可以帮助管理人员准确快速地处理信息。

1.2目的和意义

双星小区物业管理系统可以对双星小区物业信息进行集中管理,可以真正避免传统管理的缺陷。双星小区物业管理系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,双星小区物业管理系统都可以轻松应对。所以,双星小区物业管理系统的运用是让双星小区物业信息管理升级的最好方式。它可以实现信息处理的便利化要求,还可以规范信息处理的流程,让事务处理成为管理人员手中的一件简单事,而不是之前手工处理时的困难事。尽管双星小区物业管理系统具备较完善的功能,但是也需要管理人员利用闲暇时间提升自身素质以及个人能力,在操作双星小区物业管理系统时可以最大化运用双星小区物业管理系统提供的功能,让系统在满足高效率处理数据的同时,也能始终稳定运行,还可以确保数据的可靠性与数据处理的质量。

1.3论文结构安排

本文总共分为6个章节,每个章节都对本系统描述了不同的内容。接下来就对本文的研究内容进行阐述。

第1章:这个章节是论文的绪论部分。从选题的背景和意义的角度阐述即将开发的系统。

第2章:这个章节是技术介绍部分。从本系统需要运用的技术知识的角度阐述系统。

第3章:这个章节是系统分析部分。从分析系统可行性,分析系统功能和性能等角度阐述系统。

第4章:这个章节是系统设计部分。从系统功能结构的角度和数据库设计的角度阐述系统。

第5章:这个章节是系统实现部分。从系统功能模块运行效果的角度阐述系统。

第6章:这个章节是系统测试部分。从测试系统功能,系统测试方法的角度阐述系统。

第2章 开发环境与技术

开发双星小区物业管理系统需要搭建编程的环境,也需要通过调查,对各个相关技术进行分析,选取适合本系统开发的技术与工具。

2.1 MYSQL数据库

题目确定了是一个应用程序之后,就开始按部就班的进行设计与分析。本课题是需要数据库作为数据管理工具以及数据载体,从程序功能分析到数据分析,选择合适的关系型数据库是当下所选择的重要环节。关系型数据库可选择余地不多,本身甲骨文公司的两个,微软的两个,IBM的一个,也就是这五个了,功能和差异都不影响数据库的选择,因为这些数据库都能实现应用程序功能所需的,那么只能从其他的方面来综合考虑哪种数据库更合适。作为开发使用的电脑硬件上来讲,还是大一的时候买的,当初并没有太多的钱买好一点的电脑,只是作为学习用的,所以经过这么几年的使用,电脑老化了,性能下降也比较厉害,还有好多需要用的学习资料,本身面临毕业,选择学校机房也不是一个长久的打算,选择一个数据库适合自己的老旧笔记本电脑作为学习开发当前的应用,是最重要的。综合考虑的结果就是选用MySQL数据库作为应用数据库,因为MySQL数据库体积小,占用内存小,不影响电脑上其他用的软件运行,并且不需要因为安装维护MySQL数据库而重装系统,最终选择的数据库就是MySQL数据库。

2.2 Tomcat 介绍

刚开始学习Java语言的时候,是不知道还有Tomcat这些东西的,各种语法各种输出在控制台进行输出结果,当Java网站开发的时候就不可避免的学习到了Tomcat服务器。Tomcat准确的来讲不算是服务器,可以说是JSP引擎或者一个容器,这些都是学术上或者原理上都比较贴切的,但是实际工作中Tomcat就是作为一个web服务器来用的,因为可以实现网站的发布和运行。因为工作原理的原因,Tomcat一般作为中小型企业和并发量并不突出的一种轻量级的服务器存在的,比如某些行业的应用系统,本身客户端就不多,需要的连接也不多,一般都用Tomcat的。Tomcat里面可以配置多个网站,配置文件后缀是config的文档,类似于XML的结构,比较清晰明了。每当Java发布新的版本的时候,Tomcat也会为了匹配Java的版本进行升级,目前Tomcat版本已经到版本10了。Tomcat标识是一只有点发黄的小猫咪,当Tomcat配置成功一般测试的时候能看到这个小猫咪就算是成功的,才能进行下一步的配置。Tomcat服务器在Java网站开发中还是挺合适的。

2.3 JSP技术

JSP技术可以让初学者尽快上手进行编写动态网站,不需要变成高级的Java编程人员才可以书写代码,从学习的效率还有编写的效率上都有很大的提升。让着重于网页开发者与着重于后台逻辑开发进行分离合作开发变成了一种可能,降低了学习成本,不需要考虑程序运行解释编译阶段的话,JSP网页本身就可以理解成一个普通的Servlet。JSP结构上面,主要分为两个方面,一个是专属的JSP引擎,通俗的讲就是可以实现JSP编译后运行解释的一个东西,另一个就是web服务器。JSP运行编译需要JSP引擎和web服务器进行配合以及相互协作,当然他们的分工也是很明确的,这样才可以真正的运行起来。JSP容器和引擎有Tomcat,这个Tomcat其实也还有Apache静态解释代码的部分,虽然看起来运行效果差不多,但是其实是两个截然不同的工具,在文件系统里目录也是不一样的,当然如果有特殊需求也是可以进行特殊的配置的,配置上面还是比较灵活的。虽然Tomcat部署了网站之后就可以运行网页让客户访问,但是Tomcat也只是JSP引擎而非web服务器。比如JRUN和Resin都算是JSP引擎,而web服务器的职责比较单一,就是处理客户端请求还有返回给客户显示请求处理后的数据而已。JSP引擎则可以运行纯HTML编写的网站,也可以运行JSP编写的动态网站,在效率上也只是比单纯的web服务器而已,但是从纯web服务器无法运行动态网站上来讲,JSP引擎在功能上还是强大了很多,提升一点点效率反而算不了什么,对于必须实现的功能这些要素上,选择了JSP技术。

第3章 系统分析

用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料,分析人员可以根据这些信息确定出本系统具备的功能,分析出本系统具备的性能等内容。

3.1可行性分析

尽管系统是根据用户的要求进行制作,但是在确定制作前,有必要分析其可行性。

3.1.1操作可行性分析

开发本系统需要用到的工具,本人都比较熟悉,因此可以使用这些工具,完整开发双星小区物业管理系统。此外,双星小区物业管理系统在功能上,基本都是完成信息的处理,涵盖了添加,修改,删除等,而且操作者面对的都是各个功能操作界面,并不是编码后台,所以一般的使用者都可以通过操作界面轻松完成信息的加工处理。因此,本系统操作可行。

3.1.2经济可行性分析

开发本系统,并没有投入资金购买开发工具。因为使用的开发工具都是事先在百度上下载安装在本人电脑上的,随着软件开发技术的成熟,系统功能实现的编码也都模块化,很容易通过各大软件开发类网站获取,并通过小部分代码改动,运用到本系统中,这些都不需要资金投入,同时,本系统开发的结构选用B/S,成本可以忽略不计。

3.1.3技术可行性分析

本系统需要的软件包括Eclipse,Tomcat,Mysql等,这些工具都接触并使用过,至于JAVA,B/S,Jsp,Html等技术,图书馆都有对应的书籍可以参考学习,加上平时课堂上学习的编程小项目对这些技术都有讲解,另外,本人也从课程设计作业中锻炼了编程能力。所以在技术上,可以完成双星小区物业管理系统的编程开发。

通过上面的分析,已经确定了本系统在经济上的可行,本系统在技术上的可行,本系统在操作上的可行。由此,可以得出在目前的条件下,对于双星小区物业管理系统的设计与实现是可以进行下去的。

3.2系统流程分析

本系统在处理数据时,其内部的操作逻辑也需要使用相应的工具进行展示。

在本系统的数据录入页面,对于操作者提供的每条数据都有相应的检验规则,比如数据信息不能有非法字符,或者本来应该是汉字的数据,不能用字母代替,还有对数据内容的长度等进行规范,这样的可以确保数据准确性的检验规则,在编码时,就提前编写好了。数据添加的流程见下图。如果数据已经保存进入数据库,则说明操作者提供的数据内容和格式都是符合要求的。

图3.1 添加信息流程图

很多时候,面对系统中的大量数据,难免会发现一些错误,因此需要及时纠正错误,本系统也提供数据后期的修改功能,其流程见下图。但是更新的数据也需要通过数据有效性检验。能够最终写入数据库则说明修改的数据是符合要求的。

图3.2 修改信息流程图

面对数据库里面大量数据,在系统的前台,要想快速获取需要的信息,就需要使用查询功能。其流程见下图。该功能需要操作者提前输入关键词,当系统的后台数据库保存了与关键词匹配的数据时,就会及时显示出来,整个过程耗时很短。

图3.3 查询信息流程图

3.3系统性能分析

分析双星小区物业管理系统对于性能的需求主要还是从下面的5个角度来分析,它们分别是系统的实用性,系统的适应性,系统的易操作性,系统的安全性和系统的易维护性。

性能需求一:系统的实用性,本系统主要是让管理人员集中处理相关信息,可以提供方便快捷的信息添加,信息编辑等操作。在提高信息管理人员的工作效率的同时,也可以降低管理成本,并大大减少管理人员日常繁琐的工作量。

性能需求二:系统的适应性,本系统对于运行环境的要求并不高,可以被广泛运用在生活中。因为使用者只要在日常使用的计算机,或者是随身携带的笔记本上搭建运行环境都能运行本系统,另外系统提供的基础功能包括添加,修改等都能随时操作。

性能需求三:系统的易操作性,本系统提供的功能跟同类型系统一样,也具备简单的增删改操作,操作流程的逻辑也符合广大使用者的使用需求,使用者使用本系统管理数据会非常顺手。

性能需求四:系统的安全性,本系统在数据保存与管理上安全系数要达标,在设计与编码阶段,通过对用户进行权限分配,把系统的功能依照不同用户的角色进行分配,在首次进入系统时,通过编写安全验证的代码模块,引导不同用户进入不同的操作界面。还可以对用户基础信息包括登录的账号密码等进行加密保存,可以利用当下常用的技术成熟的MD5加密技术实现。

性能需求五:系统的易维护性,本系统在后期运行中,会根据使用者的操作,产生许多数据信息,为了便于维护,就要求这些数据可以通过工具从数据库中导出来,对于一些阶段性数据,可以进行批量删除,以此达到轻负荷处理数据的目标,让本系统可以变得更加轻盈。

3.4系统功能分析

完成这部分内容,需要设计人员提前做好准备工作,包括对系统的实际使用人员进行调研,获取他们对本系统的功能需求,也需要通过参考和分析大量文献,获取同类系统的功能,由此分析得出本系统的功能。

管理员是本系统的一个角色,其用例见下图。管理员管理房间,设施,收费,投诉,报修以及公告信息。

图3.4 管理员用例图

员工是本系统的一个角色,其用例见下图。员工负责处理项目维修以及用户投诉,管理收费和设施,查看公告和留言。

图3.5 员工用例图

用户是本系统的一个角色,其用例见下图。用户发布投诉以及报修信息,查询设施,房间以及收费信息。

图3.6 用户用例图

第4章 系统设计

市面上设计比较好的系统都有一个共同特征,就是主题鲜明突出。通过对页面简洁清晰的布局,让页面的内容,包括文字语言,或者视频图片等元素可以清晰表达出系统的主题。让来访用户无需花费过多精力和时间找寻需要的内容。

4.1界面设计原则

一般来说,大部分用户使用系统,有些是想从系统中获取需要的信息,有些则是使用系统提供的服务。所以,为了改善用户体验,提高系统的使用率,在对系统界面设计时,需要按照下面的原则进行。

第一点,对用户进行分析,了解用户使用系统的目的,以及使用系统的方式,考虑大部分用户的阅读习惯,设计Z字形或F型结构可以方便用户获取信息。

第二点:设计有效的导航,这个包括每个页面上都有导航条的显示,有时也可以在页面的底部设计导航条,当用户进入具体页面时,要设计相应的位置提示,在页面中比较特殊的位置,需要设计返回链接,可以返回上个页面,也可以返回首页等。

第三点:对整个系统要运用统一的设计方案,包括色彩方案的一致性,页面模板的相似性等,对相同操作和专业术语的描述在整个系统中也应该保持一致。

第四点:设计的界面要保证传达的内容清晰准确。要避免在同一个页面设计非常多的内容,另外可以准确对系统内容进行分类,把页面中用户视觉集中的位置,用来显示重要信息。

作为初学者,并没有那么多的设计经验,但是可以运用上面提到的界面设计原则设计出比较好的系统,可以让用户产生良好的使用体验。

4.2功能结构设计

为了让系统的编码可以顺利进行,特意对本系统功能进行细分设计,管理员的功能在经过细分后,设计的功能结构见下图。管理员管理房间,设施,收费,投诉,报修以及公告信息。

图4.1 管理员功能结构图

员工的功能在经过细分后,设计的功能结构见下图。员工负责处理项目维修以及用户投诉,管理收费和设施,查看公告和留言。

图4.2 员工功能结构图

用户的功能在经过细分后,设计的功能结构见下图。用户发布投诉以及报修信息,查询设施,房间以及收费信息。

图4.3 用户功能结构图

4.3数据库设计

一般来说,对用户进行调查,了解其需求,主要还是完成功能上的分析设计,殊不知,设计功能时,也要展示对数据库的设计。数据库服务于程序,它可以按照设定的规则对程序的数据进行保存,因此,也可以说数据库就是程序相关数据的集合。为了保证程序的高质量,数据库提供的数据存储服务也需要快速响应,同时数据信息也要安全合法可靠,所以设计一个数据库这样的任务也需要高度重视,并花时间和精力去努力完成。毕竟这影响到后期程序的开发和使用。试想而知,假设设计一个不好的数据库,遇到的问题将会有:第一,面对信息处理,会有着繁琐的业务逻辑,延长事务处理时间。第二:程序编码期间,将会产生更多的代码去完成数据处理的功能,产生大量的数据冗余,而且也不方便注释代码,还会占用更多的存储空间。综上所述,设计出合理的数据库是多么的重要。

4.3.1数据库概念设计

完成此部分内容,需要通过设计展示最终的数据库概念模型,因为这是数据库设计中的关键。而这个概念模型也是在数据库设计中必不可少的E-R模型。之所以要运用E-R模型展示概念设计的内容,主要还是因为E-R模型可以更加方便的展示实体,还有实体间的关系,而且E-R模型可以更方便表达数据的意义。这将有助于数据库的设计工作。

E-R模型的建立也需要使用对应的软件,目前市场上使用频率高的是微软旗下的成员之一Visio,当然,国产的亿图软件也可以绘制E-R模型。无论是采用哪个绘制软件,要绘制好E-R图,还是要掌握E-R图的各个符号代表的意义。比如矩形常用来表示实体,对于实体的特征就使用椭圆形符号表示,像菱形这样的符号就是处于两个矩形之间,代表着实体间的联系,而直线符号就是把矩形,椭圆,菱形这些符号进行连接。接下来就对本系统的E-R图进行展示。

(1)设计的用户实体,其具备的属性见下图。

图4.4 用户实体属性图

(2)设计的投诉实体,其具备的属性见下图。

图4.5 投诉实体属性图

(3)设计的员工实体,其具备的属性见下图。

图4.6 员工实体属性图

  1. 设计的报修实体,其具备的属性见下图。

图4.7 报修实体属性图

  1. 设计的上述实体间关系见下图。

图4.8 实体间关系E-R图

4.3.2 数据库物理设计

作为程序后台的支持,本数据库也需要设计数据存储的结构。而数据存储结构的设计就包括了数据表结构的设计和创建。这里也会运用到前面设计的E-R模型来构建数据表结构。

数据表结构包括了字段,数据类型,还有字段的取值范围等信息。而E-R模型中的实体就是一张表,实体的特征就可以作为该表中的字段,根据本程序信息存储要求,设计每个字段需要的类型,还有该字段的取值范围等。每当设计完成一张数据表,就需要及时保存在数据库里面,并对该设计的数据表准确命名,要求设置的数据表的名称尽量不要是中文,而且要方便记忆。因为在程序编码阶段,通过SQL语句可以把程序里面的数据写入在各个数据表里面,而这个环节需要使用到数据表的名称。如果数据表名称是中文的话,可能会乱码并影响程序运行。下面就以表格形式展示设计的结果。

表4.1报修信息表

字段类型默认注释
id (主键)int(11)主键
yonghu_idint(11)NULL报修人
baoxiu_namevarchar(200)NULL报修项目
insert_timetimestampNULL报修时间
baoxiu_contenttextNULL报修详情
baoxiu_typesint(11)NULL是否维修
create_timetimestampNULL创建时间

表4.2 房间信息表

字段类型默认注释
id (主键)int(11)主键
yonghu_idint(11)NULL用户
buildingvarchar(200)NULL楼栋
unitvarchar(200)NULL单元
roomvarchar(200)NULL房间号
fangjian_contenttextNULL房间备注
insert_timetimestampNULL创建时间
create_timetimestampNULL创建时间

表4.3 公告信息表

字段类型默认注释
id (主键)int(11)主键
gonggao_namevarchar(200)NULL公告名称
gonggao_typesint(11)NULL公告类型
insert_timetimestampNULL公告时间
gonggao_contenttextNULL公告详情
create_timetimestampNULL创建时间

表4.4 留言板信息表

字段类型默认注释
id (主键)int(11)主键
liuyanban_namevarchar(200)NULL留言名称
liuiyan_typesint(11)NULL留言类型
insert_timetimestampNULL留言时间
liuyanban_contenttextNULL留言
create_timetimestampNULL创建时间

表4.5 设施信息表

字段类型默认注释
id (主键)int(11)主键
sheshi_namevarchar(200)NULL设施名字
sheshi_numbervarchar(200)NULL设施编号
sheshi_typesint(11)NULL设施类型
sheshi_timetimestampNULL购买时间
sheshi_monrydecimal(10,2)NULL购买价格
sheshi_contenttextNULL设施备注
insert_timetimestampNULL创建时间
create_timetimestampNULL创建时间

表4.6 收费信息表

字段类型默认注释
id (主键)int(11)主键
yonghu_idint(11)NULL用户
shoufei_namevarchar(200)NULL收费名字
shoufei_typesint(11)NULL收费类型
shoufei_yu_monrydecimal(10,2)NULL预收金额
shoufei_shi_monrydecimal(10,2)NULL实收金额
shoufei_contenttextNULL收费备注
insert_timetimestampNULL创建时间
create_timetimestampNULL创建时间

表4.7 投诉信息表

字段类型默认注释
id (主键)int(11)主键
yonghu_idint(11)NULL用户
tousu_namevarchar(200)NULL投诉名称
tousu_typesint(11)NULL投诉类型
tousu_contenttextNULL投诉详情
insert_timetimestampNULL投诉时间
reply_contenttextNULL回复详情
update_timetimestampNULL回复时间
create_timetimestampNULL创建时间

表4.8 管理员信息表

字段类型默认注释
id (主键)bigint(20)主键
usernamevarchar(100)用户名
passwordvarchar(100)密码
rolevarchar(100)管理员角色
addtimetimestampCURRENT_TIMESTAMP新增时间

表4.9 用户信息表

字段类型默认注释
id (主键)int(11)主键
usernamevarchar(200)NULL账户
passwordvarchar(200)NULL密码
yonghu_namevarchar(200)NULL姓名
yonghu_phonevarchar(200)NULL手机号
yonghu_id_numbervarchar(200)NULL身份证号
yonghu_photovarchar(200)NULL用户照片
sex_typesint(11)NULL性别
yonghu_emailvarchar(200)NULL用户邮箱
yonghu_contenttextNULL用户备注
create_timetimestampNULL创建时间

表4.10员工信息表

字段类型默认注释
id (主键)int(11)主键
usernamevarchar(200)NULL账户
passwordvarchar(200)NULL密码
yuangong_namevarchar(200)NULL姓名
yuangong_phonevarchar(200)NULL手机号
yuangong_id_numbervarchar(200)NULL身份证号
yuangong_photovarchar(200)NULL员工照片
sex_typesint(11)NULL性别
yuangong_emailvarchar(200)NULL员工邮箱
yuangong_filevarchar(200)NULL员工合同
yuangong_fenshudecimal(10,2)NULL入职考核分数
yuangong_contenttextNULL员工备注
create_timetimestampNULL创建时间

第5章 系统实现

这个环节需要使用前面的设计方案,包括对系统模块的设计,还有对程序后台的数据支持的数据库的设计等。不过这部分内容还是强调系统编码人员的开发能力,要把前面设计的内容通过编码的形式以一个完整的,可以运行的系统呈现出来。

5.1管理员功能实现

5.1.1员工管理

管理员管理员工,其运行效果见下图。在本页面,管理员能够下载员工合同,修改员工的入职考核分数,员工照片,员工邮箱等信息,可以删除指定的员工。

图5.1 员工管理页面

5.1.2收费管理

管理员管理收费信息。其运行效果见下图。收费信息包括预收金额,实收金额,收费名称,用户身份证号,用户照片等信息,管理员可以修改收费信息,对指定的收费信息进行删除。

图5.2 收费管理页面

5.1.3房间管理

管理员可以管理房间,其运行效果见下图。管理员可以添加房间信息,包括房间号,单元,楼栋等信息,可以批量删除房间信息,可以修改房间信息。

图5.3 房间管理页面

5.2 员工功能实现

5.2.1投诉管理

员工管理投诉信息。其运行效果见下图。员工查询投诉信息,对用户投诉进行回复并处理。

图5.4 投诉管理页面

5.2.2报修管理

员工管理报修信息,其运行效果见下图。员工查询报修信息,对用户报修信息进行查看并维修用户报修项目。

图5.5 报修管理页面

5.2.3设施管理

员工管理设施信息,其运行效果见下图。员工添加设施信息,包括设施类型,设施购买价格,购买时间等信息,可以修改设施信息或批量删除设施信息。

图5.6 设施管理页面

5.3 用户功能实现

5.3.1留言板管理

用户管理留言板。其运行效果见下图。用户添加留言,点击查看按钮可以查看留言详情。

图5.7 留言板管理页面

5.3.2添加报修

用户添加报修,其运行效果见下图。用户在当前页面登记报修信息,包括报修项目以及报修详情信息。

图5.8 添加报修页面

5.3.3添加投诉

用户添加投诉。其运行效果见下图。用户具有添加投诉信息的权限,用户登记投诉信息需要登记投诉详情并核对个人信息即可提交投诉信息。

图5.9 添加投诉页面

FileUtil.java
package com.utils;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
* @author yangliyuan
* @version 创建时间:2020年2月7日 下午8:01:14
* 类说明 : 
*/

public class FileUtil {
	public static byte[] FileToByte(File file) throws IOException {
		// 将数据转为流
		@SuppressWarnings("resource")
		InputStream content = new FileInputStream(file);
		ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
		byte[] buff = new byte[100];
		int rc = 0;
		while ((rc = content.read(buff, 0, 100)) > 0) {
			swapStream.write(buff, 0, rc);
		}
		// 获得二进制数组
		return swapStream.toByteArray();
	}
}

LiuyanbanController.java
package com.controller;


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.StringUtil;
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.LiuyanbanEntity;

import com.service.LiuyanbanService;
import com.entity.view.LiuyanbanView;

import com.utils.PageUtils;
import com.utils.R;

/**
 * 留言板
 * 后端接口
 * @author
 * @email
 * @date 2021-04-27
*/
@RestController
@Controller
@RequestMapping("/liuyanban")
public class LiuyanbanController {
    private static final Logger logger = LoggerFactory.getLogger(LiuyanbanController.class);

    @Autowired
    private LiuyanbanService liuyanbanService;


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



    //级联表service


    /**
    * 后端列表
    */
    @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(StringUtil.isNotEmpty(role) && "用户".equals(role)){
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        }
        params.put("orderBy","id");
        PageUtils page = liuyanbanService.queryPage(params);

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

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

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

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody LiuyanbanEntity liuyanban, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,liuyanban:{}",this.getClass().getName(),liuyanban.toString());
        Wrapper<LiuyanbanEntity> queryWrapper = new EntityWrapper<LiuyanbanEntity>()
            .eq("liuyanban_name", liuyanban.getLiuyanbanName())
            .eq("liuiyan_types", liuyanban.getLiuiyanTypes())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        LiuyanbanEntity liuyanbanEntity = liuyanbanService.selectOne(queryWrapper);
        if(liuyanbanEntity==null){
            liuyanban.setInsertTime(new Date());
            liuyanban.setCreateTime(new Date());
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      liuyanban.set
        //  }
            liuyanbanService.insert(liuyanban);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody LiuyanbanEntity liuyanban, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,liuyanban:{}",this.getClass().getName(),liuyanban.toString());
        //根据字段查询是否有相同数据
        Wrapper<LiuyanbanEntity> queryWrapper = new EntityWrapper<LiuyanbanEntity>()
            .notIn("id",liuyanban.getId())
            .andNew()
            .eq("liuyanban_name", liuyanban.getLiuyanbanName())
            .eq("liuiyan_types", liuyanban.getLiuiyanTypes())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        LiuyanbanEntity liuyanbanEntity = liuyanbanService.selectOne(queryWrapper);
        if(liuyanbanEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      liuyanban.set
            //  }
            liuyanbanService.updateById(liuyanban);//根据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());
        liuyanbanService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }






}


FangjianServiceImpl.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 com.dao.FangjianDao;
import com.entity.FangjianEntity;
import com.service.FangjianService;
import com.entity.view.FangjianView;

/**
 * 房间 服务实现类
 * @author 
 * @since 2021-04-27
 */
@Service("fangjianService")
@Transactional
public class FangjianServiceImpl extends ServiceImpl<FangjianDao, FangjianEntity> implements FangjianService {

    @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<FangjianView> page =new Query<FangjianView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }


}

lineChart.js
   var lineChartData = {
            labels : ["January","February","March","April","May","June","July"],
            datasets : [
                {
                    fillColor : "rgba(49, 195, 166, 0.2)",
                    strokeColor : "rgba(49, 195, 166, 1)",
                    pointColor : "rgba(49, 195, 166, 1)",
                    pointStrokeColor : "#fff",
                    data : [65,59,90,81,56,55,40]
                },
                {
                    fillColor : "rgba(151,187,205,0.5)",
                    strokeColor : "rgba(151,187,205,1)",
                    pointColor : "rgba(151,187,205,1)",
                    pointStrokeColor : "#fff",
                    data : [28,48,40,19,96,27,100]
                }
            ]
            
        }

    var myLine = new Chart(document.getElementById("canvas4").getContext("2d")).Line(lineChartData);

声明

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

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值