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

news2024/11/24 3:53:23

@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所示:

C:\Users\lenovo\AppData\Local\Temp\WeChat Files\da8dfc62fa46238fbebe4d324ba8419.jpg

图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表

字段名称类型长度字段说明主键默认值
idbigint主键主键
useridbigint用户id
usernamevarchar100用户名
tablenamevarchar100表名
rolevarchar100角色
tokenvarchar200密码
addtimetimestamp新增时间CURRENT_TIMESTAMP
expiratedtimetimestamp过期时间CURRENT_TIMESTAMP

表4-2:关于我们

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
titlevarchar200标题
subtitlevarchar200副标题
contentlongtext4294967295内容
picture1longtext4294967295图片1
picture2longtext4294967295图片2
picture3longtext4294967295图片3

表4-3:收藏表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
useridbigint用户id
refidbigint商品id
tablenamevarchar200表名
namevarchar200名称
picturelongtext4294967295图片
typevarchar200类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注)1
inteltypevarchar200推荐类型
remarkvarchar200备注

表4-4:公告资讯

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
titlevarchar200标题
introductionlongtext4294967295简介
picturelongtext4294967295图片
contentlongtext4294967295内容

表4-5:火车信息

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
chexuhaovarchar200车序号
huocheleixingvarchar200火车类型
checivarchar200车次
qidianzhanvarchar200起点站
zhongdianzhanvarchar200终点站
kaicheshijiandatetime开车时间
daozhanshijiandatetime到站时间
chepiaoleixingvarchar200车票类型
zuoweileixingvarchar200座位类型
liechetupianlongtext4294967295列车图片
chepiaojiageint车票价格
liecheluxianlongtext4294967295列车路线

表4-6:火车类型

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
huocheleixingvarchar200火车类型

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

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
refidbigint关联表id
useridbigint用户id
avatarurllongtext4294967295头像
nicknamevarchar200用户名
contentlongtext4294967295评论内容
replylongtext4294967295回复内容

表4-8:配置文件

字段名称类型长度字段说明主键默认值
idbigint主键主键
namevarchar100配置参数名称
valuevarchar100配置参数值

表4-9:车票预订

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
yudingbianhaovarchar200预订编号
chexuhaovarchar200车序号
huocheleixingvarchar200火车类型
checivarchar200车次
qidianzhanvarchar200起点站
zhongdianzhanvarchar200终点站
kaicheshijiandatetime开车时间
daozhanshijiandatetime到站时间
chepiaoleixingvarchar200车票类型
zuoweileixingvarchar200座位类型
chepiaojiageint车票价格
yudingshijiandatetime预订时间
yudingbeizhulongtext4294967295预订备注
yonghuzhanghaovarchar200用户账号
yonghuxingmingvarchar200用户姓名
sfshvarchar200是否审核待审核
shhflongtext4294967295审核回复
ispayvarchar200是否支付未支付

表4-10:用户

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
yonghuzhanghaovarchar200用户账号
mimavarchar200密码
yonghuxingmingvarchar200用户姓名
xingbievarchar200性别
yonghudianhuavarchar200用户电话
touxianglongtext4294967295头像

表4-11:车票退票

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
tuipiaobianhaovarchar200退票编号
chexuhaovarchar200车序号
huocheleixingvarchar200火车类型
checivarchar200车次
qidianzhanvarchar200起点站
zhongdianzhanvarchar200终点站
kaicheshijiandatetime开车时间
daozhanshijiandatetime到站时间
chepiaoleixingvarchar200车票类型
zuoweileixingvarchar200座位类型
chepiaojiageint车票价格
tuipiaoshijiandatetime退票时间
tuipiaobeizhulongtext4294967295退票备注
yonghuzhanghaovarchar200用户账号
yonghuxingmingvarchar200用户姓名
sfshvarchar200是否审核待审核
shhflongtext4294967295审核回复

表4-12:用户表

字段名称类型长度字段说明主键默认值
idbigint主键主键
usernamevarchar100用户名
passwordvarchar100密码
rolevarchar100角色管理员
addtimetimestamp新增时间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>

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

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

相关文章

计量自动化终端上行通信规约

物理层 TCP 和 UDP 的传输接口 该类接口的登录链接和心跳检测采用链路测试服务&#xff0c;链路测试周期可设定。 参见 TCP/IP 协议规范。 串行通信传输接口 字节传输按异步方式进行&#xff0c;它包含 8 个数据位、1 个起始位“0”、1 个偶校验位 P 和 1 个停止位“1”。 …

SEO优化:如何优化自己的文章,解决搜索引擎不收录的问题

可以使用bing的URL检查&#xff0c;来检查自己的文章是不是负荷收录准测&#xff0c;如果页面有严重的错误&#xff0c;搜索引擎是不会进行收录的&#xff0c;而且还会判定文章为低质量文章&#xff01; 检查是否有问题。下面的页面就是有问题&#xff0c;当然如果是误报你也可…

yolov5和yolov7车牌识别检测(可检测黄牌、绿牌、双层车牌等各种车牌,准确率高,提供界面)

实现一个车牌识别系统&#xff0c;使用YOLOv5和YOLOv7这两种不同的模型来进行车牌的检测。下面我将提供一个完整的项目概述&#xff0c;包括模型训练脚本、车牌识别代码以及两个GUI界面&#xff0c;分别用于处理静态图片和实时视频流 1. 模型训练 YOLOv5 和 YOLOv7 的训练脚本…

Flask条件查询接口出现SQL注入,使用参数化查询:写法的解决方案(附带企业级开发实际例子与经验分享)

背景&#xff1a; 一个接口出现了SQL注入&#xff0c;条件查询场景下出现&#xff0c;形如下图 解决问题时&#xff0c;我们先要问&#xff0c;什么是SQL注入&#xff1f; 下面的资料有助于针对SQL注入是什么、如何验证SQL注入解决成功了&#xff0c;提供一些思路&#xff0c…

【功能自动化】进阶版——使用mysql数据表获取参数,并批量更新数据

环境搭建&#xff1a; 1.需要配置WebTours网站 2.安装pymysql pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql 3.mysql数据表user表内容 实现代码 # 导入包 from selenium import webdriver from selenium.webdriver.support.select import Select f…

Keil C51 插件 检测变量名引用不统一

此插件解决的问题 Keil 插件 -- Python 代码 import chardet, sys, glob import re# 变量名字典 key--数据名 value--数据s类型 variable_dic {} # 报错变量名字典 error_dic {}def add_key(key, value):if key in variable_dic:error_dic[key] valueelse:variable_dic[key…

【js】各类前端输入校验方法

使用方式&#xff1a; 源码&#xff1a; //电话号码 export const checkModbile (rule,value,callback)>{if(value undefined){callback();return;} if(value.length 11){var reg /^1[3,4,5,6,7,8,9][0-9]{9}$/;}else if(value.length 13 || value.length 8 || valu…

SQL 二阶注入 (injection 第二十四关)

简介 SQL注入&#xff08;SQL Injection&#xff09;是一种常见的网络攻击方式&#xff0c;通过向SQL查询中插入恶意的SQL代码&#xff0c;攻击者可以操控数据库&#xff0c;SQL注入是一种代码注入攻击&#xff0c;其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&am…

聚星文社推文软件

聚星文社软件是一款面向作家和读者的社交平台&#xff0c;聚星文社https://iimenvrieak.feishu.cn/docx/ZhRNdEWT6oGdCwxdhOPcdds7nof 致力于为用户提供创作、交流和阅读的全方位服务。 作家可以在平台上发布自己的作品&#xff0c;与读者们进行互动和交流。 读者们则可以在平台…

基于ssm+vue+uniapp的医院挂号预约系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

【气象百科】光伏自动气象站的功能优势

随着全球对可再生能源需求的日益增长&#xff0c;光伏发电作为清洁、可再生的能源形式&#xff0c;正逐步成为推动能源转型的重要力量。而光伏自动气象站&#xff0c;作为光伏电站智能化管理的重要组成部分&#xff0c;其独特的功能优势在提升光伏系统效率、优化运维策略、增强…

安全检测GO内外链跳转页面html源码

源码介绍 一款清新好看的跳转源码&#xff0c;底部自行更换跳转目标地址&#xff0c;可用来预防人机或者进行c验证页面&#xff01; 源码下载 安全检测GO内外链跳转页面html源码

Apache Paimon走在正确的道路上|一些使用体验和未来判断

Apache Paimon这个框架大家应该都不陌生了。 在实际工作中大家应该多多少少都用到&#xff0c;这个文章是一个简单的使用体会。不涉及湖框架的拉踩&#xff0c;我们的着眼点是解决实际问题。 我来结合自身体会跟大家说说Paimon这个框架和对未来的一些判断。大家可以参考&#x…

《系统架构设计师教程(第2版)》第15章-面向服务架构设计理论与实践-03-SOA主要协议和规范

文章目录 1. UDDI协议2. WSDL规范2.1 概述2.2 WSDL文档的基本结构 3. SOAP协议4. REST规范4.1 资源 (Resource)4.2 表述 (Representational)4.3 状态转移 (State Transfer)4.4 超链接 1. UDDI协议 概述 统一描述、发现和集成协议Universal Description Discovery and Integrat…

力扣面试经典算法150题:跳跃游戏

跳跃游戏 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a;跳跃游戏。 题目链接&#xff1a;https://leetcode.cn/problems/jump-game/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个非负整数数组 nums&#xff0c;你最初…

PHPStorm如何使用Phalcon框架的依赖

问题背景 在上一篇文章里面写的如何把Phalcon 集成到PhpStorm里面,发现有个地方讲得不是很清楚,就是在使用Phalcon开发的过程中,会发现没有Phalcon框架的代码提示,这个让人感到很难受,写代码的效率也会降低不少。当时讲得是在项目的外部库下导入依赖源, 然后在写代码的时…

解决Win复制到U盘文件在KylinOS不显示

解决Win复制到U盘文件在KylinOS不显示 1、步骤一&#xff1a;识别U盘2、步骤二&#xff1a;格式化U盘3、步骤三&#xff1a;验证4、注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在日常使用中&#xff0c;我们可能会遇到这样的情…

Sentinel-1 Level 1数据处理的详细算法定义(六)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下: Sentinel-1 L…

Nginx服务优化的12个指南:提升性能与稳定性

Nginx服务优化的12个指南&#xff1a;提升性能与稳定性 一、配置Proxy缓存二、开启静态页面压缩三、调整工作进程个数四、调整CPU亲和力五、修改文件打开数限制六、修改单个Worker的最大连接数七、开启高效传输八、设置连接超时时间九、优化FastCGI配置十、Expires缓存调优十一…

ArrayList练习(学生对象遍历,添加对象并判断是否存在)

package ArrayListDemo;public class Student {//1.私有化成员变量private String name;private int age;public Student() {}public Student(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public void setName(String name)…