项目介绍
随着中国经济的高速发展,很多民营企业逐渐取代了国有企业成为各个行业的龙头,酒店业就是其中的代表,现在越来越多的连锁酒店取代了传统的公有制招待所,成为了人们出行住宿的首选。
该酒店管理系统,实现管理员通过后台管理酒店的员工信息,查看客人预定房间信息,进行楼层、房间等信息的管理。顾客通过此系统,可以查看酒店的房型,房间,并可以在线预定房间信息。
本系统在开发过程中,按照软件开发流程进行开发,系统采用Java语言,选用SSM框架搭建系统代码,实现了前后端的数据分离,让整体逻辑更加清晰,数据库采用Mysql存储数据。
项目运行截图
总结 :
在此次项目的开发过程中收获了很多,不管结果如何,起码自己尽力了。在写项目的过程中学到了很多知识;尤其是思维、逻辑和搭档的沟通都有所提升。
首先分析一下本次项目开发过程中遇到的问题:设计数据库考虑的不是很全面,以至于我们时不时的需要去修改数据库;一修改数据库牵扯了很多代码,后来花了好些时间解决;其次就是功能的实现。当我遇到bug时,会想办法去解决,去翻以前的代码和视频,当解决不了时会和组员们讨论。
很庆幸坚持把项目做了下来,这其中有同学、组员、老师的帮助,感谢大家!
下面是大部分代码设计:
前台设计
1、前台用户实现登录和注册
实体类User
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @Title: 客户
* @ClassName: com.hqyj.pojo.User.java
* @author: szs
* @date: 22-09-02 12:52
*
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String loginName;
private String password;
private String realName;
private String idCard;
private String phone;
private String email;
private Integer status;
private Date createDate;
private String salt;
}
实体类Room
public class Room {
private Integer id;
private String photo;
private String roomnum;
private Integer roomtypeid;
private Integer floorid;
//房间状态(1-已预订 2-已入住 3-可预订)
private Integer status;
private String roomrequirement;
private String remark;
private String roomdesc;
//房型名称
private String typeName;
//楼层名称
private String floorName;
//状态字符串
private String statusStr;
//床位数
private Integer bedNum;
//房型价格
private Double price;
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Integer getBedNum() {
return bedNum;
}
public void setBedNum(Integer bedNum) {
this.bedNum = bedNum;
}
public String getStatusStr() {
//判断状态是否为空
if(status!=null){
switch (status){
case 1:
statusStr = "已预订";
break;
case 2:
statusStr = "已入住";
break;
case 3:
statusStr = "可预订";
break;
}
}
return statusStr;
}
public void setStatusStr(String statusStr) {
this.statusStr = statusStr;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public String getFloorName() {
return floorName;
}
public void setFloorName(String floorName) {
this.floorName = floorName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public String getRoomnum() {
return roomnum;
}
public void setRoomnum(String roomnum) {
this.roomnum = roomnum;
}
public Integer getRoomtypeid() {
return roomtypeid;
}
public void setRoomtypeid(Integer roomtypeid) {
this.roomtypeid = roomtypeid;
}
public Integer getFloorid() {
return floorid;
}
public void setFloorid(Integer floorid) {
this.floorid = floorid;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getRoomrequirement() {
return roomrequirement;
}
public void setRoomrequirement(String roomrequirement) {
this.roomrequirement = roomrequirement;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getRoomdesc() {
return roomdesc;
}
public void setRoomdesc(String roomdesc) {
this.roomdesc = roomdesc;
}
}
实体类RoomType
public class RoomType {
private Integer id;
private String typename;
private String photo;
private Double price;
private Integer livenum;
private Integer bednum;
private Integer roomnum;
private Integer reservednum;
private Integer avilablenum;
private Integer livednum;
private Integer status;
private String remark;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTypename() {
return typename;
}
public void setTypename(String typename) {
this.typename = typename;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Integer getLivenum() {
return livenum;
}
public void setLivenum(Integer livenum) {
this.livenum = livenum;
}
public Integer getBednum() {
return bednum;
}
public void setBednum(Integer bednum) {
this.bednum = bednum;
}
public Integer getRoomnum() {
return roomnum;
}
public void setRoomnum(Integer roomnum) {
this.roomnum = roomnum;
}
public Integer getReservednum() {
return reservednum;
}
public void setReservednum(Integer reservednum) {
this.reservednum = reservednum;
}
public Integer getAvilablenum() {
return avilablenum;
}
public void setAvilablenum(Integer avilablenum) {
this.avilablenum = avilablenum;
}
public Integer getLivednum() {
return livednum;
}
public void setLivednum(Integer livednum) {
this.livednum = livednum;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
实体类Floor
public class Floor {
private Integer id;
private String name;
private String remark;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
实体类Orders
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class Orders {
private Integer id;//订单主键
private String ordersno;//订单号
private Integer accountid;//用户id
private Integer roomtypeid;//房型ID
private Integer roomid;//房间ID
private String reservationname;//预订人姓名
private String idcard;//身份证号码
private String phone;//电话
private Integer status;//订单状态 1-待确认 2-已确认 3-已入住
//@JSONField(format = "yyyy-MM-dd HH:mm:ss") //阿里巴巴
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") //jackson
private Date reservedate;//预订时间
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date arrivedate;//入住时间
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date leavedate;//离店时间
private Double reserveprice;//预订房价
private String remark;//备注
//房间对象
private Room room;
//房型对象
private RoomType roomType;
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
public RoomType getRoomType() {
return roomType;
}
public void setRoomType(RoomType roomType) {
this.roomType = roomType;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrdersno() {
return ordersno;
}
public void setOrdersno(String ordersno) {
this.ordersno = ordersno;
}
public Integer getAccountid() {
return accountid;
}
public void setAccountid(Integer accountid) {
this.accountid = accountid;
}
public Integer getRoomtypeid() {
return roomtypeid;
}
public void setRoomtypeid(Integer roomtypeid) {
this.roomtypeid = roomtypeid;
}
public Integer getRoomid() {
return roomid;
}
public void setRoomid(Integer roomid) {
this.roomid = roomid;
}
public String getReservationname() {
return reservationname;
}
public void setReservationname(String reservationname) {
this.reservationname = reservationname;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Date getReservedate() {
return reservedate;
}
public void setReservedate(Date reservedate) {
this.reservedate = reservedate;
}
public Date getArrivedate() {
return arrivedate;
}
public void setArrivedate(Date arrivedate) {
this.arrivedate = arrivedate;
}
public Date getLeavedate() {
return leavedate;
}
public void setLeavedate(Date leavedate) {
this.leavedate = leavedate;
}
public Double getReserveprice() {
return reserveprice;
}
public void setReserveprice(Double reserveprice) {
this.reserveprice = reserveprice;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
UserController.java
import com.alibaba.fastjson.JSON;
import com.hqyj.pojo.User;
import com.hqyj.service.impl.UserServiceImpl;
import com.hqyj.utils.SystemConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserServiceImpl userService;
/**
* @param user
* @Title: 注册
* @MethodName: register
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 13:39
*/
@RequestMapping("/register")
@ResponseBody
public String register(User user) {
//创建Map集合,保存结果信息
Map<String, Object> map = new HashMap<String, Object>();
//调用注册方法
if (userService.addUser(user) > 0) {
map.put(SystemConstant.SUCCESS, true);
map.put(SystemConstant.MESSAGE, "恭喜你注册成功!");
} else {
map.put(SystemConstant.SUCCESS, false);
map.put(SystemConstant.MESSAGE, "注册失败,请重新注册!");
}
return JSON.toJSONString(map);
}
/**
* @param loginName
* @Title: 根据用户名查询用户
* @MethodName: checkName
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 14:19
*/
@RequestMapping("/checkName")
@ResponseBody
public String checkName(String loginName) {
//创建Map集合,保存结果信息
Map<String, Object> map = new HashMap<String, Object>();
if (userService.findUserByName(loginName) != null) {
map.put(SystemConstant.EXIST, true);
map.put(SystemConstant.MESSAGE, "用户名已存在,请重新输入!");
} else {
map.put(SystemConstant.EXIST, false);
}
return JSON.toJSONString(map);
}
/**
* @param loginName
* @Title: 登录
* @MethodName: login
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 15:22
*/
@RequestMapping("/login")
@ResponseBody
public String login(String loginName, String password, HttpSession session) {
//创建Map集合,保存结果信息
Map<String, Object> map = new HashMap<String, Object>();
//调用登录方法
User currentUser = userService.login(loginName, password);
//判断对象是否为空
if (currentUser != null) {
map.put(SystemConstant.SUCCESS, true);
currentUser.setPassword(null);//清空密码
//保存用户信息
session.setAttribute(SystemConstant.FRONT_LOGIN_USER, currentUser);
} else {
map.put(SystemConstant.SUCCESS, false);
map.put(SystemConstant.MESSAGE, "用户名或密码错误!");
}
return JSON.toJSONString(map);
}
}
UserMapper.java
/**
* @Title: 添加用户
* @ClassName: com.hqyj.mapper.UserMapper.java
* @author: szs
* @date: 22-09-02 12:54
*
*/
public interface UserMapper {
/**
* @Title: 添加用户
* @MethodName: addUser
* @param user
* @Return int
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 14:12
*/
int addUser(User user);
/**
* @Title: 根据用户名查询用户信息
* @MethodName: findUserByName
* @param loginName
* @Return com.hqyj.pojo.User
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 14:13
*/
User findUserByName(String loginName);
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hqyj.mapper.UserMapper">
<insert id="addUser">
insert into t_user(loginName,password,realName,idCard,phone,email,status,createDate,salt
) values (#{loginName},#{password},#{realName},#{idCard},#{phone},#{email},#{status},#{createDate},#{salt})
</insert>
<select id="findUserByName" resultType="user">
select * from t_user where loginName = #{loginName}
</select>
</mapper>
UserService.java
public interface UserService {
//添加用户
int addUser(User user);
//根据用户名查询用户信息
User findUserByName(String loginName);
/**
* @Title: 登录
* @MethodName: login
* @param loginName
* @param password
* @Return com.hqyj.pojo.User
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 15:14
*/
User login(String loginName,String password);
}
UserServiceImpl.java
import com.hqyj.mapper.UserMapper;
import com.hqyj.pojo.User;
import com.hqyj.service.UserService;
import com.hqyj.utils.PasswordUtil;
import com.hqyj.utils.SystemConstant;
import com.hqyj.utils.UUIDUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
/**
* @Title: 添加用户
* @MethodName: addUser
* @param user
* @Return int
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 13:20
*/
public int addUser(User user) {
//自动生成盐值
user.setSalt(UUIDUtils.randomUUID());//shiro安全验证框架
//密码加密
user.setPassword(PasswordUtil.md5(user.getPassword(), user.getSalt(), SystemConstant.PASSWORD_COUNT));
return userMapper.addUser(user);
}
/**
* @Title: 根据用户名查询用户
* @MethodName: findUserByName
* @param loginName
* @Return com.hqyj.pojo.User
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 14:17
*/
@Override
public User findUserByName(String loginName) {
return userMapper.findUserByName(loginName);
}
/**
* @Title: 用户登录
* @MethodName: login
* @param loginName
* @param password
* @Return com.hqyj.pojo.User
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 15:21
*/
@Override
public User login(String loginName, String password) {
User loginUser = userMapper.findUserByName(loginName);
//判断用户是否为空
if (loginUser != null) {
//密码加密
String newPassword = PasswordUtil.md5(password, loginUser.getSalt(), SystemConstant.PASSWORD_COUNT);
//比较密码是否相等
if (loginUser.getPassword().equals(newPassword)) {
return loginUser;
}
}return null;
}
}
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en" class="fly-html-layui fly-html-store">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/layui/dist/css/layui.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/global.css" charset="utf-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/global(1).css" charset="utf-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/store.css" charset="utf-8">
<link rel="icon" href="${pageContext.request.contextPath}/static/front/images/favicon.ico">
<title>酒店管理系统</title>
</head>
<body>
<!-- 顶部start -->
<div class="layui-header header header-store" style="background-color: #393D49;">
<div class="layui-container">
<a class="logo" href="index.html">
<img src="${pageContext.request.contextPath}/static/front/images/logo.png" alt="layui">
</a>
<div class="layui-form component" lay-filter="LAY-site-header-component"></div>
<ul class="layui-nav" id="layui-nav-userinfo">
<li data-id="index" class="layui-nav-item layui-hide-xs"><a class="fly-case-active" data-type="toTopNav"
href="/index.html">首页</a></li>
<li data-id="room" class="layui-nav-item layui-hide-xs"><a class="fly-case-active"
data-type="toTopNav"
href="/room/list.html">房间</a></li>
<li data-id="login" class="layui-nav-item layui-hide-xs layui-this"><a class="fly-case-active"
data-type="toTopNav"
href="/login.jsp">登入</a></li>
<li data-id="register" class="layui-nav-item layui-hide-xs "><a class="fly-case-active" data-type="toTopNav"
href="/register.jsp">注册</a></li>
<span class="layui-nav-bar" style="left: 560px; top: 55px; width: 0px; opacity: 0;"></span></ul>
</div>
</div>
<!-- 顶部end -->
<!-- 中间区域开始 -->
<div class="shop-nav shop-index">
<!--搜索 start-->
<div id="LAY-topbar" style="height: auto;">
<form class="layui-form layuimini-form">
<div class="input-search">
<div id="searchRoom"><input type="text" placeholder="搜索你需要的房间" name="keywords" id="searchKeywords"
autocomplete="off" value="">
<button class="layui-btn layui-btn-shop" lay-submit="" lay-filter="searchHotelRoom"
style="background-color: #009688"><i
class="layui-icon layui-icon-search"></i></button>
</div>
<div class="layui-container layui-hide-xs"><a href="#" class="topbar-logo"> <img
src="${pageContext.request.contextPath}/static/front/images/logo-1.png" alt="layui"> </a></div>
</div>
</form>
</div>
<!--搜索 end-->
</div>
<!-- 中间区域结束 -->
<!-- 登录start -->
<div class="layui-container shopdata">
<div class="layui-card shopdata-intro">
<div class=" login-content">
<!--登录 start-->
<div class="login-bg">
<div class="login-cont w1200">
<div class="form-box">
<form class="layui-form" action="">
<legend>前台用户登录</legend>
<div class="layui-form-item">
<div class="layui-inline iphone">
<div class="layui-input-inline">
<i class="layui-icon layui-icon-user iphone-icon"></i>
<input type="tel" name="loginName" id="phone" lay-verify="required"
lay-reqText="请输入登录用户名" placeholder="请输入登录用户名" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-inline iphone">
<div class="layui-input-inline">
<i class="layui-icon layui-icon-password iphone-icon"></i>
<input id="pnum" type="password" name="password" lay-verify="required"
lay-reqText="请输入登录密码" placeholder="请输入登录密码" autocomplete="off"
class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item login-btn">
<div class="layui-input-block">
<button class="layui-btn" lay-submit="" lay-filter="login"
style="background-color: #009688">登录
</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!--登录 end-->
</div>
</div>
</div>
<!-- 登录end -->
<!-- 底部 -->
<div class="fly-footer">
<p><a href="#">酒店系统</a> 2020 © <a href="#">test.cn</a></p>
<p>
友情链接
<a href="http://java.goodym.cn" target="_blank">java项目源码分享网</a>
<a href="http://www.goodym.cn/code/list/all/1/20.html" target="_blank">源码下载平台</a>
<a href="http://www.goodym.cn/market/list/all/1/20.html" target="_blank">源码市场</a>
<a href="http://www.goodym.cn/resumetemplate/list/1/20.html" target="_blank">简历制作</a>
<a href="http://www.goodym.cn/forum/list/0/1/20.html" target="_blank">社区论坛</a></p>
</div>
<!-- 脚本开始 -->
<script src="${pageContext.request.contextPath}/static/front/layui/dist/layui.js"></script>
<script>
layui.use(["form", "element", "carousel"], function () {
var form = layui.form,
layer = layui.layer,
element = layui.element,
carousel = layui.carousel,
$ = layui.$;
//渲染轮播图
carousel.render({
elem: '#LAY-store-banner'
, width: '100%' //设置容器宽度
, height: '460' //设置容器高度
, arrow: 'always' //始终显示箭头
});
//登录
form.on("submit(login)", function (data) {
$.post("/user/login", data.field, function (result) {
if (result.success) {
//跳转到首页
location.href = "/";
} else {
layer.alert(result.message, {icon: 5});
}
}, "json");
return false;
});
});
</script>
<!-- 脚本结束 -->
<ul class="layui-fixbar">
<li class="layui-icon layui-fixbar-top" lay-type="top" style=""></li>
</ul>
<div class="layui-layer-move"></div>
</body>
</html>
regisetr.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en" class="fly-html-layui fly-html-store">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/layui/dist/css/layui.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/global.css" charset="utf-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/global(1).css" charset="utf-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/store.css" charset="utf-8">
<link rel="icon" href="${pageContext.request.contextPath}/static/front/images/favicon.ico">
<title>酒店管理系统</title>
</head>
<body>
<!-- 顶部start -->
<div class="layui-header header header-store" style="background-color: #393D49;">
<div class="layui-container">
<a class="logo" href="index.html">
<img src="${pageContext.request.contextPath}/static/front/images/logo.png" alt="layui">
</a>
<div class="layui-form component" lay-filter="LAY-site-header-component"></div>
<ul class="layui-nav" id="layui-nav-userinfo">
<li data-id="index" class="layui-nav-item layui-hide-xs"><a class="fly-case-active"
data-type="toTopNav"
href="/index.html">首页</a>
</li>
<li data-id="room" class="layui-nav-item layui-hide-xs"><a class="fly-case-active"
data-type="toTopNav"
href="/room/list.html">房间</a></li>
<li data-id="login" class="layui-nav-item layui-hide-xs "><a class="fly-case-active" data-type="toTopNav"
href="/login.jsp">登入</a></li>
<li data-id="register" class="layui-nav-item layui-hide-xs layui-this"><a class="fly-case-active"
data-type="toTopNav"
href="/register.jsp">注册</a></li>
<span class="layui-nav-bar" style="left: 560px; top: 55px; width: 0px; opacity: 0;"></span></ul>
</div>
</div>
<!-- 顶部end -->
<!-- 中间区域开始 -->
<div class="shop-nav shop-index">
<!--搜索 start-->
<div id="LAY-topbar" style="height: auto;">
<form class="layui-form layuimini-form">
<div class="input-search">
<div id="searchRoom"><input type="text" placeholder="搜索你需要的房间" name="keywords" id="searchKeywords"
autocomplete="off" value="">
<button class="layui-btn layui-btn-shop" lay-submit="" lay-filter="searchHotelRoom"
style="background-color: #009688"><i
class="layui-icon layui-icon-search"></i></button>
</div>
<div class="layui-container layui-hide-xs"><a href="#" class="topbar-logo"> <img
src="${pageContext.request.contextPath}/static/front/images/logo-1.png" alt="layui"> </a></div>
</div>
</form>
</div>
<!--搜索 end-->
</div>
<!-- 中间区域结束 -->
<!-- 注册start -->
<div class="layui-container shopdata">
<div class="layui-card shopdata-intro">
<div class=" login-content">
<!--登录 start-->
<div class="login-bg">
<div class="login-cont w1200">
<div class="form-box">
<form class="layui-form" action="">
<legend>用户注册</legend>
<div class="layui-form-item">
<div class="layui-inline iphone">
<div class="layui-input-inline">
<i class="layui-icon layui-icon-user iphone-icon"></i>
<input type="text" name="loginName" id="mNickname" lay-verify="required"
lay-reqText="请输入昵称" placeholder="请输入昵称" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-inline iphone">
<div class="layui-input-inline">
<i class="layui-icon layui-icon-cellphone iphone-icon"></i>
<input type="tel" name="phone" id="phone" lay-verify="required|phone"
lay-reqText="请输入手机号" placeholder="请输入手机号" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-inline iphone">
<div class="layui-input-inline">
<i class="layui-icon layui-icon-password iphone-icon"></i>
<input id="pnum" type="password" name="password" lay-verify="required"
lay-reqText="请输入登录密码" placeholder="请输入登录密码" autocomplete="off"
class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item login-btn">
<div class="layui-input-block">
<button class="layui-btn" style="background-color: #009688" lay-submit=""
lay-filter="register">提交
</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!--登录 end-->
</div>
</div>
</div>
<!-- 登注册end -->
<!-- 底部 -->
<div class="fly-footer">
<p><a href="#">酒店系统</a> 2020 © <a href="#">test.cn</a></p>
<p>
友情链接
<a href="http://java.goodym.cn" target="_blank">java项目源码分享网</a>
<a href="http://www.goodym.cn/code/list/all/1/20.html" target="_blank">源码下载平台</a>
<a href="http://www.goodym.cn/market/list/all/1/20.html" target="_blank">源码市场</a>
<a href="http://www.goodym.cn/resumetemplate/list/1/20.html" target="_blank">简历制作</a>
<a href="http://www.goodym.cn/forum/list/0/1/20.html" target="_blank">社区论坛</a></p>
</div>
<!-- 脚本开始 -->
<script src="${pageContext.request.contextPath}/static/front/layui/dist/layui.js"></script>
<script>
layui.use(["form", "element", "carousel"], function () {
var form = layui.form,
layer = layui.layer,
element = layui.element,
carousel = layui.carousel,
$ = layui.$;
//渲染轮播图
carousel.render({
elem: '#LAY-store-banner'
, width: '100%' //设置容器宽度
, height: '460' //设置容器高度
, arrow: 'always' //始终显示箭头
});
var flag = false;//定义变量,用户是否存在
//当用户名输入框失去焦点事件触发验证
$("#mNickname").blur(function () {
//获取用户名
var loginName = $("#mNickname").val().trim();
//判断用户名是否为空,不为空发送请求验证
if (loginName.length>0) {
$.get("/user/checkName", {"loginName": loginName}, function (result) {
if (result.exist) {
layer.alert(result.message, {icon: 5});
//修改状态为true,表示用户已经存在
flag = true;
}else {
flag = false;//用户不存在
}
}, "json");
}
});
//表单提交时间
form.on("submit(register)", function (data) {
//判断是否存在
if (flag) {
layer.alert("用户已经存在,请重新输入",{icon:5});
}else {
//发送请求
$.post("/user/register", data.field, function (result) {
if (result.success) {
layer.alert(result.message, {icon: 6});
} else {
layer.alert(result.message, {icon: 5});
}
}, "json");
}
return false;
});
});
</script>
<!-- 脚本结束 -->
<ul class="layui-fixbar">
<li class="layui-icon layui-fixbar-top" lay-type="top" style=""></li>
</ul>
<div class="layui-layer-move"></div>
</body>
</html>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en" class="fly-html-layui fly-html-store">
<head>
<body>
<script>
location.href = "/index.html";
</script>
</body>
</html>
home.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en" class="fly-html-layui fly-html-store">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/layui/dist/css/layui.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/global.css" charset="utf-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/global(1).css" charset="utf-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/front/css/store.css" charset="utf-8">
<link rel="icon" href="${pageContext.request.contextPath}/static/front/images/favicon.ico">
<title>首页-酒店管理系统</title>
<body>
<!-- 顶部start -->
<div class="layui-header header header-store" style="background-color: #393D49;">
<div class="layui-container">
<a class="logo" href="index.html">
<img src="${pageContext.request.contextPath}/static/front/images/logo.png" alt="layui">
</a>
<div class="layui-form component" lay-filter="LAY-site-header-component"></div>
<ul class="layui-nav" id="layui-nav-userinfo">
<li data-id="index" class="layui-nav-item layui-hide-xs layui-this"><a class="fly-case-active"
data-type="toTopNav"
href="/index.html">首页</a>
</li>
<li data-id="room" class="layui-nav-item layui-hide-xs"><a class="fly-case-active"
data-type="toTopNav"
href="/room/list.html">房间</a></li>
<li data-id="login" class="layui-nav-item layui-hide-xs "><a class="fly-case-active" data-type="toTopNav"
href="/login.jsp">登入</a></li>
<li data-id="register" class="layui-nav-item layui-hide-xs "><a class="fly-case-active" data-type="toTopNav"
href="/register.jsp">注册</a></li>
<span class="layui-nav-bar" style="left: 560px; top: 55px; width: 0px; opacity: 0;"></span></ul>
</div>
</div>
<!-- 顶部end -->
<!-- 中间区域开始 -->
<div class="shop-nav shop-index">
<!--搜索 start-->
<div id="LAY-topbar" style="height: auto;">
<form class="layui-form layuimini-form">
<div class="input-search">
<div id="searchRoom"><input type="text" placeholder="搜索你需要的房间" name="keywords" id="searchKeywords"
autocomplete="off" value="">
<button class="layui-btn layui-btn-shop" lay-submit="" lay-filter="searchHotelRoom"
style="background-color: #009688"><i
class="layui-icon layui-icon-search"></i></button>
</div>
<div class="layui-container layui-hide-xs"><a href="#" class="topbar-logo"> <img
src="${pageContext.request.contextPath}/static/front/images/logo-1.png" alt="layui"> </a></div>
</div>
</form>
</div>
<!--搜索 end-->
<div class="shop-banner">
<!-- 左侧导航开始 -->
<div class="layui-container layui-hide-xs">
<div class="product-list">
<dl id="getIndexRoomType">
<dt style="background-color: #009688"><a href="lists.html" target="_blank">房间分类</a></dt>
<c:forEach var="roomType" items="${roomTypeList}">
<dd data-id="${roomType.id}">
<a class="fly-case-active" href="/room/list/${roomType.id}"
data-type="toRoomTypeList">${roomType.typename}</a>
</dd>
</c:forEach>
</dl>
</div>
</div>
<!-- 左侧导航结束 -->
<!-- 轮播图开始 -->
<div class="layui-carousel" lay-filter="LAY-store-banner" id="LAY-store-banner" lay-anim lay-indicator="inside">
<div carousel-item>
<div class="">
<div class="layui-container"><a href="javascript:;" target="_blank"> <img
src="${pageContext.request.contextPath}/static/front/images/2.jpg"
alt="酒店系统"> </a></div>
</div>
<div class="">
<div class="layui-container"><a href="javascript:;" target="_blank"> <img
src="${pageContext.request.contextPath}/static/front/images/3.jpg"
alt="酒店系统"> </a></div>
</div>
<div class="layui-this">
<div class="layui-container"><a href="javascript:;" target="_blank"> <img
src="${pageContext.request.contextPath}/static/front/images/4.jpg"
alt="酒店系统"> </a></div>
</div>
<div class="">
<div class="layui-container"><a href="javascript:;" target="_blank"> <img
src="${pageContext.request.contextPath}/static/front/images/5.jpg"
alt="酒店系统"> </a></div>
</div>
<div class="">
<div class="layui-container"><a href="javascript:;" target="_blank"> <img
src="${pageContext.request.contextPath}/static/front/images/1.jpg"
alt="酒店系统"> </a></div>
</div>
<div class="">
<div class="layui-container"><a href="javascript:;" target="_blank"> <img
src="${pageContext.request.contextPath}/static/front/images/6.jpg"
alt="酒店系统"> </a></div>
</div>
</div>
<div class="layui-carousel-ind">
<ul>
<li class=""></li>
<li class=""></li>
<li class="layui-this"></li>
<li class=""></li>
<li class=""></li>
<li class=""></li>
</ul>
</div>
<button class="layui-icon layui-carousel-arrow" lay-type="sub"></button>
<button class="layui-icon layui-carousel-arrow" lay-type="add"></button>
</div>
<!-- 轮播图结束 -->
<!-- 酒店楼层开始 -->
<div class="shop-temp" id="getIndexFloor">
<c:forEach var="floor" items="${floorList}" varStatus="status">
<%--判断当前下标是否是偶数行--%>
<c:if test="${status.index%2==0}">
<div class="temp-hot">
</c:if>
<%--判断当前下标是否是奇数行--%>
<c:if test="${status.index%2!=0}">
<div class="temp-normal" style="background-color: #f2f2f2">
</c:if>
<div class="layui-container">
<p class="temp-title-cn"><span></span>酒店${floor.name}<span></span></p>
<div class="layui-row layui-col-space20">
<c:forEach var="room" items="${roomList}">
<c:if test="${room.floorid == floor.id}">
<div data-id="${room.id}" class="layui-col-xs6 layui-col-md3">
<a class="template store-list-box fly-case-active" href="/room/${room.id}.html"
data-type="toRoomInfo">
<img src="/hotel/show/${room.photo}"
class="store-list-cover">
<h2 class="layui-elip">${room.typeName}</h2>
<p class="price"><span title="金额"> ¥${room.price} </span> <span title="房号"
style="color: #fff;background: #0e88cc;padding: 3px;text-align: center;border: 1px solid #4cffb3;font-size: 13px;"> NO.${room.roomnum} </span>
</p>
</a>
</div>
</c:if>
</c:forEach>
</div>
</div>
</div>
</c:forEach>
<!-- 酒店楼层结束 -->
</div>
</div>
<!-- 中间区域结束 -->
<!-- 底部 -->
<div class="fly-footer">
<p><a href="#">酒店系统</a> 2020 © <a href="#">test.cn</a></p>
<p>
友情链接
<a href="http://java.goodym.cn" target="_blank">java项目源码分享网</a>
<a href="http://www.goodym.cn/code/list/all/1/20.html" target="_blank">源码下载平台</a>
<a href="http://www.goodym.cn/market/list/all/1/20.html" target="_blank">源码市场</a>
<a href="http://www.goodym.cn/resumetemplate/list/1/20.html" target="_blank">简历制作</a>
<a href="http://www.goodym.cn/forum/list/0/1/20.html" target="_blank">社区论坛</a></p>
</div>
<!-- 脚本开始 -->
<script src="${pageContext.request.contextPath}/static/front/layui/dist/layui.js"></script>
<script>
layui.use(["form", "element", "carousel"], function () {
var form = layui.form,
layer = layui.layer,
element = layui.element,
carousel = layui.carousel,
$ = layui.$;
//渲染轮播图
carousel.render({
elem: '#LAY-store-banner'
, width: '100%' //设置容器宽度
, height: '460' //设置容器高度
, arrow: 'always' //始终显示箭头
});
});
</script>
<!-- 脚本结束 -->
<ul class="layui-fixbar">
<li class="layui-icon layui-fixbar-top" lay-type="top" style=""></li>
</ul>
<div class="layui-layer-move"></div>
</div>
</div>
</body>
</html>
前台首页
IndexController.java
import com.hqyj.pojo.Floor;
import com.hqyj.pojo.Room;
import com.hqyj.pojo.RoomType;
import com.hqyj.service.FloorService;
import com.hqyj.service.RoomService;
import com.hqyj.service.RoomTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
/**
* @Title: 首页
* @ClassName: com.hqyj.controllers.IndexController.java
* @author: szs
* @date: 22-09-02 16:19
*/
@Controller
public class IndexController {
@Autowired
private RoomTypeService roomTypeService;
@Autowired
private FloorService floorService;
@Autowired
private RoomService roomService;
/**
* @param model
* @Title: 首页
* @MethodName: index
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 16:19
*/
@RequestMapping({"/","index.html"})
public String index(Model model) {
//调用查询房型列表的方法
List<RoomType> roomTypeList = roomTypeService.findRoomTypeList(null);
//调用查询所有楼层的方法
List<Floor> floorList = floorService.findFloorList(null);
//创建集合保存房间列表
//调用查询每个楼层的房间列表
List<Room> roomList = roomService.findRoomListByFloorId();
model.addAttribute("roomList", roomList);
//将数据放入到model中
model.addAttribute("roomTypeList", roomTypeList);
model.addAttribute("floorList", floorList);
return "forward:/home.jsp";
}
}
查看房间
RoomController.java
import com.hqyj.pojo.Room;
import com.hqyj.pojo.RoomType;
import com.hqyj.service.RoomService;
import com.hqyj.service.RoomTypeService;
import com.hqyj.vo.RoomVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
@RequestMapping("/room")
public class RoomController {
@Autowired
private RoomService roomService;
@Autowired
private RoomTypeService roomTypeService;
/**
* @param id
* @Title: 查看房间详情
* @MethodName: detail
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-02 22:12
*/
@RequestMapping("/{id}.html")
public String detail(@PathVariable Integer id, Model model) {
Room room = roomService.findById(id);
model.addAttribute("room", room);
return "detail";
}
/**
* @Title: 查询房间列表
* @MethodName: list
* @param model
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-03 0:23
*/
@RequestMapping("/list.html")
public String list(Model model) {
List<RoomType> roomTypeList = roomTypeService.findRoomTypeList(null);
//创建查询条件类
RoomVo roomVo = new RoomVo();
roomVo.setStatus(3);//可以预定
//查询房间列表
List<Room> roomList = roomService.findRoomListByPage(null);
//将数据放入到模型中
model.addAttribute("roomTypeList", roomTypeList);
model.addAttribute("roomList", roomList);
model.addAttribute("typeId",null);
return "hotelList";
}
/**
* @param model
* @param id
* @Title: 根据房型查询房间列表
* @MethodName: list
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-03 0:18
*/
@RequestMapping("/list/{id}")
public String list(Model model, @PathVariable Integer id) {
List<RoomType> roomTypeList = roomTypeService.findRoomTypeList(null);
//创建查询条件类
RoomVo roomVo = new RoomVo();
roomVo.setRoomtypeid(id);//房型id
roomVo.setStatus(3);
//查询房间列表
List<Room> roomList = roomService.findRoomListByPage(roomVo);
//将数据放入到模型中
model.addAttribute("roomTypeList", roomTypeList);
model.addAttribute("roomList", roomList);
model.addAttribute("typeId",id);//将当前选中的房型id保存到模型中,目的是在页面中回显选中的文本
return "hotelList";
}
}
RoomMapper.java
import com.hqyj.pojo.Room;
import com.hqyj.vo.RoomVo;
import java.util.List;
public interface RoomMapper {
/**
* 查询房间列表
* @param roomVo
* @return
*/
List<Room> findRoomListByPage(RoomVo roomVo);
/**
* 添加房间
* @param room
* @return
*/
int addRoom(Room room);
/**
* 修改房间
* @param room
* @return
*/
int updateRoom(Room room);
/**
* 删除房间
* @param id
* @return
*/
int deleteById(int id);
/**
* 根据楼层查询房间列表
* @return
*/
List<Room> findRoomListByFloorId();
/**
* 查看房间详情
* @param id
* @return
*/
Room findById(Integer id);
}
RoomMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hqyj.mapper.RoleMapper">
<select id="findRoleList" resultType="role">
select * from sys_role
<where>
<if test="roleName!=null and roleName!=''">
and roleName like concat('%',#{roleName},'%')
</if>
</where>
</select>
<insert id="addRole">
insert into sys_role (roleName,roleDesc) values(#{roleName},#{roleDesc})
</insert>
<update id="updateRole">
update sys_role
<set>
<if test="roleName!=null and roleName!=''">
roleName = #{roleName},
</if>
<if test="roleDesc!=null and roleDesc!=''">
roleDesc = #{roleDesc},
</if>
</set>
where id = #{id}
</update>
<delete id="deleteById">
delete from sys_role where id = #{id}
</delete>
<select id="findRoleListByMap" resultType="map">
select * from sys_role
</select>
<select id="findEmployeeRoleByEmployeeId" resultType="int">
select rid from sys_role_employee where eid = #{employeeId}
</select>
</mapper>
RoomServiceImpl.java
import com.hqyj.pojo.Room;
import com.hqyj.vo.RoomVo;
import java.util.List;
public interface RoomService {
/**
* 查询房间列表
* @param roomVo
* @return
*/
List<Room> findRoomListByPage(RoomVo roomVo);
/**
* 添加房间
* @param room
* @return
*/
int addRoom(Room room);
/**
* 修改房间
* @param room
* @return
*/
int updateRoom(Room room);
/**
* 删除房间
* @param id
* @return
*/
int deleteById(int id);
/**
* 根据楼层查询房间列表
* @return
*/
List<Room> findRoomListByFloorId();
/**
* 查看房间详情
* @param id
* @return
*/
Room findById(Integer id);
}
RoomTypeMapper.java
import com.hqyj.pojo.RoomType;
import com.hqyj.vo.RoomTypeVo;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface RoomTypeMapper {
/**
* 查询房型列表
* @param roomTypeVo
* @return
*/
List<RoomType> findRoomTypeList(RoomTypeVo roomTypeVo);
/**
* 添加房型
* @param roomType
* @return
*/
int addRoomType(RoomType roomType);
/**
* 修改房型
* @param roomType
* @return
*/
int updateRoomType(RoomType roomType);
/**
* 根据房型ID查询房型信息
* @param roomtypeid
* @return
*/
@Select("select * from t_room_type where id = #{id}")
RoomType findById(Integer roomtypeid);
}
RoomTypeMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hqyj.mapper.RoomTypeMapper">
<select id="findRoomTypeList" resultType="roomType">
select * from t_room_type
<where>
<if test="typename!=null and typename!=''">
and typename like concat('%',#{typename},'%')
</if>
</where>
</select>
<insert id="addRoomType">
insert into t_room_type (typename,photo,price,livenum,bednum,roomnum,reservednum,avilablenum,livednum,status,remark)
values(#{typename},#{photo},#{price},#{livenum},#{bednum},#{roomnum},#{reservednum},#{avilablenum},#{livednum},#{status},#{remark})
</insert>
<update id="updateRoomType">
update t_room_type
<set>
<if test="typename!=null and typename!=''">
typename = #{typename},
</if>
<if test="photo!=null and photo!=''">
photo = #{photo},
</if>
<if test="price!=null">
price = #{price},
</if>
<if test="livenum!=null">
livenum = #{livenum},
</if>
<if test="bednum!=null">
bednum = #{bednum},
</if>
<if test="roomnum!=null">
roomnum = #{roomnum},
</if>
<if test="reservednum!=null">
reservednum = #{reservednum},
</if>
<if test="avilablenum!=null">
avilablenum = #{avilablenum},
</if>
<if test="livednum!=null">
livednum = #{livednum},
</if>
<if test="status!=null">
status = #{status},
</if>
<if test="remark!=null and remark!=''">
remark = #{remark},
</if>
</set>
where id = #{id}
</update>
</mapper>
RoomTypeService.java
import com.hqyj.pojo.RoomType;
import com.hqyj.vo.RoomTypeVo;
import java.util.List;
public interface RoomTypeService {
/**
* 查询房型列表
* @param roomTypeVo
* @return
*/
List<RoomType> findRoomTypeList(RoomTypeVo roomTypeVo);
/**
* 添加房型
* @param roomType
* @return
*/
int addRoomType(RoomType roomType);
/**
* 修改房型
* @param roomType
* @return
*/
int updateRoomType(RoomType roomType);
}
RoomTypeServiceImpl.java
import com.hqyj.mapper.RoomTypeMapper;
import com.hqyj.pojo.RoomType;
import com.hqyj.service.RoomTypeService;
import com.hqyj.vo.RoomTypeVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class RoomTypeServiceImpl implements RoomTypeService {
@Resource
private RoomTypeMapper roomTypeMapper;
/**
* 查询房型列表
*
* @param roomTypeVo
* @return
*/
public List<RoomType> findRoomTypeList(RoomTypeVo roomTypeVo) {
return roomTypeMapper.findRoomTypeList(roomTypeVo);
}
public int addRoomType(RoomType roomType) {
//可用房间数默认是全部的房间数量
roomType.setAvilablenum(roomType.getRoomnum());
roomType.setLivednum(0);//已入住房间数量
return roomTypeMapper.addRoomType(roomType);
}
public int updateRoomType(RoomType roomType) {
//可用房间数默认是全部的房间数量
roomType.setAvilablenum(roomType.getRoomnum()); // 10
roomType.setLivednum(0);//已入住房间数量
return roomTypeMapper.updateRoomType(roomType);
}
}
房间预定
OrdersController.java
import com.alibaba.fastjson.JSON;
import com.hqyj.pojo.Orders;
import com.hqyj.service.OrdersService;
import com.hqyj.utils.SystemConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/orders")
public class OrdersController {
@Autowired
private OrdersService ordersService;
/**
* 添加订单
* @param orders
* @return
*/
@RequestMapping("/addOrders")
@ResponseBody
public String addOrders(Orders orders){
Map<String,Object> map = new HashMap<String,Object>();
//调用添加订单的方法
if(ordersService.addOrders(orders)>0){
map.put(SystemConstant.SUCCESS,true);
map.put(SystemConstant.MESSAGE,"酒店预订成功");
}else{
map.put(SystemConstant.SUCCESS,false);
map.put(SystemConstant.MESSAGE,"酒店预订失败,请重试!");
}
return JSON.toJSONString(map);
}
}
OrdersMapper.java
import com.hqyj.pojo.Orders;
import com.hqyj.vo.OrdersVo;
import java.util.List;
public interface OrdersMapper {
/**
* 添加订单
* @param orders
* @return
*/
int addOrders(Orders orders);
/**
* 查询订单列表
* @param ordersVo
* @return
*/
List<Orders> findOrdersList(OrdersVo ordersVo);
/**
* 修改订单
* @param orders
* @return
*/
int updateOrders(Orders orders);
}
OrdersMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hqyj.mapper.OrdersMapper">
<!-- 定义基础的ResultMap -->
<resultMap id="BaseResultMap" type="orders">
<id column="id" property="id" />
<result column="ordersNo" property="ordersno" />
<result column="accountId" property="accountid" />
<result column="roomTypeId" property="roomtypeid" />
<result column="roomId" property="roomid" />
<result column="reservationName" property="reservationname" />
<result column="idCard" property="idcard" />
<result column="phone" property="phone" />
<result column="status" property="status" />
<result column="reserveDate" property="reservedate" />
<result column="arriveDate" property="arrivedate" />
<result column="leaveDate" property="leavedate" />
<result column="reservePrice" property="reserveprice" />
<result column="remark" property="remark" />
</resultMap>
<resultMap id="ordersRoomAndTypeResultMap" type="orders" extends="BaseResultMap">
<!-- 配置订单与房间关系 -->
<association property="room" javaType="room">
<id column="id" property="id"/>
<result property="roomnum" column="roomnum"/>
</association>
<!-- 配置订单与房型关系 -->
<association property="roomType" javaType="roomType">
<id property="id" column="id"/>
<result property="typename" column="typename"/>
</association>
</resultMap>
<insert id="addOrders">
insert into t_orders (ordersno,accountid,roomtypeid,roomid,reservationname,idcard,phone,status,reservedate,
arrivedate,leavedate,reserveprice,remark)
values (#{ordersno},#{accountid},#{roomtypeid},#{roomid},#{reservationname},#{idcard},#{phone},
#{status},#{reservedate},#{arrivedate},#{leavedate},#{reserveprice},#{remark})
</insert>
<select id="findOrdersList" resultMap="ordersRoomAndTypeResultMap">
select o.*,r.`roomNum`,t.`typeName` from t_orders o
inner join t_room r on r.id = o.`roomId`
inner join t_room_type t on t.id = r.`roomTypeId`
<where>
<if test="reservationname!=null and reservationname!=''">
and o.reservationname like concat('%',#{reservationname},'%')
</if>
<if test="idcard!=null and idcard!=''">
and o.idcard like concat('%',#{idcard},'%')
</if>
<if test="phone!=null and phone!=''">
and o.phone like concat('%',#{phone},'%')
</if>
<if test="roomtypeid!=null">
and o.roomtypeid = #{roomtypeid}
</if>
<if test="status!=null">
and o.status = #{status}
</if>
<if test="startDate!=null">
<![CDATA[ and o.reservedate >= #{startDate} ]]>
</if>
<if test="endDate!=null">
<![CDATA[ and o.reservedate <= #{endDate }]]>
</if>
</where>
</select>
<update id="updateOrders" parameterType="orders">
update t_orders
<set>
<if test="ordersno != null">
ordersNo = #{ordersno,jdbcType=VARCHAR},
</if>
<if test="accountid != null">
accountId = #{accountid,jdbcType=BIGINT},
</if>
<if test="roomtypeid != null">
roomTypeId = #{roomtypeid,jdbcType=INTEGER},
</if>
<if test="roomid != null">
roomId = #{roomid,jdbcType=BIGINT},
</if>
<if test="reservationname != null">
reservationName = #{reservationname,jdbcType=VARCHAR},
</if>
<if test="idcard != null">
idCard = #{idcard,jdbcType=VARCHAR},
</if>
<if test="phone != null">
phone = #{phone,jdbcType=VARCHAR},
</if>
<if test="status != null">
status = #{status,jdbcType=INTEGER},
</if>
<if test="reservedate != null">
reserveDate = #{reservedate,jdbcType=TIMESTAMP},
</if>
<if test="arrivedate != null">
arriveDate = #{arrivedate,jdbcType=TIMESTAMP},
</if>
<if test="leavedate != null">
leaveDate = #{leavedate,jdbcType=TIMESTAMP},
</if>
<if test="reserveprice != null">
reservePrice = #{reserveprice,jdbcType=DECIMAL},
</if>
<if test="remark != null">
remark = #{remark,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>
OrdersService.java
import com.hqyj.pojo.Orders;
import com.hqyj.vo.OrdersVo;
import java.util.List;
public interface OrdersService {
/**
* 添加订单
* @param orders
* @return
*/
int addOrders(Orders orders);
/**
* 查询订单列表
* @param ordersVo
* @return
*/
List<Orders> findOrdersList(OrdersVo ordersVo);
/**
* 修改订单
* @param orders
* @return
*/
int updateOrders(Orders orders);
}
OrdersServiceImpl.java
import com.hqyj.mapper.OrdersMapper;
import com.hqyj.mapper.RoomMapper;
import com.hqyj.mapper.RoomTypeMapper;
import com.hqyj.pojo.Orders;
import com.hqyj.pojo.Room;
import com.hqyj.pojo.RoomType;
import com.hqyj.service.OrdersService;
import com.hqyj.utils.UUIDUtils;
import com.hqyj.vo.OrdersVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@Service
@Transactional
public class OrdersServiceImpl implements OrdersService {
@Autowired
private OrdersMapper ordersMapper;
@Autowired
private RoomMapper roomMapper;
@Autowired
private RoomTypeMapper roomTypeMapper;
/**
* 添加订单
*
* @param orders
* @return
*/
@Transactional(rollbackFor = RuntimeException.class)
public int addOrders(Orders orders) {
orders.setStatus(1);//1-待确认
orders.setOrdersno(UUIDUtils.randomUUID());
orders.setReservedate(new Date());//预订时间为当前系统时间
int count = ordersMapper.addOrders(orders);
//判断订单是否添加成功,添加成功操作房间及房型
if(count>0){
//修改房间状态为已预订(状态码为1)
//查询房间信息
Room room = roomMapper.findById(orders.getRoomid());
room.setStatus(1);//修改房间状态为已预订(编号1)
//调用修改房间信息的方法
roomMapper.updateRoom(room);
//修改房型(可用房间数-1,已预订数量+1)
RoomType roomType = roomTypeMapper.findById(orders.getRoomtypeid());
//修改可用房间数量
roomType.setAvilablenum(roomType.getAvilablenum()-1);
//修改已预订数量
roomType.setReservednum(roomType.getReservednum()+1);
//调用修改房型的方法
roomTypeMapper.updateRoomType(roomType);
}
return count;
}
public List<Orders> findOrdersList(OrdersVo ordersVo) {
return ordersMapper.findOrdersList(ordersVo);
}
public int updateOrders(Orders orders) {
return ordersMapper.updateOrders(orders);
}
}
后台设计
用户登录
实体类Employee
Employee.java
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class Employee {
private Integer id;//员工编号
private String loginName;//登录名称
private String loginPwd;//登录密码
private String name;//真实姓名
private Integer sex;//性别 1-男 2-女
private Integer deptId;//所属部门
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date hireDate;//入职日期
private String salt;//加密盐值
private Integer createdBy;//创建人
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createDate;//创建时间
private Integer modifyBy;//修改人
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date modifyDate;//修改时间
private String remark;//备注
//部门名称
private String deptName;
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public Integer getCreatedBy() {
return createdBy;
}
public void setCreatedBy(Integer createdBy) {
this.createdBy = createdBy;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Integer getModifyBy() {
return modifyBy;
}
public void setModifyBy(Integer modifyBy) {
this.modifyBy = modifyBy;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
实体类Dept
Dept.java
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Dept {
private Integer id;
private String deptName;
private String address;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createDate;
private String remark;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
实体类Role
Role.java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Title: 权限管理
* @ClassName: com.hqyj.pojo.Role.java
* @author: szs
* @date: 22-09-01 23:48
*
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Role {
private Integer id;
private String roleName;
private String roleDesc;
@Override
public String toString() {
return "Role{" +
"roleName='" + roleName + '\'' +
'}';
}
}
EmployeeController.java
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hqyj.dto.EmployeeDto;
import com.hqyj.pojo.Employee;
import com.hqyj.service.EmployeeService;
import com.hqyj.utils.DataGridViewResult;
import com.hqyj.utils.SystemConstant;
import com.hqyj.vo.EmployeeVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/admin/employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
/**
* 员工登录
*
* @param username
* @param password
* @param session
* @return
*/
@RequestMapping("/login")
public String login(String username, String password, HttpSession session, EmployeeDto dto) {
Map<String, Object> map = new HashMap<String, Object>();
//调用员工登录的方法
Employee employee = employeeService.login(username, password, dto, session);
//判断对象是否为空,不为空表示登录成功
if (employee != null) {
//保存当前登录用户
session.setAttribute(SystemConstant.LOGINUSER, employee);
map.put(SystemConstant.SUCCESS, true);//成功
} else {
map.put(SystemConstant.SUCCESS, false);//失败
map.put(SystemConstant.MESSAGE, "账号密码或验证码错误,请重新登录!");
}
return JSON.toJSONString(map);
}
/**
* 员工列表
*
* @param employeeVo
* @return
*/
@RequestMapping("/list")
public DataGridViewResult list(EmployeeVo employeeVo) {
//设置分页信息
PageHelper.startPage(employeeVo.getPage(), employeeVo.getLimit());
//调用查询的方法
List<Employee> employeeList = employeeService.findEmployeeList(employeeVo);
//创建分页对象
PageInfo<Employee> pageInfo = new PageInfo<Employee>(employeeList);
//返回数据
return new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
}
/**
* 添加员工
*
* @param employee
* @param session
* @return
*/
@RequestMapping("/addEmployee")
public String addEmployee(Employee employee, HttpSession session) {
Map<String, Object> map = new HashMap<String, Object>();
//获取当前登录用户
Employee loginUser = (Employee) session.getAttribute(SystemConstant.LOGINUSER);
//设置创建人
employee.setCreatedBy(loginUser.getId());
//调用新增员工的方法
if (employeeService.addEmployee(employee) > 0) {
map.put(SystemConstant.SUCCESS, true);
map.put(SystemConstant.MESSAGE, "添加成功");
} else {
map.put(SystemConstant.SUCCESS, false);
map.put(SystemConstant.MESSAGE, "添加失败");
}
return JSON.toJSONString(map);
}
/**
* 修改员工
*
* @param employee
* @param session
* @return
*/
@RequestMapping("/updateEmployee")
public String updateEmployee(Employee employee, HttpSession session) {
Map<String, Object> map = new HashMap<String, Object>();
//获取当前登录用户
Employee loginUser = (Employee) session.getAttribute(SystemConstant.LOGINUSER);
//设置修改人
employee.setModifyBy(loginUser.getId());
//调用新增员工的方法
if (employeeService.updateEmployee(employee) > 0) {
map.put(SystemConstant.SUCCESS, true);
map.put(SystemConstant.MESSAGE, "修改成功");
} else {
map.put(SystemConstant.SUCCESS, false);
map.put(SystemConstant.MESSAGE, "修改失败");
}
return JSON.toJSONString(map);
}
/**
* 删除员工
*
* @param id
* @return
*/
@RequestMapping("/deleteById")
public String deleteById(int id) {
Map<String, Object> map = new HashMap<String, Object>();
//调用删除员工的方法
if (employeeService.deleteById(id) > 0) {
map.put(SystemConstant.SUCCESS, true);
map.put(SystemConstant.MESSAGE, "删除成功");
} else {
map.put(SystemConstant.SUCCESS, false);
map.put(SystemConstant.MESSAGE, "删除失败");
}
return JSON.toJSONString(map);
}
/**
* 重置密码
*
* @param id
* @return
*/
@RequestMapping("/resetPwd")
public String resetPwd(int id) {
Map<String, Object> map = new HashMap<String, Object>();
//调用重置密码的方法
if (employeeService.resetPwd(id) > 0) {
map.put(SystemConstant.SUCCESS, true);
map.put(SystemConstant.MESSAGE, "密码重置成功");
} else {
map.put(SystemConstant.SUCCESS, false);
map.put(SystemConstant.MESSAGE, "密码重置失败");
}
return JSON.toJSONString(map);
}
/**
* 分配角色
*
* @param roleIds
* @param empId
* @return
*/
@RequestMapping("/saveEmployeeRole")
public String saveEmployeeRole(String roleIds, Integer empId) {
Map<String, Object> map = new HashMap<String, Object>();
//调用保存员工角色关系的方法
if (employeeService.saveEmployeeRole(roleIds, empId)) {
map.put(SystemConstant.MESSAGE, "角色分配成功");
} else {
map.put(SystemConstant.MESSAGE, "角色分配失败");
}
return JSON.toJSONString(map);
}
}
EmployeeMapper.java
import com.hqyj.pojo.Employee;
import com.hqyj.vo.EmployeeVo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface EmployeeMapper {
/**
* 根据登录账号查询员工信息
* @param loginName
* @return
*/
Employee findEmployeeByLoginName(String loginName);
/**
* 根据部门编号查询员工数量
* @param deptId
* @return
*/
int getEmployeeCountByDeptId(Integer deptId);
/**
* 根据角色编号查询员工数量
* @param roleId
* @return
*/
int getEmployeeCountByRoleId(Integer roleId);
/**
* 查询员工列表
* @param employeeVo
* @return
*/
List<Employee> findEmployeeList(EmployeeVo employeeVo);
/**
* 添加员工
* @param employee
* @return
*/
int addEmployee(Employee employee);
/**
* 修改员工
* @param employee
* @return
*/
int updateEmployee(Employee employee);
/**
* 删除员工
* @param id
* @return
*/
int deleteById(Integer id);
/**
* 删除员工角色关系数据
* @param id
*/
void deleteEmployeeAndRole(Integer id);
/**
* 保存员工角色关系数据
* @param roleId
* @param empId
*/
@Insert("insert into sys_role_employee (eid,rid) values(#{eid},#{rid})")
void addEmployeeRole(@Param("rid") String roleId, @Param("eid") Integer empId);
}
EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hqyj.mapper.EmployeeMapper">
<!-- 根据登录账号查询员工信息 -->
<select id="findEmployeeByLoginName" resultType="employee">
select * from sys_employee where loginName = #{loginName}
</select>
<!-- 根据部门编号查询该部门下的员工数量 -->
<select id="getEmployeeCountByDeptId" resultType="int">
select count(1) from sys_employee where deptId = #{deptId}
</select>
<!-- 根据角色编号查询员工数量 -->
<select id="getEmployeeCountByRoleId" resultType="int">
select count(1) from sys_employee e
inner join sys_role_employee re on e.id = re.`eid`
where re.`rid` = #{roleId}
</select>
<!-- 查询员工列表 -->
<select id="findEmployeeList" resultType="employee">
select e.*,d.deptName from sys_employee e
inner join sys_dept d on d.id = e.deptId
<where>
<if test="loginName!=null and loginName!=''">
and e.loginName like concat('%',#{loginName},'%')
</if>
<if test="name!=null and name!=''">
and e.name like concat('%',#{name},'%')
</if>
<if test="sex!=null">
and e.sex = #{sex}
</if>
<if test="deptId!=null">
and e.deptId = #{deptId}
</if>
<if test="startDate!=null">
<![CDATA[ and e.hireDate >= #{startDate} ]]>
</if>
<if test="endDate!=null">
<![CDATA[ and e.hireDate <= #{endDate} ]]>
</if>
</where>
order by e.id
</select>
<insert id="addEmployee">
insert into sys_employee (loginName,loginPwd,name,sex,deptId,hireDate,salt,createdBy,createDate,remark)
values(#{loginName},#{loginPwd},#{name},#{sex},#{deptId},#{hireDate},#{salt},#{createdBy},#{createDate},#{remark})
</insert>
<update id="updateEmployee">
update sys_employee
<set>
<if test="loginPwd!=null and loginPwd!=''">
loginPwd = #{loginPwd},
</if>
<if test="name!=null and name!=''">
name = #{name},
</if>
<if test="sex!=null">
sex = #{sex},
</if>
<if test="deptId!=null">
deptId = #{deptId},
</if>
<if test="hireDate!=null">
hireDate = #{hireDate},
</if>
<if test="salt!=null and salt!=''">
salt = #{salt},
</if>
<if test="remark!=null and remark!=''">
remark = #{remark},
</if>
<if test="modifyBy!=null">
modifyBy = #{modifyBy},
</if>
<if test="modifyDate!=null">
modifyDate = #{modifyDate},
</if>
</set>
where id = #{id}
</update>
<delete id="deleteById">
delete from sys_employee where id = #{id}
</delete>
<delete id="deleteEmployeeAndRole">
delete from sys_role_employee where eid= #{eid}
</delete>
</mapper>
EmployeeService.java
import com.hqyj.dto.EmployeeDto;
import com.hqyj.pojo.Employee;
import com.hqyj.vo.EmployeeVo;
import javax.servlet.http.HttpSession;
import java.util.List;
public interface EmployeeService {
/**
* 员工登录
* @param loginName
* @param loginPwd
* @return
*/
Employee login(String loginName, String loginPwd, EmployeeDto dto, HttpSession session);
/**
* 根据部门编号查询员工数量
* @param deptId
* @return
*/
int getEmployeeCountByDeptId(Integer deptId);
/**
* 根据角色编号查询员工数量
* @param roleId
* @return
*/
int getEmployeeCountByRoleId(Integer roleId);
/**
* 查询员工列表
* @param employeeVo
* @return
*/
List<Employee> findEmployeeList(EmployeeVo employeeVo);
/**
* 添加员工
* @param employee
* @return
*/
int addEmployee(Employee employee);
/**
* 修改员工
* @param employee
* @return
*/
int updateEmployee(Employee employee);
/**
* 删除员工
* @param id
* @return
*/
int deleteById(Integer id);
/**
* 重置密码
* @param id
* @return
*/
int resetPwd(int id);
/**
* 保存员工角色关系
* @param roleIds
* @param empId
* @return
*/
boolean saveEmployeeRole(String roleIds, Integer empId);
}
EmployeeServiceImpl.java
import com.hqyj.dto.EmployeeDto;
import com.hqyj.mapper.EmployeeMapper;
import com.hqyj.pojo.Employee;
import com.hqyj.service.EmployeeService;
import com.hqyj.utils.PasswordUtil;
import com.hqyj.utils.SystemConstant;
import com.hqyj.utils.UUIDUtils;
import com.hqyj.vo.EmployeeVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {
@Resource
private EmployeeMapper employeeMapper;
/**
* 员工登录(验证码)
*
* @param loginName
* @param loginPwd
* @return
*/
public Employee login(String loginName, String loginPwd, EmployeeDto dto, HttpSession session) {
//定义一个存放数据的集合
Map<String, Object> map = new HashMap<>();
//验证验证码是否正确 --忽略大小写
if ((dto.getCode().equalsIgnoreCase(session.getAttribute("code").toString()))) {
Employee employee = employeeMapper.findEmployeeByLoginName(loginName);
if (employee != null) {
//将密码加密处理
String newPassword = PasswordUtil.md5(loginPwd, employee.getSalt(), SystemConstant.PASSWORD_COUNT);
System.out.println(newPassword);
//比较密码是否一致
if (employee.getLoginPwd().equals(newPassword)) {
return employee;//登录成功
}
}
}
return null;
}
//普通登录
// //调用根据账号查询员工信息的方法
// Employee employee = employeeMapper.findEmployeeByLoginName(loginName);
// //判断对象是否为空
// if(employee!=null){
// //将密码加密处理
// String newPassword = PasswordUtil.md5(loginPwd,employee.getSalt(), SystemConstant.PASSWORD_COUNT);
// System.out.println(newPassword);
// //比较密码是否一致
// if(employee.getLoginPwd().equals(newPassword)){
// return employee;//登录成功
// }
// }
// //登录失败
// return null;
// }
public int getEmployeeCountByDeptId(Integer deptId) {
return employeeMapper.getEmployeeCountByDeptId(deptId);
}
public int getEmployeeCountByRoleId(Integer roleId) {
return employeeMapper.getEmployeeCountByRoleId(roleId);
}
public List<Employee> findEmployeeList(EmployeeVo employeeVo) {
return employeeMapper.findEmployeeList(employeeVo);
}
public int addEmployee(Employee employee) {
employee.setSalt(UUIDUtils.randomUUID());//加密盐值
employee.setCreateDate(new Date());//创建时间
employee.setLoginPwd(PasswordUtil.md5(SystemConstant.DEFAULT_LOGIN_PWD, employee.getSalt(), SystemConstant.PASSWORD_COUNT));//密码
return employeeMapper.addEmployee(employee);
}
public int updateEmployee(Employee employee) {
//设置修改时间
employee.setModifyDate(new Date());
return employeeMapper.updateEmployee(employee);
}
public int deleteById(Integer id) {
//删除员工角色关系表的数据
employeeMapper.deleteEmployeeAndRole(id);
//调用删除员工的方法
return employeeMapper.deleteById(id);
}
/**
* @param id
* @Title: 重置密码
* @MethodName: resetPwd
* @Return int
* @Exception
* @Description:
* @author: szs
* @date: 22-09-05 23:08
*/
public int resetPwd(int id) {
Employee employee = new Employee();
employee.setSalt(UUIDUtils.randomUUID());//必须先设置盐值,再给密码重新加密赋值
employee.setLoginPwd(PasswordUtil.md5(SystemConstant.DEFAULT_LOGIN_PWD, employee.getSalt(), SystemConstant.PASSWORD_COUNT));
employee.setId(id);//主键,员工编号
return employeeMapper.updateEmployee(employee);
}
public boolean saveEmployeeRole(String roleIds, Integer empId) {
try {
//先删除员工角色关系表的数据
employeeMapper.deleteEmployeeAndRole(empId);
//再保存员工角色关系
String[] idStr = roleIds.split(",");
for (int i = 0; i < idStr.length; i++) {
employeeMapper.addEmployeeRole(idStr[i], empId);
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
DeptController.java
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hqyj.pojo.Dept;
import com.hqyj.service.DeptService;
import com.hqyj.service.EmployeeService;
import com.hqyj.utils.DataGridViewResult;
import com.hqyj.utils.SystemConstant;
import com.hqyj.vo.DeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/admin/dept")
public class DeptController {
@Autowired
private DeptService deptService;
@Autowired
private EmployeeService employeeService;
/**
* 查询部门列表
* @param deptVo
* @return
*/
@RequestMapping("/list")
public DataGridViewResult list(DeptVo deptVo){
//设置分页信息
PageHelper.startPage(deptVo.getPage(),deptVo.getLimit());
//调用分页查询的方法
List<Dept> deptList = deptService.findDeptListByPage(deptVo);
//创建分页对象
PageInfo<Dept> pageInfo = new PageInfo<Dept>(deptList);
//返回数据
return new DataGridViewResult(pageInfo.getTotal(),pageInfo.getList());
}
/**
* 添加部门
* @param dept
* @return
*/
@RequestMapping("/addDept")
public String addDept(Dept dept){
Map<String,Object> map = new HashMap<String,Object>();
//调用添加部门的方法
if(deptService.addDept(dept)>0){
map.put(SystemConstant.SUCCESS,true);//成功
map.put(SystemConstant.MESSAGE,"添加成功");
}else{
map.put(SystemConstant.SUCCESS,false);//失败
map.put(SystemConstant.MESSAGE,"添加失败");
}
//将map集合以JSON格式返回
return JSON.toJSONString(map);
}
/**
* 修改部门
* @param dept
* @return
*/
@RequestMapping("/updateDept")
public String updateDept(Dept dept){
Map<String,Object> map = new HashMap<String,Object>();
//调用修改部门的方法
if(deptService.updateDept(dept)>0){
map.put(SystemConstant.SUCCESS,true);//成功
map.put(SystemConstant.MESSAGE,"修改成功");
}else{
map.put(SystemConstant.SUCCESS,false);//失败
map.put(SystemConstant.MESSAGE,"修改失败");
}
//将map集合以JSON格式返回
return JSON.toJSONString(map);
}
/**
* 检查该部门下是否存在员工信息
* @param id
* @return
*/
@RequestMapping("/checkDeptHasEmployee")
public String checkDeptHasEmployee(Integer id){
Map<String,Object> map = new HashMap<String,Object>();
//调用根据部门编号查询员工数量的方法
if(employeeService.getEmployeeCountByDeptId(id)>0){
map.put(SystemConstant.EXIST,true);//存在
map.put(SystemConstant.MESSAGE,"该部门存在员工信息,无法删除");
}else{
map.put(SystemConstant.EXIST,false);//不存在
}
return JSON.toJSONString(map);
}
/**
* 删除部门
* @param id
* @return
*/
@RequestMapping("/deleteById")
public String deleteById(Integer id){
Map<String,Object> map = new HashMap<String,Object>();
//调用删除部门的方法
if(deptService.deleteById(id)>0){
map.put(SystemConstant.SUCCESS,true);//成功
map.put(SystemConstant.MESSAGE,"删除成功");
}else{
map.put(SystemConstant.SUCCESS,false);//失败
map.put(SystemConstant.MESSAGE,"删除失败");
}
return JSON.toJSONString(map);
}
/**
* 查询所有部门
* @return
*/
@RequestMapping("/deptList")
public String deptList(){
//调用查询所有部门信息的方法并返回到页面
return JSON.toJSONString(deptService.findDeptList());
}
}
DeptMapper.java
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hqyj.pojo.Dept;
import com.hqyj.service.DeptService;
import com.hqyj.service.EmployeeService;
import com.hqyj.utils.DataGridViewResult;
import com.hqyj.utils.SystemConstant;
import com.hqyj.vo.DeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/admin/dept")
public class DeptController {
@Autowired
private DeptService deptService;
@Autowired
private EmployeeService employeeService;
/**
* 查询部门列表
* @param deptVo
* @return
*/
@RequestMapping("/list")
public DataGridViewResult list(DeptVo deptVo){
//设置分页信息
PageHelper.startPage(deptVo.getPage(),deptVo.getLimit());
//调用分页查询的方法
List<Dept> deptList = deptService.findDeptListByPage(deptVo);
//创建分页对象
PageInfo<Dept> pageInfo = new PageInfo<Dept>(deptList);
//返回数据
return new DataGridViewResult(pageInfo.getTotal(),pageInfo.getList());
}
/**
* 添加部门
* @param dept
* @return
*/
@RequestMapping("/addDept")
public String addDept(Dept dept){
Map<String,Object> map = new HashMap<String,Object>();
//调用添加部门的方法
if(deptService.addDept(dept)>0){
map.put(SystemConstant.SUCCESS,true);//成功
map.put(SystemConstant.MESSAGE,"添加成功");
}else{
map.put(SystemConstant.SUCCESS,false);//失败
map.put(SystemConstant.MESSAGE,"添加失败");
}
//将map集合以JSON格式返回
return JSON.toJSONString(map);
}
/**
* 修改部门
* @param dept
* @return
*/
@RequestMapping("/updateDept")
public String updateDept(Dept dept){
Map<String,Object> map = new HashMap<String,Object>();
//调用修改部门的方法
if(deptService.updateDept(dept)>0){
map.put(SystemConstant.SUCCESS,true);//成功
map.put(SystemConstant.MESSAGE,"修改成功");
}else{
map.put(SystemConstant.SUCCESS,false);//失败
map.put(SystemConstant.MESSAGE,"修改失败");
}
//将map集合以JSON格式返回
return JSON.toJSONString(map);
}
/**
* 检查该部门下是否存在员工信息
* @param id
* @return
*/
@RequestMapping("/checkDeptHasEmployee")
public String checkDeptHasEmployee(Integer id){
Map<String,Object> map = new HashMap<String,Object>();
//调用根据部门编号查询员工数量的方法
if(employeeService.getEmployeeCountByDeptId(id)>0){
map.put(SystemConstant.EXIST,true);//存在
map.put(SystemConstant.MESSAGE,"该部门存在员工信息,无法删除");
}else{
map.put(SystemConstant.EXIST,false);//不存在
}
return JSON.toJSONString(map);
}
/**
* 删除部门
* @param id
* @return
*/
@RequestMapping("/deleteById")
public String deleteById(Integer id){
Map<String,Object> map = new HashMap<String,Object>();
//调用删除部门的方法
if(deptService.deleteById(id)>0){
map.put(SystemConstant.SUCCESS,true);//成功
map.put(SystemConstant.MESSAGE,"删除成功");
}else{
map.put(SystemConstant.SUCCESS,false);//失败
map.put(SystemConstant.MESSAGE,"删除失败");
}
return JSON.toJSONString(map);
}
/**
* 查询所有部门
* @return
*/
@RequestMapping("/deptList")
public String deptList(){
//调用查询所有部门信息的方法并返回到页面
return JSON.toJSONString(deptService.findDeptList());
}
}
DeptMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hqyj.mapper.DeptMapper">
<!--模糊查询-->
<select id="findDeptListByPage" resultType="dept">
select * from sys_dept
<where>
<if test="deptName!=null and deptName!=''">
and deptName like concat('%',#{deptName},'%')
</if>
</where>
</select>
<!-- 添加部门 -->
<insert id="addDept">
insert into sys_dept (deptName,address,createDate,remark) values(#{deptName},#{address},#{createDate},#{remark})
</insert>
<update id="updateDept">
update sys_dept
<set>
<if test="deptName!=null and deptName!=''">
deptName = #{deptName},
</if>
<if test="address!=null and address!=''">
address = #{address},
</if>
<if test="remark!=null and remark!=''">
remark = #{remark},
</if>
</set>
where id = #{id}
</update>
<delete id="deleteById">
delete from sys_dept where id = #{id}
</delete>
<select id="findDeptList" resultType="dept">
select * from sys_dept
</select>
</mapper>
DeptService.java
import com.hqyj.pojo.Dept;
import com.hqyj.vo.DeptVo;
import java.util.List;
public interface DeptService {
/**
* 查询部门列表
* @param deptVo
* @return
*/
List<Dept> findDeptListByPage(DeptVo deptVo);
/**
* 添加部门
* @param dept
* @return
*/
int addDept(Dept dept);
/**
* 修改部门
* @param dept
* @return
*/
int updateDept(Dept dept);
/**
* 删除部门
* @param id
* @return
*/
int deleteById(Integer id);
/**
* 查询所有部门
* @return
*/
List<Dept> findDeptList();
}
DeptServiceImpl.java
import com.hqyj.mapper.DeptMapper;
import com.hqyj.pojo.Dept;
import com.hqyj.service.DeptService;
import com.hqyj.vo.DeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@Service
@Transactional
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
/**
* 查询部门列表
*
* @param deptVo
* @return
*/
public List<Dept> findDeptListByPage(DeptVo deptVo) {
return deptMapper.findDeptListByPage(deptVo);
}
public int addDept(Dept dept) {
//保存创建时间
dept.setCreateDate(new Date());
return deptMapper.addDept(dept);
}
public int updateDept(Dept dept) {
return deptMapper.updateDept(dept);
}
public int deleteById(Integer id) {
return deptMapper.deleteById(id);
}
public List<Dept> findDeptList() {
return deptMapper.findDeptList();
}
}
工具类
CodeImgUtil.java
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.Random;
/**
* @Title: 验证码
* @ClassName: com.hqyj.utils.CodeImgUtil.java
* @author: szs
* @date: 22-09-01 14:08
*/
public class CodeImgUtil {
/**
* @param length
* @Title: 随机生成一个指定长度的字符串
* @MethodName: createCode
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-01 14:17
*/
public static String createCode(int length) {
//实例化对象,方便字符串拼接
StringBuffer buffer = new StringBuffer();
//随机数对象
Random random = new Random();
//循环生成每一位字符
for (int i = 0; i < length; i++) {
//随机生成类型
int type = random.nextInt(3);//0,1,2
switch (type) {
case 0://数字
buffer.append(random.nextInt(10));
break;
case 1://大写字母
buffer.append((char) (random.nextInt(26) + 65));
break;
default:
buffer.append((char) (random.nextInt(26) + 97));
break;
}
}
return buffer.toString();
}
/**
* @param code
* @Title: 生成验证码背景图
* @MethodName: createImg
* @Return java.awt.image.BufferedImage
* @Exception
* @Description:
* @author: szs
* @date: 22-09-01 14:17
*/
public static BufferedImage createImg(String code) {
//定义图片的高度和宽度
int width = 60;
int height = 20;
//建立bufferedImage对象,制定图片的长度和宽度以及色彩
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
//获取Graphics2D 绘制对象,开始绘制验证码
Graphics2D g = bi.createGraphics();
//画边框
g.setColor(Color.BLUE);
g.drawRect(0, 0, width - 1, height - 1);
//画干扰线
g.setColor(Color.GREEN);
//设置文字的子图验证和大小
Font font = new Font("微软雅黑", Font.PLAIN, 16);
//设置字体的颜色
Color color = new Color(20, 28, 100);
//将颜色和字体放入
g.setFont(font);
g.setColor(color);
g.setBackground(new Color(226, 226, 226));//背景颜色
//开始绘制对象
g.clearRect(0, 0, width, height);
//绘制形状,获取距形对象
FontRenderContext context = g.getFontRenderContext();//文字读取上下文
Rectangle2D bounds = font.getStringBounds(code, context);//将生成的验证码放入
//计算文字的坐标和间距
double x = (width - bounds.getWidth()) / 2;
// double y = (height - bounds.getHeight()) / 2;
double y = 15;
double ascent = bounds.getY();
double baseY = y - ascent;
g.drawString(code, (int) x, (int) y);
//结束配置
g.dispose();
//将图片保存到制定地方,输出
return bi;
}
}
MD5Util.java
import org.apache.shiro.crypto.hash.SimpleHash;
public class MD5Util {
/**
* @Title: MD5加密
* @MethodName: md5
* @param loginName
* @param loginPwd
* @Return java.lang.String
* @Exception
* @Description:
* @author: szs
* @date: 22-09-01 23:52
*/
public static String md5(String loginName, String loginPwd) {
/*
algorithmName代表进行加密的算法名称、
source代表需要加密的元数据,如密码、
salt代表盐,需要加进一起加密的数据、
hashIterations代表hash迭代次数。
* */
return new SimpleHash("MD5", loginName, loginPwd, 1024).toString();
}
}
PasswordUtil.java
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.Sha1Hash;
import java.util.UUID;
public class PasswordUtil {
/**
* 对密码加密 md5
* @param source 要加密的明文
* @param salt 盐
* @param hashIterations 散列次数
* @return
*/
public static String md5(String source, Object salt, Integer hashIterations) {
return new Md5Hash(source, salt, hashIterations).toString();
}
/**
* 对密码加密sha1
* @param source 要加密的明文
* @param salt 盐
* @param hashIterations 散列次数
* @return
*/
public static String sha1(String source, Object salt, Integer hashIterations) {
return new Sha1Hash(source, salt, hashIterations).toString();
}
public static void main(String[] args) {
String password = "123456";
String salt = UUID.randomUUID().toString().replace("-","");
System.out.println("加密盐值:"+salt);
System.out.println("加密后的密码:"+ PasswordUtil.md5(password,salt,5));
}
}
UUIDUtil.java
import java.util.UUID;
public class UUIDUtils {
public static String randomUUID() {
return UUID.randomUUID().toString().replace("-","");
}
}