@TOC
ssm031社区管理与服务的设计与实现+jsp
第一章 绪论
1.1研究背景
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
对于社区管理和服务方面,虽然现在已经有利用信息技术运作社区管理和服务的例子,但大都处于起步阶段,有的仅仅是一些静态的网页设计或单纯的搬一些必需的表格上电脑,缺乏互动性,这些并没有很好的利用信息技术实现真正的社区管理和服务的自动化。因此为了解决这一问题,更好的为社区居民服务,选择开发本社区管理与服务系统。
在互联网的迅速发展下,局域网的普及,为建立社区管理与服务系统的设计与实现提供了基础条件。社区管理与服务系统与传统的社区管理与服务方式相比,有着无法比拟的优点,网络共享、传播速度快的特点,社区居民可以随时随地进入系统查询所需信息,同时管理员可通过计算机可对系统相关信息进行全面管理,更好的为广大社区居民服务。
1.2 研究现状
随着计算机的普及,信息技术也得到了空前的发展,计算机应用的领域也越来越广泛。提高处理事情的效率也已经成为了各行各业所追求的目标。
在国外,由于计算机发展的比较早,信息技术发展相比于国内更加快速,况且国外对于计算机系统应用的也是广泛。在国外社区管理与服务系统很早就已经开始进行实施了,而且效果相当不错。由于国外应用社区管理与服务系统的时间很长,所以使得他们在实际的工作中发现了计算机系统的不足之处,并将这些不足之处进行弥补。也是通过这些不足之出,国外的研究人员也逐渐制定了完善的规则和标准。并将其应用到社区管理与服务系统中。使得软件系统技术得到了长足的发展。
在国内,计算机普及的时间比较短,信息技术发展的还不是很完善,对于计算机信息应用的也不是很多,对计算机系统了解还不是透彻,导致计算机系统在实际应用中的实际效果与预期效果大相径庭,国内缺少的是解决计算机系统出现的问题的经验,因为对计算机系统的应用太少,国内缺少的是解决计算机系统所产生的问题的经验,想要社区管理与服务系统方面的研究水平得到提高,就要多遇到问题,然后解决问题,这样积累经验的速度才是最快的。
1.3 研究内容
根据社区管理与服务系统编写的论文主要阐述了社区管理与服务系统的开发过程中使用的技术,首先进行系统需求分析,进而进行系统设计,最后才是系统功能实现以及测试几个部分,在开始编写论文之前亲自到图书馆借阅Java书籍,MYSQL数据库书籍等编程书籍,然后针对开发的社区管理与服务系统,去网上查找了很多别人做好的系统,根据他们的功能设计进行自己的系统的系统功能结构设计,出具需求报告,最后才是进行程序编码,系统完成后才能进行测试和最后的验收工作,程序开发流程大致如此。
这次编写的论文包含了6个部分的内容,具体内容如下:
第一部分绪论:文章主要从课题背景以及研究现状综合阐述了开发此系统的必要性。
第二部分相关技术:系统开发用到的各种技术都大致做出了简介
第三部分系统分析:从可行性分析和功能需求分析等角度综合研究了此次开发的系统
第四部分系统设计:功能模块设计和数据库设计这两部分内容都有专门的表格和图片表示
第五部分系统实现:进行系统主要功能模块的界面展示
第六部分系统测试:检验程序是否达到预期目标
第二章 系统关键技术
2.1 Java简介
Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任何地方都可以运行[1]。除此之外,它还拥有简单的语法和实用的类库,让编程人员可以尽可能将精力集中在问题的求解上,并且许多开源项目和科研成果都是采用它实现的。
在1995年这一年的5月份,著名的Sun Microsystems公司在程序开发设计上面郑重推出一种面向对象开发的程序设计语言——Java,最开始的时候Java是由詹姆斯.高斯林这位伟大的JAVA之父来进行主导,但是在后来由于各种原因,让甲骨文公司这个针对商业程序创建了oracle大型数据库的公司收购了Java[3]。Java的平台总共算下来有3个,分别为javaME和javaSE以及javaEE这3个java平台。下面将对其进行分别介绍。
(1)在电脑桌面程序的开发上面需要选择JavaME,这个用得也比较多。
(2)企业也会根据工作以及业务需要开发各种软件,那么就会选用JavcEE这个支持企业版软件的开发的Java平台,JavcEE主攻运用在企业领域上面的web应用,JavcEE也在javaSE的基础上获得了比如jsp技术 ,Servlet技术等程序开发技术的支持。
(3)现在生活中手机的普及化,也使得手机端这样的移动设备的软件的兴起,JavaME这个迷你版java平台就能运用于移动端的软件开发操作。
2.2 MySql数据库
MySQL 是关系型数据库管理系统的代表, 因为MySQL是其免费开源的,而且MySQL的功能已经足够用对于学习和中小型企业来讲,所以开发中小型网站都会选择MySQL作为网站的数据库。[13]
MySQL具有开放性,它是一种关系型数据库管理系统,并且它的源代码可以被大众所熟知[3]。由于MySQL是开放源代码的,因此,只要经过授权就可以在自己需求的基础上对其进行修改。MySQL因为其固有的特点而备受关注,它具有很强的适应性,并且十分可靠,查询速度快。MySQL安装起来非常方便,且数据存储量大,不需要事务化处理。Sql语言拥有很多的方法,在项目中编写sql语句时使用起来是非常方便的,不会像其他语言那样需要编写更多的语句。正因为MySQL使用sql语言进行数据库管理,所以它收到了大多数程序员的热爱。
2.3 B/S结构
目前软件项目的开发存在两种架构模式,就是B/S模式和C/S模式,C/S模式就是较早流行的客户端和服务端模式,要使用新版应用需要暂停使用更新升级,就好比现在手机上的各种APP应用。而这次课题项目使用的是基于B/S,就是浏览器/服务端而开发的web项目。应用的更新都在服务端上进行,而且项目维护方便,不需要安装,只需要有浏览器和网络就可以了,越来越多的web项目被开发出来,也得到用户的认可。
系统的设计模式是C/S结构的一种变化或者改进的结构,即使B/S结构,又可以称为Browser/Server(浏览器/服务器)结构,是跟着随着Internet技术的兴起的。这种结构是能够在WWW浏览器完全实现用户的界面,事务逻辑有部分是在前端实现的。但是,主要的还是在服务器端实现的,形成3-tier结构。B/S结构大体是使用逐渐成熟的WWW浏览器技术和各种Script语言以及ActiveX技术,通过浏览器就可实现原来需要复杂专用软件才能实现出需要的功能,还非常的节约成本,这是一种升级的系统构造技术。
图2-1 B/S模式三层结构图
2.4 Tomcat服务器
Tomcat在JSP 程序调试中应用广泛,它本身就是一款轻量级的源代码开放的能够支持jsp和servlets的目前比较主流的Web 服务器。普遍适用于中小型开发系统以及同时访问系统的用户数量比较少的场景。Tomcat默认模式实际上是Servlet容器,另外Tomcat服务器它能够处理html文件的功能,这点跟Web服务器和IIS同样。只是在处理html文件上,Tomcat服务器没有Apache服务器优越。Tomcat发展以来,目前已经更新到9.0版本了。之所以选择Tomcat服务器来源于它的先进技术,稳定性能等优点,当然最主要的还是Java程序开发者对Tomcat服务器的接纳和认可,Tomcat服务器也深受某些软件开发商的喜爱。
第三章 系统分析
3.1可行性分析
在系统开发之初要进行系统可行分析,这样做的目的就是使用最小成本解决最大问题,一旦程序开发满足用户需要,带来的好处也是很多的。下面我们将从技术上、经济上以及运行上等方面来考虑这个系统到底值不值得开发。
3.1.1技术可行性
本文将开发的系统,将采用的关键技术包括Java编程语言、B/S结构、MYSQL数据库存储技术等。开发程序选择的是面向对象的,功能强大的,简单易用的Java程序设计语言,数据库的开发工具使用到了MYSQL数据库,由于自己之前接触过一些简单的程序开发方面的设计作品,所以对Eclipse工具的使用比较熟练,对于数据库的操作技巧也有一定的积累。另外,程序开发需要在自己电脑上安装的软件并不多,在win7操作系统的大环境下,能够完全搭建好程序开发的操作环境,比如Eclipse工具,MYSQL数据库工具,以及处理程序图片的Photoshop工具等都能安装在自己的电脑上。总的说来,开发这个程序在技术上是可以实现的,该项目的开发是有保障的。
3.1.2经济可行性
开发该系统时,优先考虑了使用网页来完成该系统。从已有的Web网页开发的案例、资料中,可知Web所需要的软硬件简单,切开发成本低。且从引进该系统后的预想表现将会比传统方式优异,其具有高效、低成本的特点。可以大量节省管理的人力、物力,具有一定经济效益和社会效益。综上所述,该系统具有高经济可行性
3.1.3运行可行性
运行可行性是对组织结构的影响,现有人员和机构和环境对系统的适应性及人员培训补充计划的可行性。以目前信息技术的普及程度之广、相关工作的操作人员的水平之高,是足以胜任的。综上所述,该系统具有高运行可行性。
3.1.4法律可行性
(1)所使用的技术或者资料(书籍、文献、软件)合乎中国法律。
(2)所开发过程不涉合同、侵权、责任和各种法律相抵的问题。
(3)所完成系统不存在侵犯版权问题。
(4)完全符合中国的《中华人民共和国著作权法》和《计算机软件保护条例》。
综上所述,该系统具有高法律可行性。
通过分析论证,该社区管理与服务系统总体上是具有高可行性的。
3.2 系统性能分析
达到如以下的性能需求指标,可以保证系统的安全性、可靠性、稳定性,需要:
(1)系统响应的精确性和实时性
这是本系统必要的性能。考虑到未来系统可能承受的工作量,需要能够承担得起企业级的信息处理需求。实时性是该系统的生命线,因此需采用软实时系统来进行保证。
(2)系统的开放性和系统的可扩充性
本系统是一个较为初期的一个雏形,以后势必会根据的社区管理与服务需求的扩大或转变。这就要求本系统需要提供足够的开放型和可扩充性,只要符合本系统的设计准则都可以将新的模块加入。通过这样的升级、维护来完成本系统后期的生命周期。
(3)系统的易用性和易维护性
要求不论是熟悉或不熟悉计算机的用户都可以对系统进行有效的人机交互。因此提供给用户一个友好、漂亮的图形接口是非常重要的。这可以通过发一些纸质和实际的界面模型问卷调查来获得最佳的效果。此外,也考虑到维护本系统的操作人员,有效的手段的数据备份、管理和错误检测、恢复需要被提供给相关的人员。
(4)系统的响应速度
要求系统在任何情况下的平均响应速度达到秒级,具有软实时性。一是为了保证了系统的工作效率,二为了防止系统错误、瘫痪。
3.3 系统功能分析
本社区管理与服务系统主要包括管理员功能模块和社区用户功能模块两大部分,下面分别介绍其功能:
(1)管理员功能模块
管理员是这两类用户中权限最高的,管理员登录后可对系统进行全面管理,确保系统正常稳定运行,管理员主要功能包括个人中心、社区用户管理、社区停车管理、社区公共场所管理、新闻类型管理、新闻资讯管理、社区政务服务管理、社区活动管理、活动报名管理、服务类型管理、社区安保维护管理、住户反馈管理、公共场所预约管理、社区论坛以及系统管理。管理员用例图如图3-1所示。
图3-1 管理员用例图
(2)社区用户功能模块
社区用户在系统前台可查看系统信息,包括首页、社区公共场所、新闻资讯、社区政务服务、社区活动、论坛信息等,注册登录后主要功能模块包括个人中心、活动报名管理、住户反馈管理以及公告场所预约管理,社区用户用例图如图3-2所示。
图3-2 社区用户用例图
3.4 系统流程分析
3.4.1注册流程
未有账号的社区用户可进行注册操作,注册流程图如图3-3所示。
图3-3 注册流程图
3.4.2登录流程
登录模块主要满足了管理员和社区用户的权限登录,用户在登录界面输入用户名和密码,点击登录,通过验证,进入系统,登录流程图如图3-4所示。
图3-4登录流程图
3.4.3活动报名流程
社区用户在活动报名时需要登录系统,只要登录后才可进行活动报名操作,用户活动报名的流程分析如图3-5所示。
图3-5 活动报名流程图
第四章 系统设计
4.1系统概要设计
本社区管理与服务系统并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构,图4-1就是开发出来的程序工作原理图。
图4-1 系统工作原理图
4.2 系统结构设计
根据前面的各项设计分析,按照系统开发的基本理念对网站进行分解,从模块上主要可分为管理员功能模块和用户功能模块两大部分,本社区管理与服务系统结构图如图4-2所示。
图4-2 系统结构图
4.3系统顺序图设计
4.3.1登录模块顺序图
登录模块主要完成了社区用户和管理员的权限登录,登录模块的顺序图如图 4-3所示。
图4-3用户登录顺序图
4.3.2添加信息模块顺序图
管理员和社区用户登录后均可进行统计信息操作,添加信息顺序图如图4-4所示。
图4-4添加信息顺序图
4.4数据库设计
4.4.1 数据库E-R图设计
系统E-R图就是系统的实体关系图,它是用来描述某一组织(单位)的概念模型,提供了表示实体、属性和联系的方法。构成E-R图的基本要素是实体、属性和关系。实体是指客观存在并可相互区分的事特;属性指指实体所具有的每一个特性。根据数据库中的几个表分别绘制数据库的实体图。以下给出本系统中比较重要的实体E-R图。
(1)社区论坛信息实体E- R图,如图4-5所示
图4-5 社区论坛信息实体图
(2)管理员信息实体E- R图,如图4-6所示:
图4-6 管理员信息实体图
(3)社区用户信息实体E- R图,如图4-7所示:
图4-7 社区用户信息实体图
(4)社区活动信息实体E- R图,如图4-8所示:
图4-8 社区活动信息实体图
(5)社区公共场所信息实体E- R图,如图4-9所示:
图4-9 区公共场所信息实体图
4.7.2 数据库表设计
本社区管理与服务系统需要后台数据库,本系统采用MYSQL数据库作为数据存储,下面介绍数据库中的各个表的详细信息。
表4-1 社区论坛信息表(forum)
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
title | varchar(200) | NULL | 帖子标题 |
content | longtext | NULL | 帖子内容 |
parentid | bigint(20) | NULL | 父节点编号 |
userid | bigint(20) | NULL | 用户编号 |
username | varchar(200) | NULL | 用户名 |
isdone | varchar(200) | NULL | 状态 |
表4-2 管理员信息表(users)
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id | bigint(20) | NOT NULL | 编号 |
username | varchar(100) | NULL | 用户名 |
password | varchar(100) | NULL | 密码 |
role | varchar(100) | NULL | 角色 |
addtime | timestamp | NULL | 新增时间 |
表4-3 社区用户信息表(shequyonghu)
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
yonghuzhanghao | varchar(200) | NULL | 用户账号 |
mima | varchar(200) | NULL | 密码 |
yonghuxingming | varchar(200) | NULL | 用户姓名 |
xingbie | varchar(200) | NULL | 性别 |
nianling | varchar(200) | NULL | 年龄 |
touxiang | varchar(200) | NULL | 头像 |
yonghushouji | varchar(200) | NULL | 用户手机 |
zhuzhi | varchar(200) | NULL | 住址 |
表4-4 社区活动信息表(shequhuodong)
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
huodongmingcheng | varchar(200) | NULL | 活动名称 |
huodongtupian | varchar(200) | NULL | 活动图片 |
`baomingtiaojian | varchar(200) | NULL | 报名条件 |
kaishishijian | date | NULL | 开始时间 |
jieshushijian | date | NULL | 结束时间 |
huodongneirong | longtext | NULL | 活动内容 |
huodongdidian | varchar(200) | NULL | 活动地点 |
jubanfang` | varchar(200) | NULL | 举办方 |
lianxidianhua | varchar(200) | NULL | 联系电话 |
表4-5 社区公共场所信息表(shequgonggongchangsuo)
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
changsuomingcheng | varchar(200) | NULL | 场所名称 |
`didian | varchar(200) | NULL | 地点 |
fengmiantupian | varchar(200) | NULL | 封面图片 |
yongtu | longtext | NULL | 用途 |
fuzeren | varchar(200) | NULL | 负责人 |
`lianxidianhua | varchar(200) | NULL | 联系电话 |
kaifangshijian | varchar(200) | NULL | 开始时间 |
第五章 系统的实现
5.1社区用户功能模块的实现
社区用户进入系统前台可查看系统信息,包括首页、社区公共场所、新闻资讯、社区政务服务和社区活动等,系统主界面如图5-1所示。
图5-1 系统主界面
5.1.1社区用户注册界面
未有账号的社区用户可进入注册界面进行注册操作,社区用户注册界面如图5-2所示 。
图5-2 社区用户注册界面
5.1.2社区用户登录界面
社区用户要想实现活动报名等操作,必须登录系统,社区用户登录界面如图5-3所示。
图5-3 社区用户登录界面
5.1.3论坛发帖界面
社区用户登录后可进行论坛发帖操作,论坛发帖界面如图5-4所示。
图5-4 论坛发帖界面
5.1.4社区活动详情界面
社区用户可选择社区活动查看详情信息,登录后可实现报名操作,社区活动详情界面如图5-5所示。
图5-5 社区活动详情界面
5.1.5社区公共场所详情界面
社区用户可选择社区公共场所查看详情信息,登录后可进行预约,社区公共场所详情界面如图5-6所示。
图5-6 社区公共场所详情界面
5.1.6社区活动报名界面
社区用户可选择活动进行报名操作,在报名时需要填写相关信息,社区活动报名界面如图5-7所示
图5-7 社区活动报名界面
5.1.7住户反馈界面
社区用户登录后可进行统计住户反馈信息,住户反馈界面如图5-8所示
图5-8 住户反馈界面
5.2管理员功能模块的实现
5.2.1管理员登录界面
管理员要想进入后台对系统进行管理操作,必须登录系统后台,管理员登录界面如图5-9所示。
图5-9 管理员登录界面
5.2.2社区用户管理界面
管理员在社区用户管理界面可查看所有社区用户信息,并可对其进行修改和删除操作,社区用户管理界面如图5-10所示。
图5-10 社区用户管理界面
5.2.社区公共场所管理界面
管理员可新增、编辑和删除社区公共场所信息,社区公共场所管理界面如图5-11所示,添加社区公共场所界面展示如图5-12所示。
图5-11 社区公共场所管理界面
图5-12 添加社区公共场所界面
5.2.4社区活动管理界面
管理员可新增、修改和删除社区活动信息,社区活动管理界面如图5-13所示。
图5-13 社区活动管理界面
5.2.5活动报名管理界面
管理员可查看社区用户活动报名信息,并可对其进行审核、修改和删除操作,活动报名管理界面如图5-14所示。
图5-14 活动报名管理界面
5.2.6住户反馈管理界面
管理员可查看社区住户反馈信息,并可对其进行审核、修改和删除操作,住户反馈管理界面展示如图5-15所示。
图5-15 住户反馈管理界面
FuwuleixingController.java
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
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.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.FuwuleixingEntity;
import com.entity.view.FuwuleixingView;
import com.service.FuwuleixingService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 服务类型
* 后端接口
* @author
* @email
* @date 2021-02-27 15:35:54
*/
@RestController
@RequestMapping("/fuwuleixing")
public class FuwuleixingController {
@Autowired
private FuwuleixingService fuwuleixingService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,FuwuleixingEntity fuwuleixing, HttpServletRequest request){
EntityWrapper<FuwuleixingEntity> ew = new EntityWrapper<FuwuleixingEntity>();
PageUtils page = fuwuleixingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fuwuleixing), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,FuwuleixingEntity fuwuleixing, HttpServletRequest request){
EntityWrapper<FuwuleixingEntity> ew = new EntityWrapper<FuwuleixingEntity>();
PageUtils page = fuwuleixingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fuwuleixing), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( FuwuleixingEntity fuwuleixing){
EntityWrapper<FuwuleixingEntity> ew = new EntityWrapper<FuwuleixingEntity>();
ew.allEq(MPUtil.allEQMapPre( fuwuleixing, "fuwuleixing"));
return R.ok().put("data", fuwuleixingService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(FuwuleixingEntity fuwuleixing){
EntityWrapper< FuwuleixingEntity> ew = new EntityWrapper< FuwuleixingEntity>();
ew.allEq(MPUtil.allEQMapPre( fuwuleixing, "fuwuleixing"));
FuwuleixingView fuwuleixingView = fuwuleixingService.selectView(ew);
return R.ok("查询服务类型成功").put("data", fuwuleixingView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
FuwuleixingEntity fuwuleixing = fuwuleixingService.selectById(id);
return R.ok().put("data", fuwuleixing);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
FuwuleixingEntity fuwuleixing = fuwuleixingService.selectById(id);
return R.ok().put("data", fuwuleixing);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody FuwuleixingEntity fuwuleixing, HttpServletRequest request){
fuwuleixing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fuwuleixing);
fuwuleixingService.insert(fuwuleixing);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody FuwuleixingEntity fuwuleixing, HttpServletRequest request){
fuwuleixing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fuwuleixing);
fuwuleixingService.insert(fuwuleixing);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody FuwuleixingEntity fuwuleixing, HttpServletRequest request){
//ValidatorUtils.validateEntity(fuwuleixing);
fuwuleixingService.updateById(fuwuleixing);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
fuwuleixingService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<FuwuleixingEntity> wrapper = new EntityWrapper<FuwuleixingEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = fuwuleixingService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
DiscussshequgonggongchangsuoController.java
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
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.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.DiscussshequgonggongchangsuoEntity;
import com.entity.view.DiscussshequgonggongchangsuoView;
import com.service.DiscussshequgonggongchangsuoService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 社区公共场所评论表
* 后端接口
* @author
* @email
* @date 2021-02-27 15:35:54
*/
@RestController
@RequestMapping("/discussshequgonggongchangsuo")
public class DiscussshequgonggongchangsuoController {
@Autowired
private DiscussshequgonggongchangsuoService discussshequgonggongchangsuoService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo, HttpServletRequest request){
EntityWrapper<DiscussshequgonggongchangsuoEntity> ew = new EntityWrapper<DiscussshequgonggongchangsuoEntity>();
PageUtils page = discussshequgonggongchangsuoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussshequgonggongchangsuo), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo, HttpServletRequest request){
EntityWrapper<DiscussshequgonggongchangsuoEntity> ew = new EntityWrapper<DiscussshequgonggongchangsuoEntity>();
PageUtils page = discussshequgonggongchangsuoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussshequgonggongchangsuo), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo){
EntityWrapper<DiscussshequgonggongchangsuoEntity> ew = new EntityWrapper<DiscussshequgonggongchangsuoEntity>();
ew.allEq(MPUtil.allEQMapPre( discussshequgonggongchangsuo, "discussshequgonggongchangsuo"));
return R.ok().put("data", discussshequgonggongchangsuoService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo){
EntityWrapper< DiscussshequgonggongchangsuoEntity> ew = new EntityWrapper< DiscussshequgonggongchangsuoEntity>();
ew.allEq(MPUtil.allEQMapPre( discussshequgonggongchangsuo, "discussshequgonggongchangsuo"));
DiscussshequgonggongchangsuoView discussshequgonggongchangsuoView = discussshequgonggongchangsuoService.selectView(ew);
return R.ok("查询社区公共场所评论表成功").put("data", discussshequgonggongchangsuoView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo = discussshequgonggongchangsuoService.selectById(id);
return R.ok().put("data", discussshequgonggongchangsuo);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo = discussshequgonggongchangsuoService.selectById(id);
return R.ok().put("data", discussshequgonggongchangsuo);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo, HttpServletRequest request){
discussshequgonggongchangsuo.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discussshequgonggongchangsuo);
discussshequgonggongchangsuoService.insert(discussshequgonggongchangsuo);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo, HttpServletRequest request){
discussshequgonggongchangsuo.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discussshequgonggongchangsuo);
discussshequgonggongchangsuoService.insert(discussshequgonggongchangsuo);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody DiscussshequgonggongchangsuoEntity discussshequgonggongchangsuo, HttpServletRequest request){
//ValidatorUtils.validateEntity(discussshequgonggongchangsuo);
discussshequgonggongchangsuoService.updateById(discussshequgonggongchangsuo);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
discussshequgonggongchangsuoService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<DiscussshequgonggongchangsuoEntity> wrapper = new EntityWrapper<DiscussshequgonggongchangsuoEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = discussshequgonggongchangsuoService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
DiscussxinwenzixunServiceImpl.java
package com.service.impl;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;
import com.dao.DiscussxinwenzixunDao;
import com.entity.DiscussxinwenzixunEntity;
import com.service.DiscussxinwenzixunService;
import com.entity.vo.DiscussxinwenzixunVO;
import com.entity.view.DiscussxinwenzixunView;
@Service("discussxinwenzixunService")
public class DiscussxinwenzixunServiceImpl extends ServiceImpl<DiscussxinwenzixunDao, DiscussxinwenzixunEntity> implements DiscussxinwenzixunService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<DiscussxinwenzixunEntity> page = this.selectPage(
new Query<DiscussxinwenzixunEntity>(params).getPage(),
new EntityWrapper<DiscussxinwenzixunEntity>()
);
return new PageUtils(page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper<DiscussxinwenzixunEntity> wrapper) {
Page<DiscussxinwenzixunView> page =new Query<DiscussxinwenzixunView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public List<DiscussxinwenzixunVO> selectListVO(Wrapper<DiscussxinwenzixunEntity> wrapper) {
return baseMapper.selectListVO(wrapper);
}
@Override
public DiscussxinwenzixunVO selectVO(Wrapper<DiscussxinwenzixunEntity> wrapper) {
return baseMapper.selectVO(wrapper);
}
@Override
public List<DiscussxinwenzixunView> selectListView(Wrapper<DiscussxinwenzixunEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public DiscussxinwenzixunView selectView(Wrapper<DiscussxinwenzixunEntity> wrapper) {
return baseMapper.selectView(wrapper);
}
}
bootstrap-colorpicker.min.js
/*!
* Bootstrap Colorpicker
* (c) 2012 Stefan Petre
* http://mjaalnir.github.io/bootstrap-colorpicker/
* http://www.apache.org/licenses/LICENSE-2.0.txt
*/(function(d){var k=function(a){this.value={h:1,s:1,b:1,a:1};this.setColor(a)};k.prototype={constructor:k,setColor:function(a){a=a.toLowerCase();var b=this;d.each(e.stringParsers,function(c,d){var f=d.re.exec(a),f=f&&d.parse(f),g=d.space||"rgba";return f?(b.value="hsla"===g?e.RGBtoHSB.apply(null,e.HSLtoRGB.apply(null,f)):e.RGBtoHSB.apply(null,f),!1):!0})},setHue:function(a){this.value.h=1-a},setSaturation:function(a){this.value.s=a},setLightness:function(a){this.value.b=1-a},setAlpha:function(a){this.value.a=
parseInt(100*(1-a),10)/100},toRGB:function(a,b,c,d){a||(a=this.value.h,b=this.value.s,c=this.value.b);var f,g,e;a=360*a%360/60;e=c*b;b=e*(1-Math.abs(a%2-1));c=f=g=c-e;a=~~a;c+=[e,b,0,0,b,e][a];f+=[b,e,e,b,0,0][a];g+=[0,0,b,e,e,b][a];return{r:Math.round(255*c),g:Math.round(255*f),b:Math.round(255*g),a:d||this.value.a}},toHex:function(a,b,c,d){a=this.toRGB(a,b,c,d);return"#"+(16777216|parseInt(a.r)<<16|parseInt(a.g)<<8|parseInt(a.b)).toString(16).substr(1)},toHSL:function(a,b,c,d){a||(a=this.value.h,
b=this.value.s,c=this.value.b);var f=(2-b)*c;b*=c;b=0<f&&1>=f?b/f:b/(2-f);1<b&&(b=1);return{h:a,s:b,l:f/2,a:d||this.value.a}}};var l=0,h=function(a,b){l++;this.element=d(a).attr("data-colorpicker-guid",l);var c=b.format||this.element.data("color-format")||"hex";this.format=e.translateFormats[c];this.isInput=this.element.is("input");this.component=this.element.is(".colorpicker-component")?this.element.find(".add-on, .input-group-addon"):!1;this.picker=d(e.template).attr("data-colorpicker-guid",l).appendTo("body").on("mousedown.colorpicker",
d.proxy(this.mousedown,this));if(this.isInput)this.element.on({"focus.colorpicker":d.proxy(this.show,this),"keyup.colorpicker":d.proxy(this.update,this)});else if(this.component)this.component.on({"click.colorpicker":d.proxy(this.show,this)});else this.element.on({"click.colorpicker":d.proxy(this.show,this)});if("rgba"===c||"hsla"===c)this.picker.addClass("alpha"),this.alpha=this.picker.find(".colorpicker-alpha")[0].style;this.component?(this.picker.find(".colorpicker-color").hide(),this.preview=
this.element.find("i")[0].style):this.preview=this.picker.find("div:last")[0].style;this.base=this.picker.find("div:first")[0].style;this.update();d(d.proxy(function(){this.element.trigger("create",[this])},this))};h.prototype={constructor:h,show:function(a){this.picker.show();this.height=this.component?this.component.outerHeight():this.element.outerHeight();this.place();d(window).on("resize.colorpicker",d.proxy(this.place,this));!this.isInput&&a&&(a.stopPropagation(),a.preventDefault());d(document).on({"mousedown.colorpicker":d.proxy(this.hide,
this)});this.element.trigger({type:"showPicker",color:this.color})},update:function(){var a=this.isInput?this.element.prop("value"):this.element.data("color");if("undefined"===typeof a||null===a)a="#ffffff";this.color=new k(a);this.picker.find("i").eq(0).css({left:100*this.color.value.s,top:100-100*this.color.value.b}).end().eq(1).css("top",100*(1-this.color.value.h)).end().eq(2).css("top",100*(1-this.color.value.a));this.previewColor()},hide:function(){this.picker.hide();d(window).off("resize",this.place);
d(document).off({mousedown:this.hide});this.isInput?""!==this.element.val()&&this.element.prop("value",this.format.call(this)).trigger("change"):(this.component&&""!==this.element.find("input").val()&&this.element.find("input").prop("value",this.format.call(this)).trigger("change"),this.element.data("color",this.format.call(this)));this.element.trigger({type:"hidePicker",color:this.color})},place:function(){var a=this.component?this.component.offset():this.element.offset();this.picker.css({top:a.top+
this.height,left:a.left})},destroy:function(){d(".colorpicker[data-colorpicker-guid="+this.element.attr("data-colorpicker-guid")+"]").remove();this.element.removeData("colorpicker").removeAttr("data-colorpicker-guid").off(".colorpicker");!1!==this.component&&this.component.off(".colorpicker");this.element.trigger("destroy",[this])},setValue:function(a){this.isInput?this.element.prop("value",a):(this.element.find("input").val(a),this.element.data("color",a));this.update();this.element.trigger({type:"changeColor",
color:this.color})},previewColor:function(){try{this.preview.backgroundColor=this.format.call(this)}catch(a){this.preview.backgroundColor=this.color.toHex()}this.base.backgroundColor=this.color.toHex(this.color.value.h,1,1,1);this.alpha&&(this.alpha.backgroundColor=this.color.toHex())},pointer:null,slider:null,mousedown:function(a){a.stopPropagation();a.preventDefault();var b=d(a.target).closest("div");if(!b.is(".colorpicker")){if(b.is(".colorpicker-saturation"))this.slider=d.extend({},e.sliders.saturation);
else if(b.is(".colorpicker-hue"))this.slider=d.extend({},e.sliders.hue);else if(b.is(".colorpicker-alpha"))this.slider=d.extend({},e.sliders.alpha);else return!1;var c=b.offset();this.slider.knob=b.find("i")[0].style;this.slider.left=a.pageX-c.left;this.slider.top=a.pageY-c.top;this.pointer={left:a.pageX,top:a.pageY};d(document).on({"mousemove.colorpicker":d.proxy(this.mousemove,this),"mouseup.colorpicker":d.proxy(this.mouseup,this)}).trigger("mousemove")}return!1},mousemove:function(a){a.stopPropagation();
a.preventDefault();var b=Math.max(0,Math.min(this.slider.maxLeft,this.slider.left+((a.pageX||this.pointer.left)-this.pointer.left)));a=Math.max(0,Math.min(this.slider.maxTop,this.slider.top+((a.pageY||this.pointer.top)-this.pointer.top)));this.slider.knob.left=b+"px";this.slider.knob.top=a+"px";this.slider.callLeft&&this.color[this.slider.callLeft].call(this.color,b/100);this.slider.callTop&&this.color[this.slider.callTop].call(this.color,a/100);this.previewColor();if(this.isInput)try{this.element.val(this.format.call(this)).trigger("change")}catch(c){this.element.val(this.color.toHex()).trigger("change")}else try{this.element.find("input").val(this.format.call(this)).trigger("change")}catch(d){this.element.find("input").val(this.color.toHex()).trigger("change")}this.element.trigger({type:"changeColor",
color:this.color});return!1},mouseup:function(a){a.stopPropagation();a.preventDefault();d(document).off({mousemove:this.mousemove,mouseup:this.mouseup});return!1}};d.fn.colorpicker=function(a,b){return this.each(function(){var c=d(this),e=c.data("colorpicker"),f="object"===typeof a&&a;if(!e)"destroy"!==a&&c.data("colorpicker",new h(this,d.extend({},d.fn.colorpicker.defaults,f)));else if("string"===typeof a)e[a](b)})};d.fn.colorpicker.defaults={};d.fn.colorpicker.Constructor=h;var e={translateFormats:{rgb:function(){var a=
this.color.toRGB();return"rgb("+a.r+","+a.g+","+a.b+")"},rgba:function(){var a=this.color.toRGB();return"rgba("+a.r+","+a.g+","+a.b+","+a.a+")"},hsl:function(){var a=this.color.toHSL();return"hsl("+Math.round(360*a.h)+","+Math.round(100*a.s)+"%,"+Math.round(100*a.l)+"%)"},hsla:function(){var a=this.color.toHSL();return"hsla("+Math.round(360*a.h)+","+Math.round(100*a.s)+"%,"+Math.round(100*a.l)+"%,"+a.a+")"},hex:function(){return this.color.toHex()}},sliders:{saturation:{maxLeft:100,maxTop:100,callLeft:"setSaturation",
callTop:"setLightness"},hue:{maxLeft:0,maxTop:100,callLeft:!1,callTop:"setHue"},alpha:{maxLeft:0,maxTop:100,callLeft:!1,callTop:"setAlpha"}},RGBtoHSB:function(a,b,c,d){a/=255;b/=255;c/=255;var f,e;f=Math.max(a,b,c);e=f-Math.min(a,b,c);a=60*(((0===e?0:f===a?(b-c)/e:f===b?(c-a)/e+2:(a-b)/e+4)+360)%6)/360;return{h:a||1,s:0===e?0:e/f,b:f,a:d||1}},HueToRGB:function(a,b,c){0>c?c+=1:1<c&&(c-=1);return 1>6*c?a+6*(b-a)*c:1>2*c?b:2>3*c?a+6*(b-a)*(2/3-c):a},HSLtoRGB:function(a,b,c,d){0>b&&(b=0);b=0.5>=c?c*(1+
b):c+b-c*b;var f=2*c-b,g=a-1/3;c=Math.round(255*e.HueToRGB(f,b,a+1/3));a=Math.round(255*e.HueToRGB(f,b,a));b=Math.round(255*e.HueToRGB(f,b,g));return[c,a,b,d||1]},stringParsers:[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,parse:function(a){return[a[1],a[2],a[3],a[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,parse:function(a){return[2.55*a[1],2.55*a[2],2.55*a[3],a[4]]}},{re:/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
parse:function(a){return[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]}},{re:/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,parse:function(a){return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(a){return[a[1]/360,a[2]/100,a[3]/100,a[4]]}}],template:'<div class="colorpicker dropdown-menu"><div class="colorpicker-saturation"><i><b></b></i></div><div class="colorpicker-hue"><i></i></div><div class="colorpicker-alpha"><i></i></div><div class="colorpicker-color"><div /></div></div>'}})(window.jQuery);
声明
本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。