如何使用ssm实现亿互游在线平台设计与开发+vue

news2024/9/24 3:26:14

@TOC

ssm118亿互游在线平台设计与开发+vue

绪论

1.1研究背景

时代的发展,我们迎来了数字化信息时代,它正在渐渐的改变着人们的工作、学习以及娱乐方式。计算机网络,Internet扮演着越来越重要的角色,人们已经离不开网络了,大量的图片、文字、视频冲击着我们的视觉。

随着社会生产力的发展,人们的生活水平越来越高。旅游,越来越成为人们一种休闲娱乐的方式。喧嚣的都市,高强度的工作与生活,让很多人身心疲惫[2]。而旅游,则可以调节身心、恢复疲惫和增加人们的阅历。在旅游度假区,既可以了解当地的人文情怀,又可以在碧水蓝天间忘却烦恼[7]。所以,旅游越来越受人民的欢迎。根据联合国世界旅游组织最新发布的《世界旅游晴雨表》,2015年国际游客人数相比2014年增长了4.4%,达到11.84亿人次[5]。随着社会和经济的发展,旅游业已成长为世界经济中发展势头最强劲和规模最大的产业之一。

因此,为了给用户提供一个便利的查看旅游信息、酒店预订以及美食购买的平台,开发了本亿互游在线平台。

1.2设计原则

在开始开发项目之前,必须要先考虑项目的实用性、科学性,以及该项目是否能够真正让用户受益并尽可能的发挥项目的作用。因此,在开发前,通过以下几条原则对项目进行判断:

(1)可行性原则。项目需要保证经济可行性和技术可行性,这包括了项目在浏览端、服务端等方面上的经济和技术上是可以达成的。

(2)适应性原则。项目要保证可维护性和可扩展性,这是每个非短期项目都需要考虑的,并且不论是维护还是扩展,都必须要建立在适应用户的正常需求的基础上。

(3)安全性及保密性原则。要充分保证用户信息的安全性和保密性,不能因为开发上的疏忽,导致用户的信息泄露。

(4)系统工程原则。为了确保项目的整体性,在项目调查、项目分析、项目设计、项目开发的过程中,都需遵从项目工程的方法和步骤逐步进行。

(5)统一规划、分期实施、逐步完善原则。项目开发的过程中,要按照规划、分期实施,特别是要注意在项目开发过程中要有条理,从点到面,一步步完善,不要贪图进度,要循环渐进的对项目进行开发。

1.3论文主要内容

(1)绪论:文章第一个部分从程序开发背景和设计原则进行多方面阐述

(2)开发技术介绍:简单介绍程序开发需要的技术,有语言技术、数据库技术,系统结构介绍,能够对程序开发技术有个大概了解

(3)需求分析:分析系统开发的可行性,降低不必要的损失,从法律,经济,操作等内容讲解程序开发的可行性,还有系统执行过程需要的软硬件环境等内容

(4)系统设计:根据前面需求最后设计出系统功能模块结构图,各个大的功能板块下面具有什么小功能板块,都能够一目了然,数据库里面的数据表设计以表格形式体现,数据库概念结构设计部分通过ER图表示出来,描述部分实体具有的属性等内容

(5)系统实现:程序编码完成阶段,看看系统具有什么样的功能,做出来的系统界面效果图,每个版块部分功能操作的详细实现,都用界面的形式表示,更加明白和了解系统功能

(6)系统测试:程序做出来都要经过多方面的内容测试,本次系统开发测试原理以文字形式阐述,程序最终通过测试,可以给用户投入使用,本程序质量还是有一定保障,后期维护也便捷

31

2 相关技术简介

2.1 JSP技术

JSP(JavaServer Pages)主是一种动态网页技术标准。 JSP技术有点类似于ASP技术。它将Javascripts(Scriptlets)和JSP标记(标记)插入到传统的网页HTML文件(* .htm,* .html)中,以形成JSP文件(* .jsp)[8]。使用JSP开发的Web应用程序是跨平台的,也就是说,它们可以在Linux下运行并在其他操作系统上运行。

JSP技术使用Java编程语言编写类似XML的标记和scriptlet来封装用于生成动态网页的处理逻辑。 JSP将Web逻辑与Web设计和显示分离,支持可重用的基于组件的设计,并使基于Web的应用程序开发变得快速而简单[9]。与Java Servlet一样,JSP在服务器端执行。通常,客户端返回HTML文本,因此只要它有浏览器,客户端就可以浏览。 JSP页面由HTML代码和嵌入其中的Java代码组成。服务器在客户端请求页面后处理Java代码,然后将生成的HTML页面返回到客户端的浏览器。 JSP易于使用Java技术,完全面向对象,平台无关且安全,主要用于Internet。

2.2 B/S结构

目前软件项目的开发存在两种架构模式,就是B/S模式和C/S模式,C/S模式就是较早流行的客户端和服务端模式,要使用新版应用需要暂停使用更新升级,就好比现在手机上的各种APP应用。而这次课题项目使用的是基于B/S,就是浏览器/服务端而开发的web项目。应用的更新都在服务端上进行,而且项目维护方便,不需要安装,只需要有浏览器和网络就可以了,越来越多的web项目被开发出来,也得到用户的认可。

B/S架构这种只需要用户在浏览器上运行不需要再下载客户端的模式,使用浏览器就可以实现和下载客户端的一样复杂的功能。给管理系统的用户带来了很大的方便,节约了大量的成本。现在B/S架构已经在Web开发上被广泛运用,它的基础内容也在不断的完善更新。

图2-1 B/S模式三层结构图

2.3 MYSQL数据库

本次开发的系统后台采用MySQL数据库来存放数据,MySQL实质是RDBMS(关系型数据库管理系统),源代码开放性比较高,数据库管理的语言采用SQL(结构化查询语言)进行数据管理[14],下面我们就简单介绍SQL语句的一些常用用法。通常我们要创建一个数据库时就会使用“CREATE DATABASE ”命令开头,使用某个数据库时就会以“use+数据库名称”命令,如果想要查看数据库里面数据表就会使用到“SHOW TABLES”命令,当然我们在操作数据表内容时也会使用到某些命令,比如删除就用“drop”,清空就用“delete from”,更新数据就用“update”,需要加入数据的话可以用“insert into ”等命令,这些就是SQL查询语句的惯用语法。这次采用mysql数据库还是源于它备受关注的实用性和可靠性,它里面的大部分功能一般的系统都还用不完,况且mysql小巧但它功能比较齐全,是一般系统软件的开发首选。MySQL开放的源代码通过360安全浏览器可以快速下载下来,程序员可以对这些免费的代码根据自身需求进行个性化定制操作。为了我们能够更好地使用MySQL,平时我们需要多加维护,有空的时候还是多多查看一些二进制日志、错误日志、常规查询日志等日志,它们能够帮助我们进行性能分析以及DBA检查,除了这个还需要注意每间隔一定时间就要更新缓冲区和缓存,这样能够降低碎片,利用OPTIMIZETABLE命令让数据表进行重新组织,还能节省许多空间避免空间浪费。

2.4 JAVA技术

Java是一门伟大的纯面向对象的编程语言和编程语言。同时,它还是Java语言从嵌入式开发到企业级开发的平台。Java凭借其一次编译,任何地方执行的优点,使得盛行的web应用程序有大量的Java编译,很好地支持网络发展跨平台开发所需的功能,成为服务器端主要流行的语言。Java EE至今仍然是企业发展最重要的服务器平台[6]。

鉴于Java语言是一种引用,它可以自动地收集浪费,编程人员不必担心面向对象的内存特性的管理,它具有一系列类别和类型的支持、多个接口和接口的继承,以及一种实现的机制关于类和接口之间的。

此外,Java语言支持Internet上的应用程序开发,Java的接口是Java net,它提供了一个类库,用于编程Web应用程序,可以是一种强大的异常处理机制和自动垃圾收集机制[7]。

编程语言Java的一个目标是适应动态环境。Java程序要求,可以动态加载执行环境或网络,它也有助于软件升级。而且,能进行运行时间的实现,对运行时间类型的控制。

2.5 Tomcat简介

Tomcat在JSP 程序调试中应用广泛,它本身就是一款轻量级的源代码开放的能够支持jsp和servlets的目前比较主流的Web 服务器。普遍适用于中小型开发系统以及同时访问系统的用户数量比较少的场景。Tomcat默认模式实际上是Servlet容器,另外Tomcat服务器它能够处理html文件的功能,这点跟Web服务器和IIS同样。只是在处理html文件上,Tomcat服务器没有Apache服务器优越。Tomcat发展以来,目前已经更新到9.0版本了。之所以选择Tomcat服务器来源于它的先进技术,稳定性能等优点,当然最主要的还是Java程序开发者对Tomcat服务器的接纳和认可,Tomcat服务器也深受某些软件开发商的喜爱。

3 系统分析

3.1 可行性分析

可行性分析是该平台系统进行投入开发的基础第一步,必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用,更具有性价比和降低成本,同时也是系统平台的成功的未雨绸缪的一步[1]。

3.1.1 技术可行性

大学期间我自己利用空闲时间学习了java编程语言,通过图书馆查阅资料以及利用宿舍电脑上网了解了开发平台,熟悉并研究了jsp开发技术,对web服务器Tomcat有了比较系统的认识,数据库像mysql和sqlserver自己在平时作业中也有一定的接触,基本的操作流程还是很熟悉。对于开发软件基础知识自身还是具备,所以技术上面还是不用担心。

3.1.2 经济可行性

这次我打算开发的系统,源代码我已经在网上找好了,利用360安全浏览器就可以下载,不需要收费,加上我自己上学期间已经配置好的一台笔记本电脑就能进行开发,目前我已经在准备在自己电脑上安装开发平台和mysql数据库等开发软件。这些软件也是自己在网上下载的,不用花钱,这样看来开发亿互游在线平台经济上不需要太多支出,开发出来的系统能为用户提供一个便利的查看旅游资讯的平台,还可以实现旅游线路的预订,所以开发这样的软件很有必要。

3.1.3 操作可行性

在设计之初,我在网上参考了许多相关网站的界面布局设计,发现该系统界面展示比较简单,功能罗列齐全,操作流程简单明了,系统用户不用担心不会操作,系统各个功能模块都会有相应的提示,一看就明白,实在不知道的话,稍微指点就能上手,上手速度很快,时间不会耽误太多。

3.1.4 时间可行性

这次毕业设计学校预留的时间比较充分,从去年10月到今年5月几乎都是毕业设计制作阶段,从完成程序设计、编码、测试,到完成程序配套的论文,时间上面还有剩余,这点上是完全没有压力。

经过上面的分析,此次开发的系统从经济上、从技术上、从操作上、从时间上考虑都能过关。说明自己要开发的亿互游在线平台可行性是完全可行,操作简单,时间、金钱上面毫无压力,该系统开发是完全可行。

3.2 系统性能分析

从性能方面本亿互游在线平台必须能够进行正常高速的运行,在开发过程中必须要保证系统绝对的安全性和实效性。

(1)安全性:对于任意一个系统来说,必须有独立的密码进行系统的管理,用户、前台和管理员权限划分明确。管理员才能查看系统后台数据,外人不可随意查看。

(2)可扩展性:每个项目不可能一次就能完善,因此该项目也预留了功能和数据的接口,以便于解决该项目在后期开发中可能发生的业务或功能的变化,为该项目提供更加快速的新增或更改功能。

(3)数据完整性:本亿互游在线平台数据设计全部完整,部分采用自动生成,信息的所有录入都是需要后台进行添加,信息空不可以进行录入到系统。数据之间要联系起来,不能出错。

(4)数据存储性

该项目采用了目前主流的MySQL数据库,在安全系数和稳定性有了拥有了很高的保证。

3.3 系统功能分析

本亿互游在线平台主要满足3种类型用户的需求,这3种类型用户分别为用户、前台和管理员,他们分别实现的功能如下。

用户进入网站后可查看系统信息,包括首页、景点信息、路线规划、景点美食、住宿信息以及留言反馈等,用户要想实现酒店预订、美食购买等操作,必须登录系统,未有账号的用户可进行注册操作,注册登录后主要功能模块包括购物车、个人中心、我的订单、我的地址、我的收藏、邀请信息管理。

用户用例图如图3-1所示。

图3-1 用户用例图

管理员可登录系统后对系统进行全面管理,管理员登陆后主要功能模块包括个人中心、用户管理、前台管理、景点信息管理、旅游规划管理、景点美食管理、住宿信息管理、邀请信息管理、留言板管理、系统管理以及订单管理十一大部分。

管理员用例图如图3-2所示。

图3-2 管理员用例图

前台注册登录后主要功能模块包括个人中心、景点信息管理、路线规划管理、景点美食管理以及住宿信息管理。

前台用例图如图3-2所示。

图3-3 前台用例图

3.4 系统流程分析

3.4.1注册流程

未有账号的用户和前台均可进行注册操作,用户注册流程图如图3-4所示。

图3-4注册流程图

3.4.2登录流程

用户、前台和管理员均可进行登录操作,用户登录流程图如图3-5所示。

图3-5 登录流程图

4 系统设计

4.1 系统架构设计

B/S系统架构是本系统开发采用的结构模式,使用B/S模式开发程序以及程序后期维护层面需要的经济成本是很低的,用户能够承担得起。使用这样的模式开发,用户使用起来舒心愉悦,不会觉得别扭,操作很容易就熟练了。而且方便管理。采用B/S体系结构开发的应用软件仅仅需要在客户端安装谷歌浏览器或者其他浏览器就可以操作,对于维护和升级操作则在服务器端就能完成,不用在客户端进行操作,这样就节省了许多开销,B/S模式能够保证软件应用的跨平台性和通用性,采用它开发软件是最佳选择。B/S模式示意图如图4-1所示。

图4-1 B/S模式示意图

4.2 系统结构设计

系统结构设计是整个系统设计中重要的一部分,在结构设计过程中,首先对系统进行需求分析,然后进行系统初步设计,将系统功能模块细化,具体分析每一个功能模块具体应该首先哪些功能,最后将各个模块进行整合,实现系统结构的最终设计。

本亿互游在线平台由用户功能模块、前台功能模块和管理员功能模块三大部分构成,系统的结构图如图4-2所示。

图4-2系统结构图

4.3 数据库设计

4.3.1数据库E-R图设计

数据库在系统中扮演这很重要的角色,在这次设计的程序中我运用的是Mysql数据库。Sql语句是访问数据库的最常用的标准化语言。使用数据库,可以使整个系统的数据更加的整洁、明了。数据库在整个系统中,就是这个系统的基础。一个好的数据库设计,更有利于后期的维护,功能的扩建。如果数据库的设计出现问题,那么将是非常麻烦的事情。

每张数据表都有其字段信息,如何直观的看出一张表的结构和数据间的关系,可以通过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.3.2数据库表设计

本亿互游在线平台需要数据库,采用的是MYSQL这一数据库管理系统,各个数据库表的设计结果如下:

表4-1 jingdianxinxi景点信息表

列名说明类型 ( 长度 )备注
id编号bigint(20)不允许空,主键
addtime添加时间timestamp允许空
jingdianmingcheng景点名称varchar(200)允许空
jingdianleixing景点类型varchar(200)允许空
jingdiandengji`景点等级varchar(200)允许空
jiaotongzhuangkuang交通状况varchar(200)允许空
lianxiren联系人varchar(200)允许空
lianxidianhua联系电话varchar(200)允许空
jingdianfengmian景点封面varchar(200)允许空
jingdiandizhi`景点地址varchar(200)允许空
jingdianxiangqing景点详情longtext允许空
`yingyeshijian营业时间varchar(200)允许空
thumbsupnum赞数int(11)允许空
crazilynum踩数int(11)允许空
clicktime最近点击时间datetime允许空
clicknum点击次数int(11)允许空
price价格float允许空

表4-2 qiantai前台信息表

列名说明类型 ( 长度 )备注
id编号bigint(20)不允许空,主键
addtime添加时间timestamp允许空
qiantaizhanghao前台账号varchar(200)允许空
mima密码varchar(200)允许空
qiantaixingming`前台姓名bigint(20)允许空
zhiwei职位bigint(20)允许空
xingbie性别varchar(200)允许空
shouji手机varchar(200)允许空
youxiang邮箱varchar(200)允许空
zhaopian`照片varchar(200)允许空
`dizhi地址varchar(200)允许空
money余额float允许空

表4-3 orders订单信息表

列名说明类型 ( 长度 )备注
id编号bigint(20)不允许空,主键
addtime添加时间timestamp允许空
orderid订单编号varchar(200)允许空
tablename商品表名varchar(200)允许空
userid用户编号bigint(20)允许空
goodid商品编号bigint(20)允许空
goodname商品名称varchar(200)允许空
picture商品图片varchar(200)允许空
buynumber购买数量int(11)允许空
price价格float允许空
discountprice折扣价格float允许空
total总价格float允许空
discounttotal折扣总价格float允许空
type支付类型int(11)允许空
status状态varchar(200)允许空
address地址varchar(200)允许空

表4-4 users管理员信息表

列名说明类型 ( 长度 )备注
id编号bigint(20)不允许空,主键
username用户名varchar(100)允许空
password密码varchar(100)允许空
role角色varchar(100)允许空
addtime添加时间timestamp允许空

表4-5 yonghu`用户信息表

列名说明类型 ( 长度 )备注
id编号bigint(20)不允许空,主键
addtime添加时间timestamp允许空
zhanghao账号varchar(200)允许空
mima密码varchar(200)允许空
xingming姓名bigint(20)允许空
xingbie性别bigint(20)允许空
shouji手机varchar(200)允许空
youxiang邮箱varchar(200)允许空
zhaopian照片varchar(200)允许空
`dizhi地址varchar(200)允许空
money余额float允许空

5 系统实现

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.3用户管理界面

管理员可查看和删除用户信息,用户管理界面展示如图5-11所示。

图5-11 用户管理界面图

5.2.4邀请信息管理界面

管理员可增删改查邀请信息,邀请信息管理界面展示如图5-12所示。

图5-12 邀请信息管理界面图

5.2.5留言板管理管理界面

管理员可查看用户留言信息,并可对其进行回复、修改和删除操作,留言板管理界面展示如图5-13所示。

图5-13 留言板管理界面图

5.3前台功能模块的实现

5.3.1前台注册界面

没有账号的前台也可进行注册操作,前台注册界面展示如图5-14所示。

图5-14 前台注册界面图

5.3.2景点信息管理界面

前台可增删改查景点信息,景点信息管理界面展示如图5-15所示。

图5-15 景点信息管理界面图

5.3.3景点美食管理界面

前台能添加、修改和删除景点美食信息,景点美食管理界面展示如图5-16所示。

图5-16 景点美食管理界面图

5.3.4住宿信息管理界面

前台可以添加、修改和删除住宿信息,住宿信息管理界面展示如图5-17所示。

图5-17 住宿信息管理界面图

UserController.java

package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
    	UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }

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

YonghuController.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.format.annotation.DateTimeFormat;
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.YonghuEntity;
import com.entity.view.YonghuView;

import com.service.YonghuService;
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-03-20 09:46:50
 */
@RestController
@RequestMapping("/yonghu")
public class YonghuController {
    @Autowired
    private YonghuService yonghuService;
    
	@Autowired
	private TokenService tokenService;
	
	/**
	 * 登录
	 */
	@IgnoreAuth
	@RequestMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("zhanghao", username));
		if(user==null || !user.getMima().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(), username,"yonghu",  "用户" );
		return R.ok().put("token", token);
	}
	
	/**
     * 注册
     */
	@IgnoreAuth
    @RequestMapping("/register")
    public R register(@RequestBody YonghuEntity yonghu){
    	//ValidatorUtils.validateEntity(yonghu);
    	YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("zhanghao", yonghu.getZhanghao()));
		if(user!=null) {
			return R.error("注册用户已存在");
		}
		Long uId = new Date().getTime();
		yonghu.setId(uId);
        yonghuService.insert(yonghu);
        return R.ok();
    }
	
	/**
	 * 退出
	 */
	@RequestMapping("/logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        YonghuEntity user = yonghuService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("zhanghao", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setMima("123456");
        yonghuService.updateById(user);
        return R.ok("密码已重置为:123456");
    }


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,YonghuEntity yonghu, 
		HttpServletRequest request){

        EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
		PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,YonghuEntity yonghu, HttpServletRequest request){
        EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
		PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( YonghuEntity yonghu){
       	EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
      	ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu")); 
        return R.ok().put("data", yonghuService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(YonghuEntity yonghu){
        EntityWrapper< YonghuEntity> ew = new EntityWrapper< YonghuEntity>();
 		ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu")); 
		YonghuView yonghuView =  yonghuService.selectView(ew);
		return R.ok("查询用户成功").put("data", yonghuView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        YonghuEntity yonghu = yonghuService.selectById(id);
        return R.ok().put("data", yonghu);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        YonghuEntity yonghu = yonghuService.selectById(id);
        return R.ok().put("data", yonghu);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
    	yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(yonghu);
    	YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("zhanghao", yonghu.getZhanghao()));
		if(user!=null) {
			return R.error("用户已存在");
		}

		yonghu.setId(new Date().getTime());
        yonghuService.insert(yonghu);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
    	yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(yonghu);
    	YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("zhanghao", yonghu.getZhanghao()));
		if(user!=null) {
			return R.error("用户已存在");
		}

		yonghu.setId(new Date().getTime());
        yonghuService.insert(yonghu);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
        //ValidatorUtils.validateEntity(yonghu);
        yonghuService.updateById(yonghu);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        yonghuService.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<YonghuEntity> wrapper = new EntityWrapper<YonghuEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = yonghuService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

StoreupController.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.format.annotation.DateTimeFormat;
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.StoreupEntity;
import com.entity.view.StoreupView;

import com.service.StoreupService;
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-03-20 09:46:50
 */
@RestController
@RequestMapping("/storeup")
public class StoreupController {
    @Autowired
    private StoreupService storeupService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,StoreupEntity storeup, 
		HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		storeup.setUserid((Long)request.getSession().getAttribute("userId"));
    	}

        EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
		PageUtils page = storeupService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, storeup), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,StoreupEntity storeup, HttpServletRequest request){
    	if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		storeup.setUserid((Long)request.getSession().getAttribute("userId"));
    	}

        EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
		PageUtils page = storeupService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, storeup), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( StoreupEntity storeup){
       	EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
      	ew.allEq(MPUtil.allEQMapPre( storeup, "storeup")); 
        return R.ok().put("data", storeupService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(StoreupEntity storeup){
        EntityWrapper< StoreupEntity> ew = new EntityWrapper< StoreupEntity>();
 		ew.allEq(MPUtil.allEQMapPre( storeup, "storeup")); 
		StoreupView storeupView =  storeupService.selectView(ew);
		return R.ok("查询收藏表成功").put("data", storeupView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        StoreupEntity storeup = storeupService.selectById(id);
        return R.ok().put("data", storeup);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        StoreupEntity storeup = storeupService.selectById(id);
        return R.ok().put("data", storeup);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody StoreupEntity storeup, HttpServletRequest request){
    	storeup.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(storeup);
    	storeup.setUserid((Long)request.getSession().getAttribute("userId"));

        storeupService.insert(storeup);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody StoreupEntity storeup, HttpServletRequest request){
    	storeup.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(storeup);
    	storeup.setUserid((Long)request.getSession().getAttribute("userId"));

        storeupService.insert(storeup);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody StoreupEntity storeup, HttpServletRequest request){
        //ValidatorUtils.validateEntity(storeup);
        storeupService.updateById(storeup);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        storeupService.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<StoreupEntity> wrapper = new EntityWrapper<StoreupEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}
		if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
    		wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));
    	}


		int count = storeupService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

声明

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

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

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

相关文章

AITDK SEO扩展:为网站优化提供一站式解决方案

AITDK SEO扩展&#xff1a;为网站优化提供一站式解决方案 想提升你的网站在搜索引擎中的排名&#xff1f;让我们来看看AITDK SEO扩展&#xff0c;它是你网站优化的得力助手&#xff01;在这篇文章中&#xff0c;我将为你介绍AITDK SEO扩展的功能特点&#xff0c;以及它如何帮助…

RK3588 技术分享 | 在Android系统中使用NPU实现Yolov5分类检测-迅为电子

随着人工智能和大数据时代的到来&#xff0c;传统嵌入式处理器中的CPU和GPU逐渐无法满足日益增长的深度学习需求。为了应对这一挑战&#xff0c;在一些高端处理器中&#xff0c;NPU&#xff08;神经网络处理单元&#xff09;也被集成到了处理器里。NPU的出现不仅减轻了CPU和GPU…

前端——盒子模型

一个盒子的特点组成 外边距就是两个元素之前的距离 padding就是填充区的大小 从上开始 顺时针进行设置&#xff0c;没有则对称 也可以单独对某个方向进行设定&#xff0c;比如&#xff1a;padding-top border 边框区 符合属性 border-style 边框样式 border-color 边框颜色…

web前端之选项卡集合、动态添加类名、动态移除类名、动态添加样式、激活、间距、节流、tabBar

MENU input的checked属性(HtmlStyle)伪元素(HtmlStyleJavaScript)激活类(HtmlStyleJavaScript)vue伪元素 input的checked属性(HtmlStyle) 前言 代码段创建一个使用HTML和CSS实现的标签式内容切换组件。通过选择不同的标签&#xff0c;可以展示相应的内容。 代码段实现一个简洁…

掌握时间的艺术:Python的sched库深度解析

文章目录 掌握时间的艺术&#xff1a;Python的sched库深度解析背景&#xff1a;为何选择sched&#xff1f;什么是sched库&#xff1f;如何安装sched库&#xff1f;简单库函数使用方法1. 创建调度器实例2. 安排事件3. 取消事件4. 运行调度器5. 检查事件是否在队列中 场景应用1. …

iOS profiles文件过期如何更新

创建发布用的Certificates 首先进入到https://developer.apple.com/account页面选择【证书】进入【新建证书】页面 点击【新建证书】按钮&#xff1a; 根据需求选中对应的【证书类型】&#xff0c;我选的是【Apple Distribution】&#xff0c; 开发者证书选择【Apple Devel…

数码管进阶设计验证

前言 随着数字电路和嵌入式系统的广泛应用&#xff0c;数码管作为一种常见的显示设备&#xff0c;在各种电子产品中扮演着重要角色。数码管以其结构简单、显示清晰和成本低廉的特点&#xff0c;广泛应用于计数器、时钟、测量仪器等领域。然而&#xff0c;传统的数码管设计通常仅…

小梅哥 xilinx fpga VGA

module VGA_CTRL(Clk,Reset_n,Data,Data_Req,VGA_HS, //行VGA_VS, //场VGA_BLK, //数据有效的那一段VGA_RGB );input Clk;input Reset_n;input [23:0]Data;output reg Data_Req;output reg VGA_HS;output reg VGA_VS; output reg VGA_BLK;output reg [23:0]VGA_RGB;//{R[7:0]、…

Android常见界面控件(三)

目录 前言 列表控件ListView 常用属性 常用适配器 1.BaseAdapter 2.SimpleAdapter 3.ArrayAdapter 购物商城 选择菜品照片 创建布局文件 实现购物商城列表界面的显示效果 前言 在前面&#xff0c;我们已经讲了六个常用的界面控件和五个界面布局&#xff0c;那么本篇…

【HarmonyOS NEXT星河版开发实战】灯泡定时开关

个人主页→VON 收录专栏→鸿蒙综合案例开发​​​​​ 代码及其图片资源会发布于gitee上面&#xff08;已发布&#xff09; 所有与鸿蒙开发有关的知识点都会在gitee上面进行发布 gitee地址https://gitee.com/wang-xin-jie234 目录 前言 界面功能介绍 界面构建思路 头部 中间…

数据结构——二叉树经典OJ题

1.单值二叉树 单值二叉树&#xff1a;就是判断二叉树里的所有值是否都一样 bool isUnivalTree(struct TreeNode* root) {if(rootNULL)return true;//查找有没有左子树并且看左子树当前指向的值是否和根当前指向的值相等if(root -> left && root -> left -> v…

【三维室内数据集】ScanNet v2使用说明

【版权声明】本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 参考书籍&#xff1a;《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章&#xff0c;专栏介绍地址“【python三维深度学习】python…

Python自动化:图片批量添加水印

前言 本文将讲述怎样通过Python自动化的方法&#xff0c;来对照片进行批量的加水印&#xff0c;从而能够有效地阻止他人的非法占有&#xff0c;提高工作的效率。 Python自动化&#xff1a;办公效率的革命 自动化解决方案 实现步骤 读取指定文件夹中的图片&#xff1a;打开…

YOLOv9改进策略【卷积层】| 利用MobileNetv4中的UIB、ExtraDW优化RepNCSPELAN4

一、本文介绍 本文记录的是利用ExtraDW优化YOLOv9中的RepNCSPELAN4&#xff0c;详细说明了优化原因&#xff0c;注意事项等。ExtraDW是MobileNetv4模型中提出的新模块&#xff0c;允许以低成本增加网络深度和感受野&#xff0c;具有ConvNext和IB的组合优势。可以在提高模型精度…

redis | 认识非关系型数据库Redis的哈希数据类型

Redis 非关 kv型 哈希通用命令python 操作hash应用场景 数据类型 数据类型丰富&#xff0c;字符串strings,散列hashes,列表lists&#xff0c;集合sets,有序集合sorted sets等等 哈希 定义 1、由field和关联的value组成的键值对 类似于python的键值对 2、field和value.是字符…

『功能项目』新输入系统【07】

我们打开上一篇06新输入系统项目&#xff0c; 本章要做的事情是摄像机跟随主角移动&#xff0c; 给主角增加一个Player标签方便主摄像机查找主角对象 在编辑场景调好角度&#xff0c;选择Main Camera对象按键盘Ctrl Shift F使运行场景与编辑场景相同 新建CameraCtrl脚本代码 …

秋招突击——8/16——字节广告业务——面经整理——二面挂

文章目录 引言一面面试内容基础知识一、Redis为什么进行AOF重写&#xff1f;二、AQS和Conditon的使用三、乐观锁和分布式锁有什么差异&#xff1f;频繁使用乐观锁行不行&#xff1f;四、Java的即时编译技术五、Java中的JVM调优是如何做的&#xff1f;六、Java中创建对象的流程&…

STM32——BKP备份寄存器RTC实时时钟

首先是理论知识Unix时间戳&#xff1a; 时间戳只显示秒&#xff0c;没有进位&#xff0c;永不进位的秒计数器&#xff0c;60秒就是60秒&#xff0c;100秒就是100秒&#xff0c;它可以和年月日/时分秒进行转换 优点&#xff1a;1、简化硬件电路&#xff08;只需要考虑秒的容量…

C语言 猜数字游戏

目录 1. 随机数⽣成 1.1 rand 1.2 srand 1.3 time 1.4 设置随机数的范围 2. 猜数字游戏实现 游戏要求&#xff1a; 1. 电脑⾃动⽣成1~100的随机数 2. 玩家猜数字&#xff0c;猜数字的过程中&#xff0c;根据猜测数据的⼤⼩给出⼤了或⼩了的反馈&#xff0c;直到猜对&a…

运行微信小程序报错:Bad attr data-event-opts with message

问题 使用uniapp 编译&#xff0c;运行微信小程序环境时&#xff0c;报错 Bad attr data-event-opts with message。&#xff08;这个错误报错原因很多&#xff0c;这里只解决一个&#xff09; 原因 原因是&#xff1a;代码中有&#xff1a; :key"swiperList i"…