👉文末查看项目功能视频演示+获取源码+sql脚本+视频导入教程视频
1 、功能描述
基于ssm的酒店预定管理系统9有两种角色
管理员:客房管理、用户管理、预定管理、开房管理、退房结账等
用户:登录注册、订房退房、评论等
1.1 背景描述
酒店管理系统是为了解决传统酒店管理方式中存在的信息管理不便和效率低下的问题而设计的一种软件系统。传统的酒店管理方式往往依赖手工记录和人工处理,容易出现客房预订混乱、客户信息管理不精准等问题,同时,酒店的运营也相对较为困难。而酒店管理系统的出现能够有效地解决这些问题。该系统提供了客房管理、预订管理、客户管理、订单管理等功能,可以实时记录和管理客房的预订情况,方便酒店工作人员进行客房安排和客户查询。同时,系统还能够帮助酒店进行客房资源管理和业务统计,提高了酒店的运营效率。采用酒店管理系统可以提供更好的客房预订体验,提高酒店的管理水平,为客户提供更便捷、高效的入住服务。
2、项目技术
后端框架:SSM(Spring、SpringMVC、Mybatis)
前端技术:jsp
2.1 SSM
SSM(Spring+SpringMVC+MyBatis)是目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。其中,Spring就像是整个项目中的粘合剂,负责装配bean并管理其生命周期,实现控制反转(IoC)的功能。SpringMVC负责拦截用户请求,通过DispatcherServlet将请求匹配到相应的Controller并执行。而MyBatis则是对JDBC的封装,让数据库底层操作变得透明,通过配置文件关联到各实体类的Mapper文件,实现了SQL语句映射。
2.2 mysql
MySQL是一款Relational Database Management System,直译过来的意思就是关系型数据库管理系统,MySQL有着它独特的特点,这些特点使他成为目前最流行的RDBMS之一,MySQL想比与其他数据库如ORACLE、DB2等,它属于一款体积小、速度快的数据库,重点是它符合本次毕业设计的真实租赁环境,拥有成本低,开发源码这些特点,这也是选择它的主要原因。
3、开发环境
- JAVA版本:JDK1.8(最佳)
- IDE类型:IDEA、Eclipse都可运行
- 数据库类型:MySql(5.7、8.x版本都可)
- tomcat版本:Tomcat 7-10版本均可
- maven版本:无限制
- 硬件环境:Windows
4、功能截图+视频演示+文档目录
4.1 登录
4.2 管理员模块
4.3 用户模块
4.4 前端
4.5文档目录
5 、核心代码实现
5.1 配置代码
validationQuery=SELECT 1
jdbc_url=jdbc:mysql://127.0.0.1:3306/jspmi59uz?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&allowPublicKeyRetrieval=true
jdbc_username=root
jdbc_password=root
#jdbc_url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jspmi59uz
#jdbc_username=sa
#jdbc_password=123456
5.2 其它核心代码
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.JiudiankefangEntity;
import com.entity.view.JiudiankefangView;
import com.service.JiudiankefangService;
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;
import com.service.StoreupService;
import com.entity.StoreupEntity;
/**
* 酒店客房
* 后端接口
* @author
* @email
* @date 2022-04-25 14:54:56
*/
@RestController
@RequestMapping("/jiudiankefang")
public class JiudiankefangController {
@Autowired
private JiudiankefangService jiudiankefangService;
@Autowired
private StoreupService storeupService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,JiudiankefangEntity jiudiankefang,
HttpServletRequest request){
EntityWrapper<JiudiankefangEntity> ew = new EntityWrapper<JiudiankefangEntity>();
PageUtils page = jiudiankefangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiudiankefang), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,JiudiankefangEntity jiudiankefang,
HttpServletRequest request){
EntityWrapper<JiudiankefangEntity> ew = new EntityWrapper<JiudiankefangEntity>();
PageUtils page = jiudiankefangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiudiankefang), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( JiudiankefangEntity jiudiankefang){
EntityWrapper<JiudiankefangEntity> ew = new EntityWrapper<JiudiankefangEntity>();
ew.allEq(MPUtil.allEQMapPre( jiudiankefang, "jiudiankefang"));
return R.ok().put("data", jiudiankefangService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(JiudiankefangEntity jiudiankefang){
EntityWrapper< JiudiankefangEntity> ew = new EntityWrapper< JiudiankefangEntity>();
ew.allEq(MPUtil.allEQMapPre( jiudiankefang, "jiudiankefang"));
JiudiankefangView jiudiankefangView = jiudiankefangService.selectView(ew);
return R.ok("查询酒店客房成功").put("data", jiudiankefangView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
JiudiankefangEntity jiudiankefang = jiudiankefangService.selectById(id);
return R.ok().put("data", jiudiankefang);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
JiudiankefangEntity jiudiankefang = jiudiankefangService.selectById(id);
return R.ok().put("data", jiudiankefang);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody JiudiankefangEntity jiudiankefang, HttpServletRequest request){
jiudiankefang.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jiudiankefang);
jiudiankefangService.insert(jiudiankefang);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody JiudiankefangEntity jiudiankefang, HttpServletRequest request){
jiudiankefang.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(jiudiankefang);
jiudiankefangService.insert(jiudiankefang);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody JiudiankefangEntity jiudiankefang, HttpServletRequest request){
//ValidatorUtils.validateEntity(jiudiankefang);
jiudiankefangService.updateById(jiudiankefang);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
jiudiankefangService.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<JiudiankefangEntity> wrapper = new EntityWrapper<JiudiankefangEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = jiudiankefangService.selectCount(wrapper);
return R.ok().put("count", count);
}
/**
* (按值统计)
*/
@RequestMapping("/value/{xColumnName}/{yColumnName}")
public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
EntityWrapper<JiudiankefangEntity> ew = new EntityWrapper<JiudiankefangEntity>();
List<Map<String, Object>> result = jiudiankefangService.selectValue(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
/**
* (按值统计)时间统计类型
*/
@RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
params.put("timeStatType", timeStatType);
EntityWrapper<JiudiankefangEntity> ew = new EntityWrapper<JiudiankefangEntity>();
List<Map<String, Object>> result = jiudiankefangService.selectTimeStatValue(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
/**
* 分组统计
*/
@RequestMapping("/group/{columnName}")
public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("column", columnName);
EntityWrapper<JiudiankefangEntity> ew = new EntityWrapper<JiudiankefangEntity>();
List<Map<String, Object>> result = jiudiankefangService.selectGroup(params, ew);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
}