基于web的铁路订票管理系统

@TOC

springboot347基于web的铁路订票管理系统--论文

研究背景

近年来,由于计算机技术和互联网技术的飞速发展,所有企事业单位内部都是数字化、信息化、无纸化的发展趋势,随着这种趋势的发展,各种决策系统、辅助系统也应运而生,其中,铁路订票管理系统就是其中的重要组成部分。

铁路订票管理工作向来都是社会上不可或缺的一部分,然而多年以来人们大都习惯使用传统方法,即人工来完成铁路订票的管理,但是这种方法存在着工作效率低以及保密性差的问题,同时还会生成大量的文本和数据,在检索数据时极大不便。随着科技发展进步,我们已进入了信息化社会,仅仅依靠传统的表格管理方式已不能适应时代的要求。因此使用计算机来进行接手传统方式的铁路订票管理已经势在必行。

而通过计算机技术来实现的铁路订票管理系统拥有对信息的快速检索、保存了大量的铁路订票信息、信息系统保存的稳定性高和维护成本低等优点,对铁路订票管理的工作效率也能提高。如今,传统的人工管理方法、文件和图表打印等信息传输方法已经不能满足当下的发展需求,计算机科学与互联网技术的蓬勃发展,颠覆了人们的生活以及思维方式。铁路订票管理系统的出现,利用信息技术将铁路订票管理融于办公平台中,成为提高管理水平的有利手段,将会成为未来铁路订票管理的新模式。

1.2 课题研究意义

在当下,办公自动化以一种迅速并不可阻挡的速度在慢慢遍布到社会的每一个角落中,而铁路订票管理系统正是办公自动化的一个小小分支,解决了传统铁路订票管理中繁杂且重复的操作,提高了工作的效率。

对于火车站来说,铁路订票管理系统对于管理人员进行管理来说是非常重要的,站在管理者的角度也一样。铁路订票管理系统应该做到让管理人员进行快捷的信息查询以及对信息的处理功能。然而,大多数还没有使用电子化管理来进行铁路订票工作的意识,还是使用传统的人工管理方法。如今,伴随着计算机科学的不断发展,互联网科技的日渐成熟,计算机所带来的种种优势已经逐渐为人们所认识,它已经应用在社会中的各个领域中并且越来越重要,利用计算机将铁路订票信息进行电子化、系统化的管理能将铁路订票管理的效率提上一个台阶。所以,开发一套基于web的铁路订票管理系统,将信息进行电子化、系统化的管理,代替了传统的人工管理方式,提升了工作效率。

  1. 无纸化办公,节省了时间,减少了纸张的浪费同时节约了成本。
  2. 加快了信息传输的过程,使铁路订票管理更规范和科学。
  3. 利用计算机处理速度快、信息存储量大的特点,将管理工作信息化,可以积累和管理大量的数据。
  4. 对数据进行有效并且集中的管理,实现了用户信息的共享,使管理工作可以从传统的人工管理中解放出来,提升了工作的效率,使其有更多的时间去完成更多的工作,来提高自身的业务素质。

1.3 课题研究内容

本系统结合现今铁路订票管理系统的功能模块以及设计方式进行分析,使用Java语言和SpringBoot框架进行开发设计,具体研究内容如下:

  1. 用户可以进入系统进行个人信息修改,对车票预订管理、车票退票管理等进行操作。
  2. 管理员登录系统后,可以对个人信息进行修改,对用户管理、火车类型管理、火车信息管理、车票预订管理、车票退票管理、系统管理等功能进行管理;

2 系统开发环境及相关技术

2.1 系统开发环境

本管理系统采用的集成开发环境为IntelliJ IDEA,使用Java等语言及SpringBoot框架进行开发,其中硬件环境和软件环境如下:

  1. 硬件环境

处理器:Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz 3.00GHz

内存:8GB

  1. 软件环境

操作系统:windows 10 64位操作系统

开发工具:IntelliJ IDEA 2019.1

2.2 系统开发技术

铁路订票管理系统采用B/S(Browser/Server)架构和MVC模型进行设计开发。在B/S架构下,用户在浏览器端进行使用,主要工作通过服务器端进行实现,用户通过网站进行访问大大节约了成本。本系统使用Java等语言同时运用了SpringBoot框架进行开发,使用MySQL进行数据存储。

2.2.1 Java编程语言

Java语言作为现在主流编程语言之一,就是因为它有很多自己的特点和优势。Java语言具有以下几个特点:

(1)跨平台性

平时所说的一次编译,到处执行,指的就是这个跨平台性。Java的源代码编译后会生成字节码文件,这些文件可以被Java虚拟机执行,得到想要的结果。在设备上安装对应的虚拟机,Java的字节码文件就可以运行。

(2)面向对象

Java是一个面向对象的编程语言。面向对象是指把属性和方法进行封装,通过创建的对象调用里面的方法,实现一些功能。

(3)多线程

Java是支持多线程的,它允许在一个程序中同时开启多个线程,同时处理多个任务,这样可以提高它的效率。

Java语言对于开发工具要求不高,有专业的编程工具Eclipse会更顺利编程,但是,没有专业的编程软件,用记事本也能进行编辑。

2.2.2 SpringBoot框架

Spring Boot是由Pivotal的开发团队在2013年开发的一个免费、轻量级、开源的系统框架。SpringBoot的主要设计思想是约定大于配置,因此SpringBoot在设计时几乎达到零配置。SpringBoot集成了业界的开源框架。

SpringBoot是一个非常强大的后台框架,因为SpringBoot的开发基本上不需要写配置文件,所以利用SpringBoot来构建网站的后台环境,在SpringBoot的YML配置文件中写项目启动端口,项目就可以启动了。项目的Java和静态文件由SpringBoot管理。

2.2.3 MySQL数据库

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),关系数据库将数据保存在不同的表中,提高了灵活性,它使用最常用的结构化查询语言(SQL)进行数据库管理。MySQL因其具有速度快、体积小、总体拥有成本低和开放源码的优点而备受关注。没有数据库就没有Web系统,Mysql数据库是数据库中比较常用的,这都是源于它的特点。

(1)Mysql是相比于Oracle更轻量、更简洁便于使用,在服务部署方面相对复杂度低,更利于毕设系统的开发。

(2)Mysql是免费开源的,对个人开发系统很友好。

(3)Mysql占用空间内存比较小,发行版安装后不到100兆。

(4)Mysql可以使用Sql语言进行调用,学习成本较低。

(5)Mysql可支持互联网数据共享也支持数据安全设置,防止数据泄露。

(6)Mysql运行到各种版本的操作系统中无论是服务器上,还是我们开发用的笔记本上。

(7)Mysql运行速度很快。

2.2.4 B/S结构

B/S结构就是指系统客户端与服务器分离,客户端通过浏览器访问服务端进行操作[10]。

B/S结构目前广泛应用于绝大部分系统搭建中,这种结构摒弃C/S结构客户端服务端不分离的缺点,具有更多的优势:

(1)跨平台性:B/S的标准由标准化组织确立,适用于绝大多数的系统搭建,通用于应用之间。

(2)低维护成本:客户端和服务器端分离,减轻了两端的压力,尤其是客户端,对客户端设备,硬件、软件要求都比较低,并且系统需要升级或维护时,只需要在服务器端升级或维护就可以,使相应的费用减少。

3 系统需求分析

在当今的社会生活中,互联网已经变得非常普遍和重要。充分利用互联网大数据等技术可以解决很多问题。目前,铁路订票管理也面临着自身的问题。根据这一普遍现象,铁路订票制度的出现需求巨大。该系统可以很好地解决这些问题。系统中这两类用户的数据在系统中非常关键,因此系统数据应该被组织起来,因为数据是以某种格式存储的,而不是无序的。其概念是,它可以根据长期稳定的格式在计算机内存中共享。数据库管理系统主要用于保存、修改和添加索引数据以及设置数据库。为了确保系统数据管理的顺利进行,一些有能力的处理器可以在不需要专业人员处理的情况下管理数据。创建数据表时,可以调整、重新组织和重建数据表中的数据,以确保数据可靠性。在数据库系统设计中,MySQL主要用于实现数据的集中管理。各方面表现良好。

2.1 可行性分析

根据铁路订票管理系统的功能,通过对经济效益、技术难点和管理方法进行全面的可行性分析,提供准确的可行性依据。以下是本系统的可行性分析:

  1. 经济可行性

使用了免费版的IntelliJ IDEA节省了开发成本,在购买服务器后部署项目便能通过浏览器进行访问。

  1. 技术可行性

本管理系统采用B/S架构和MVC模型进行设计,通过分层分包的方法,有利于日常的维护,同时降低了代码之间的耦合。

  1. 管理可行性

本管理系统要求管理难度低,只需要有管理员就能够对个人中心、用户管理、火车类型管理、火车信息管理、车票预订管理、车票退票管理、系统管理等信息等进行删除、修改和添加操作。

3.2 功能需求分析

铁路订票管理系统综合网络空间开发设计要求。目的是将铁路订票通过网络平台将传统管理方式转换为在线上管理,完成铁路订票的方便快捷、安全性高、交易规范做了保障,目标明确。铁路订票管理系统可以将功能划分为用户的使用功能和管理员功能。

(1)、用户关键功能包含用户注册登录,个人信息修改,对车票预订管理、车票退票管理等功能进行操作。用户用例如下:

图3-1 用户用例图

(2)、管理员的功能是最高的,可以对系统所在功能进行查看,修改和删除,包括用户功能。管理员用例如下:

图3-2管理员用例图

3.3 系统流程分析

3.3.1 登录流程

每个用户都有专属的密码和账号,在输入合法的账号和密码之后即可进入系统。登录流程如图3-3所示:

图3-3 登录流程图

3.3.2 添加信息流程

管理层人员有添加角色和用户等功能。添加信息流程如图3-4所示:

图3-4 添加信息流程图

3.3.3 收藏信息流程

在铁路订票管理系统中,用户登录后,浏览铁路订票信息详情界面能进行信息收藏,用户收藏信息的流程图如图3-5所示:

图3-5 用户收藏信息流程图

4 系统设计

4.1 功能模块设计

铁路订票管理系统按照权限的类型进行划分,分为用户和管理员两个模块。管理员模块主要针对整个系统的管理进行设计,提高了管理的效率和标准。主要功能包括个人中心、用户管理、火车类型管理、火车信息管理、车票预订管理、车票退票管理、系统管理等;系统的总体模块设计如下图所示:

图4-1 系统总体模块设计

4.2 系统数据库设计

4.2.1 数据库系统

本系统采用MySQL来进行数据库的管理。MySQL数据库具有体积小、速度快、成本低等优点。具备同时处理数千万条记录,实现大型数据库的高并发读写和高效读写需求[9]。

4.2.2 数据库概念设计

概念模型用于对信息世界建模,并与指定的数据库管理系统分离。它有助于将真实世界的事物抽象为适合于数据库管理系统的数据库模型。人们倾向于将现实世界抽象为信息世界,再把信息世界变成机器世界。也就是说,将现实世界的目标抽象成独立于专用计算机软件和专用数据库管理系统的信息结构的数据模型,然后将物理模型转化为适合电子计算机的数据库管理系统。事实上,数据模型是从真实世界到机器世界的中间层。

信息世界的基本要素包括实体和关联。现实存在且彼此可区别的事物称为实体[13]。实体可以是实际的人、事或物,还可以是抽象化的概念或联络。以下是对部分主要的关键实体如下:

火车信息实体属性图如下所示。

图4-2火车信息实体属性图

车票预订实体属性图如下所示。

图4-3车票预订实体属性图

车票退票实体属性图如下所示。

图4-4车票退票实体属性图

用户实体属性图如下所示。

图4-5用户实体属性图

公告资讯实体属性图如下所示。

图4-5公告资讯实体属性图

4.2.3 数据表设计

本设计根据数据表管理系统的具体流程进行管理,方便用户和管理员对数据的添加、删除、修改和查询等操作。

4.2.4 数据表的建立

系统采用Navicat Premium对数据库进行操作,数据库管理操作简单,数据处理能力强。数据表建立如下:

表4-1:token表

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
userid bigint 用户id
username varchar 100 用户名
tablename varchar 100 表名
role varchar 100 角色
token varchar 200 密码
addtime timestamp 新增时间 CURRENT_TIMESTAMP
expiratedtime timestamp 过期时间 CURRENT_TIMESTAMP

表4-2:关于我们

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
title varchar 200 标题
subtitle varchar 200 副标题
content longtext 4294967295 内容
picture1 longtext 4294967295 图片1
picture2 longtext 4294967295 图片2
picture3 longtext 4294967295 图片3

表4-3:收藏表

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
userid bigint 用户id
refid bigint 商品id
tablename varchar 200 表名
name varchar 200 名称
picture longtext 4294967295 图片
type varchar 200 类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注) 1
inteltype varchar 200 推荐类型
remark varchar 200 备注

表4-4:公告资讯

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
title varchar 200 标题
introduction longtext 4294967295 简介
picture longtext 4294967295 图片
content longtext 4294967295 内容

表4-5:火车信息

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
chexuhao varchar 200 车序号
huocheleixing varchar 200 火车类型
checi varchar 200 车次
qidianzhan varchar 200 起点站
zhongdianzhan varchar 200 终点站
kaicheshijian datetime 开车时间
daozhanshijian datetime 到站时间
chepiaoleixing varchar 200 车票类型
zuoweileixing varchar 200 座位类型
liechetupian longtext 4294967295 列车图片
chepiaojiage int 车票价格
liecheluxian longtext 4294967295 列车路线

表4-6:火车类型

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
huocheleixing varchar 200 火车类型

表4-7:火车信息评论表

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
refid bigint 关联表id
userid bigint 用户id
avatarurl longtext 4294967295 头像
nickname varchar 200 用户名
content longtext 4294967295 评论内容
reply longtext 4294967295 回复内容

表4-8:配置文件

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
name varchar 100 配置参数名称
value varchar 100 配置参数值

表4-9:车票预订

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
yudingbianhao varchar 200 预订编号
chexuhao varchar 200 车序号
huocheleixing varchar 200 火车类型
checi varchar 200 车次
qidianzhan varchar 200 起点站
zhongdianzhan varchar 200 终点站
kaicheshijian datetime 开车时间
daozhanshijian datetime 到站时间
chepiaoleixing varchar 200 车票类型
zuoweileixing varchar 200 座位类型
chepiaojiage int 车票价格
yudingshijian datetime 预订时间
yudingbeizhu longtext 4294967295 预订备注
yonghuzhanghao varchar 200 用户账号
yonghuxingming varchar 200 用户姓名
sfsh varchar 200 是否审核 待审核
shhf longtext 4294967295 审核回复
ispay varchar 200 是否支付 未支付

表4-10:用户

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
yonghuzhanghao varchar 200 用户账号
mima varchar 200 密码
yonghuxingming varchar 200 用户姓名
xingbie varchar 200 性别
yonghudianhua varchar 200 用户电话
touxiang longtext 4294967295 头像

表4-11:车票退票

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
addtime timestamp 创建时间 CURRENT_TIMESTAMP
tuipiaobianhao varchar 200 退票编号
chexuhao varchar 200 车序号
huocheleixing varchar 200 火车类型
checi varchar 200 车次
qidianzhan varchar 200 起点站
zhongdianzhan varchar 200 终点站
kaicheshijian datetime 开车时间
daozhanshijian datetime 到站时间
chepiaoleixing varchar 200 车票类型
zuoweileixing varchar 200 座位类型
chepiaojiage int 车票价格
tuipiaoshijian datetime 退票时间
tuipiaobeizhu longtext 4294967295 退票备注
yonghuzhanghao varchar 200 用户账号
yonghuxingming varchar 200 用户姓名
sfsh varchar 200 是否审核 待审核
shhf longtext 4294967295 审核回复

表4-12:用户表

字段名称 类型 长度 字段说明 主键 默认值
id bigint 主键 主键
username varchar 100 用户名
password varchar 100 密码
role varchar 100 角色 管理员
addtime timestamp 新增时间 CURRENT_TIMESTAMP

5 系统实现

5.1系统功能实现

当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。系统首页界面如图5-1所示:

图5-1 系统首页界面

系统注册:在系统注册页面的输入栏中输入用户注册信息进行注册操作,系统注册页面如图5-2所示:

图5-2系统注册页面

火车信息:在火车信息页面的输入栏中选择火车类型和车票类型,输入车次、起点站和终点站进行查询,可以查看到火车详细信息,并根据需要进行预订、评论或收藏操作;火车信息页面如图5-3所示:

图5-3火车信息详细页面

个人中心:在个人中心页面通过填写个人详细信息进行更新信息操作;还可以对我的收藏进行详细操作;如图5-4所示:

图5-4个人中心界面

5.2后台模块实现

后台用户登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图5-5所示。

图5-5 后台登录界面

5.2.1管理员模块实现

管理员进入主页面,主要功能包括对个人中心、用户管理、火车类型管理、火车信息管理、车票预订管理、车票退票管理、系统管理等进行操作。管理员主页面如图5-6所示:

图5-6 管理员主界面

管理员点击用户管理。在用户页面输入用户账号和选择性别进行查询、新增或删除用户列表,并根据需要对用户详情信息进行详情、修改或删除操作;如图5-7所示:

图5-7用户管理界面

管理员点击火车类型管理。在火车类型页面输入类型信息进行查询、新增或删除火车类型列表,并根据需要对火车类型详情信息进行修改或删除操作;如图5-8所示:

图5-8火车类型管理界面

管理员点击火车信息管理。在火车信息页面选择火车类型和车票类型,输入车次、起点站和终点站进行查询、新增或删除火车信息列表,并根据需要对火车详情信息进行详情、修改、查看评论或删除操作;如图5-9所示:

图5-9火车信息管理界面

管理员点击车票退票管理。在车票退票页面输入火车类型、车次、起点站、终点站、车票类型和选择是否通过进行查询或删除车票退票列表,并根据需要对车票退票详情信息进行详情、修改或删除操作;如图5-10所示:

图5-10车票退票管理界面

管理员点击系统管理。在公告资讯页面输入标题进行查询、新增或删除公告资讯列表,并根据需要对公告资讯详情信息进行详情、修改或删除操作;还可以对关于我们、系统简介和轮播图管理进行详细操作;如图5-11所示:

图5-11系统管理界面

5.2.2用户模块实现

用户进入系统可以对个人中心、车票预订管理、车票退票管理等功能进行操作。用户主页面如图5-12所示:

图5-12 用户主界面

用户点击车票预订管理。在车票预订页面输入火车类型、车次、起点站、终点站、车票类型和选择是否通过进行查询或删除车票预订列表,并根据需要对车票预订详细信息进行详情、退票、修改或删除操作。如图5-13所示:

图5-13车票预订管理界面

用户点击车票退票管理。在车票退票页面输入火车类型、车次、起点站、终点站、车票类型和选择是否通过进行查询或删除车票退票列表,并根据需要对车票退票详细信息进行详情、修改或删除操作。如图5-14所示:

图5-14车票退票管理界面

系统测试

NewsController.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.transaction.annotation.Transactional;
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.NewsEntity;
import com.entity.view.NewsView;

import com.service.NewsService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;

/**
 * 公告资讯
 * 后端接口
 * @author 
 * @email 
 * @date 2023-01-05 15:26:04
 */
@RestController
@RequestMapping("/news")
public class NewsController {
    @Autowired
    private NewsService newsService;


    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,NewsEntity news,
		HttpServletRequest request){
        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();

		PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,NewsEntity news, 
		HttpServletRequest request){
        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();

		PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
        return R.ok().put("data", page);
    }

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(NewsEntity news){
        EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
 		ew.allEq(MPUtil.allEQMapPre( news, "news")); 
		NewsView newsView =  newsService.selectView(ew);
		return R.ok("查询公告资讯成功").put("data", newsView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        NewsEntity news = newsService.selectById(id);
        return R.ok().put("data", news);
    }

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



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody NewsEntity news, HttpServletRequest request){
    	news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(news);
        newsService.insert(news);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody NewsEntity news, HttpServletRequest request){
    	news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(news);
        newsService.insert(news);
        return R.ok();
    }



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

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


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








}
BaiduUtil.java
package com.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONObject;


/**
* 类说明 : 
*/

public class BaiduUtil {
	
    /**
     * 根据经纬度获得省市区信息
     * @param lon 纬度
     * @param lat 经度
     * @param coordtype 经纬度坐标系
     * @return
     */
    public static Map<String, String> getCityByLonLat(String key, String lng, String lat) {
        String location = lat + "," + lng;
        try {
            //拼装url
            String url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak="+key+"&output=json&coordtype=wgs84ll&location="+location;
            String result = HttpClientUtils.doGet(url);
            JSONObject o = new JSONObject(result);
            Map<String, String> area = new HashMap<>();
			area.put("province", o.getJSONObject("result").getJSONObject("addressComponent").getString("province"));
			area.put("city", o.getJSONObject("result").getJSONObject("addressComponent").getString("city"));
			area.put("district", o.getJSONObject("result").getJSONObject("addressComponent").getString("district"));
			area.put("street", o.getJSONObject("result").getJSONObject("addressComponent").getString("street"));
            return area;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
	     * 获取API访问token
	     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
	     * @param ak - 百度云官网获取的 API Key
	     * @param sk - 百度云官网获取的 Securet Key
	     * @return assess_token
	     */
    public static String getAuth(String ak, String sk) {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2. 官网获取的 API Key
                + "&client_id=" + ak
                // 3. 官网获取的 Secret Key
                + "&client_secret=" + sk;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String result = "";
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            /**
             * 返回结果示例
             */
            System.err.println("result:" + result);
            org.json.JSONObject jsonObject = new org.json.JSONObject(result);
            String access_token = jsonObject.getString("access_token");
            return access_token;
        } catch (Exception e) {
            System.err.printf("获取token失败!");
            e.printStackTrace(System.err);
        }
        return null;
    }

}
MD5Util.java
package com.utils;

import cn.hutool.crypto.digest.DigestUtil;

public class MD5Util {
    
	/**
	 * @param text明文
	 * @param key密钥
	 * @return 密文
	 */
	// 带秘钥加密
	public static String md5(String text) {
		// 加密后的字符串
		String md5str = DigestUtil.md5Hex(text);
		return md5str;
	}

}
HomeComment.vue
<template>
  <div class="home-comment">
    <div class="title">用户留言</div>
    <div class="comment-list">
      <div v-for="(item,index) in list"  v-bind:key="index" class="comment-item">
        <div class="user-content">
          <el-image
            class="avator"
            :src="item.avator"
          ></el-image>
          <span class="user">{{item.name}}</span>
        </div>
        <div class="comment">{{item.content}}</div>
        <div class="create-time">{{item.createTime}}</div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      list: [
        {
          name: "MaskLin",
          avator:
            "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
          content:
            "你以为只要长得漂亮就有男生喜欢?你以为只要有了钱漂亮妹子就自己贴上来了?你以为学霸就能找到好工作?我告诉你吧,这些都是真的!",
          createTime: "5月02日 00:00"
        },
        {
          name: "MaskLin",
          avator:
            "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
          content: "作者太帅了",
          createTime: "5月04日 00:00"
        },
        {
          name: "MaskLin",
          avator:
            "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
          content: "作者太帅了",
          createTime: "5月04日 00:00"
        },
        {
          name: "MaskLin",
          avator: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
          content: "作者太帅了",
          createTime: "5月04日 00:00"
        }
      ]
    };
  }
};
</script>
<style lang="scss" scoped>
.home-comment {
  background: #ffffff;
  .title {
    font-size: 18px;
    color: #666;
    font-weight: bold;
    padding: 10px;
    border-bottom: 1px solid #eeeeee;
  }
  .comment-list {
    padding: 10px;
    .comment-item {
      padding: 10px;
      border-bottom: 1px solid #eeeeee;
      .user-content {
        display: flex;
        align-items: center;
        .user {
          font-size: 18px;
          color: #666;
          font-weight: bold;
          line-height: 50px;
          margin-left: 10px;
        }
        .avator {
          width: 50px;
          height: 50px;
          border-radius: 50%;
        }
      }
      .comment {
        margin-top: 10px;
        font-size: 14px;
        color: #888888;
      }
      .create-time {
        margin-top: 15px;
        font-size: 14px;
        color: #888888;
      }
    }
  }
}
</style>
相关推荐
芒果披萨7 分钟前
El表达式和JSTL
java·el
许野平33 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
duration~1 小时前
Maven随笔
java·maven
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
跃ZHD1 小时前
前后端分离,Jackson,Long精度丢失
java
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
暗黑起源喵2 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong2 小时前
Java反射
java·开发语言·反射
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
九圣残炎2 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode