文章目录

  • 25.入住管理
    • 25.1 添加页面
    • 25.2 查询内容
    • 25.3 登记入住
    • 25.4 退房

建议配合视频学习食用(13-4~14-2):
https://www.bilibili.com/video/BV1rr4y1F7Y2?p=1

25.入住管理

25.1 添加页面

1.添加订单管理、预定管理
2.修改超级管理员权限
3.添加页面
PageController.java

    /*** 去到入住管理页面* @return*/@RequestMapping("/toCheckinManager")public String toCheckinManager(){return "checkin/checkinManager";}

checkin/checkinManager.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><!-- 获取CSRF Token --><meta name="_csrf" content="${_csrf.token}"/><!-- 获取CSRF头,默认为X-CSRF-TOKEN --><meta name="_csrf_header" content="${_csrf.headerName}"/><meta charset="utf-8"><title>layui</title><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}/statics/layui/lib/layui-v2.5.5/css/layui.css"media="all"><link rel="stylesheet" href="${pageContext.request.contextPath}/statics/layui/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container"><div class="layuimini-main"><%-- 搜索条件 --%><fieldset class="table-search-fieldset"><legend>搜索信息</legend><div style="margin: 10px 10px 10px 10px"><form class="layui-form layui-form-pane" action=""><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">入住人</label><div class="layui-input-inline"><input type="text" name="customerName" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">身份证号</label><div class="layui-input-inline"><input type="text" name="idCard" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">手机号码</label><div class="layui-input-inline"><input type="text" name="phone" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">房间类型</label><div class="layui-input-inline"><select name="roomTypeId" autocomplete="off" class="layui-input s_roomTypeId"><option value="">全部</option></select></div></div><div class="layui-inline"><label class="layui-form-label">入住状态</label><div class="layui-input-inline"><select name="status" autocomplete="off" class="layui-input"><option value="">全部</option><option value="1">入住中</option><option value="2">已离店</option></select></div></div><div class="layui-inline"><label class="layui-form-label">入住日期</label><div class="layui-input-inline"><input type="text" name="startDate" id="startTime" autocomplete="off" class="layui-input" placeholder="请选择入住日期" readonly></div></div><div class="layui-inline"><label class="layui-form-label">离店日期</label><div class="layui-input-inline"><input type="text" name="endDate" id="endTime" autocomplete="off" class="layui-input" placeholder="请选择离店日期" readonly></div></div></div><div class="layui-form-item"><div class="layui-input-block" style="text-align: center"><button type="submit" class="layui-btn"  lay-submit lay-filter="data-search-btn"><i class="layui-icon layui-icon-search"></i>搜索</button><button type="reset" class="layui-btn layui-btn-warm"><i class="layui-icon layui-icon-refresh-1"></i>重置</button></div></div></form></div></fieldset><%-- 表格工具栏 --%><script type="text/html" id="toolbarDemo"><div class="layui-btn-container"><button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="checkIn"><iclass="layui-icon layui-icon-edit"></i>登记入住</button></div></script><%-- 数据表格 --%><table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table><%-- 行工具栏 --%><script type="text/html" id="currentTableBar"><a class="layui-btn layui-btn-xs data-count-edit" lay-event="checkout"><iclass="layui-icon layui-icon-delete"></i>退房</a></script></div>
</div>
<script src="${pageContext.request.contextPath}/statics/layui/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
<script>layui.use(['form', 'table', 'laydate', 'jquery', 'layer'], function () {var $ = layui.jquery,form = layui.form,laydate = layui.laydate,layer = layui.layer,table = layui.table;//渲染日期组件laydate.render({elem: '#startTime', //指定元素type: 'datetime'});laydate.render({elem: '#endTime', //指定元素type: 'datetime'});//获取<meta>标签中封装的CSRF Tokenvar token = $("meta[name='_csrf']").attr("content");var header = $("meta[name='_csrf_header']").attr("content");//将头中的CSRF Token信息进行发送$(document).ajaxSend(function (e,xhr,options) {xhr.setRequestHeader(header,token);});//渲染表格组件var tableIns = table.render({elem: '#currentTableId',url: '${pageContext.request.contextPath}/admin/checkin/list',toolbar: '#toolbarDemo',cols: [[{field: 'id', width: 100, title: '入住编号', align: "center"},{field: 'roomType', width: 100, title: '入住房型', align: "center",templet:function (d) {return d.roomType.typeName;}},{field: 'room', width: 80, title: '房间号', align: "center",templet:function (d) {return d.room.roomNum;}},{field: 'customerName', width: 100, title: '入住人', align: "center"},{field: 'idCard', minWidth: 120, title: '身份证号', align: "center"},{field: 'phone', width: 150, title: '手机号', align: "center"},{field: 'status', width: 100, title: '状态', align: "center",templet:function (d) {return d.status == 1 ? "<font color='red'>入住中</font>" : "<font color='green'>已离店</font>";}},{field: 'payPrice', width: 120, title: '支付金额', align: "center"},{field: 'arriveDate', width: 170, title: '入住日期', align: "center"},{field: 'leaveDate', width: 170, title: '离店日期', align: "center"},{title: '操作', width: 150, toolbar: '#currentTableBar', align: "center"}]],page: true,done: function (res, curr, count) {//判断当前页码是否是大于1并且当前页的数据量为0if (curr > 1 && res.data.length == 0) {var pageValue = curr - 1;//刷新数据表格的数据tableIns.reload({page: {curr: pageValue}});}}});// 监听搜索操作form.on('submit(data-search-btn)', function (data) {tableIns.reload({where: data.field,page: {curr: 1}});return false;});//查询房型列表$.get("/admin/roomType/roomTypeList",function(result){var html = "";//循环遍历数据for (let i = 0; i <result.length; i++) {html +="<option value='"+result[i].id+"'>"+result[i].typeName+"</option>"}//将数据追加到下拉列表中$("[name='roomTypeId']").append(html);//重新渲染下拉列表form.render("select");},"json");});
</script></body>
</html>

25.2 查询内容

1.实体类
CheckinVo.java

package com.manong.entity;import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;@Data
public class Checkin {private Long id;private Double payPrice;private Integer roomTypeId;private Long roomId;private String customerName;private String idCard;private String phone;@DateTimeFormat(pattern = "yyyy-MM-dd")private Date arriveDate;@DateTimeFormat(pattern = "yyyy-MM-dd")private Date leaveDate;private Long ordersId;private Integer status;private Date createDate;private Integer createdBy;private Date modifyDate;private Integer modifyBy;private String remark;//房型对象private RoomType roomType;//房间对象private Room room;}

CheckinVo.java

package com.manong.vo;import com.manong.entity.Checkin;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;@Data
public class CheckinVo extends Checkin {private Integer page;//当前页码private Integer limit;//每页显示数量@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date startDate;@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date endDate;}

2.数据层
CheckinMapper.java

package com.manong.dao;import com.manong.entity.Checkin;
import com.manong.vo.CheckinVo;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface CheckinMapper {/*** 查询入住信息列表* @param checkinVo* @return*/List<Checkin> findCheckinList(CheckinVo checkinVo);
}

CheckinMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.manong.dao.CheckinMapper"><resultMap id="BaseResultMap" type="com.manong.entity.Checkin"><id column="id" jdbcType="BIGINT" property="id" /><id column="payPrice" jdbcType="DECIMAL" property="payPrice" /><result column="roomTypeId" jdbcType="INTEGER" property="roomTypeId" /><result column="roomId" jdbcType="BIGINT" property="roomId" /><result column="customerName" jdbcType="VARCHAR" property="customerName" /><result column="idCard" jdbcType="VARCHAR" property="idCard" /><result column="phone" jdbcType="VARCHAR" property="phone" /><result column="arriveDate" jdbcType="DATE" property="arriveDate" /><result column="leaveDate" jdbcType="DATE" property="leaveDate" /><result column="ordersId" jdbcType="BIGINT" property="ordersId" /><result column="status" jdbcType="INTEGER" property="status" /><result column="createDate" jdbcType="TIMESTAMP" property="createDate" /><result column="createdBy" jdbcType="INTEGER" property="createdBy" /><result column="modifyDate" jdbcType="TIMESTAMP" property="modifyDate" /><result column="modifyBy" jdbcType="INTEGER" property="modifyBy" /><result column="remark" jdbcType="VARCHAR" property="remark" /></resultMap><resultMap id="checkinRoomResultMap" type="com.manong.entity.Checkin" extends="BaseResultMap"><!-- 房型 --><association property="roomType" javaType="com.manong.entity.RoomType"><id column="id" jdbcType="INTEGER" property="id" /><result column="typeName" jdbcType="VARCHAR" property="typeName" /><result column="photo" jdbcType="VARCHAR" property="photo" /><result column="price" jdbcType="DECIMAL" property="price" /></association><!-- 房间 --><association property="room" javaType="com.manong.entity.Room"><id column="id" jdbcType="INTEGER" property="id" /><result column="title" jdbcType="VARCHAR" property="title" /><result column="photo" jdbcType="VARCHAR" property="photo" /><result column="roomNum" jdbcType="VARCHAR" property="roomNum" /></association></resultMap><select id="findCheckinList" resultMap="checkinRoomResultMap">select t1.*,t2.`typeName`,t3.`roomNum` from t_checkin t1inner join t_room_type t2 on t2.id = t1.`roomTypeId`inner join t_room t3 on t3.id = t1.`roomId`<where><if test="customerName!=null and customerName!=''">and t1.customerName like concat('%',#{customerName},'%')</if><if test="idCard!=null and idCard!=''">and t1.idCard like concat('%',#{idCard},'%')</if><if test="phone!=null and phone!=''">and t1.phone like concat('%',#{phone},'%')</if><if test="roomTypeId!=null">and t1.roomTypeId = #{roomTypeId}</if><if test="status!=null">and t1.status = #{status}</if><if test="startDate!=null"><![CDATA[ and t1.reserveDate >= #{startDate} ]]></if><if test="endDate!=null"><![CDATA[ and t1.reserveDate <= #{endDate} ]]></if></where></select></mapper>

3.业务层
CheckinService.java

package com.manong.service;import com.manong.entity.Checkin;
import com.manong.vo.CheckinVo;import java.util.List;public interface CheckinService {/*** 查询入住信息列表* @param checkinVo* @return*/List<Checkin> findCheckinList(CheckinVo checkinVo);
}

CheckinServiceImpl.java

package com.manong.service.impl;import com.manong.dao.CheckinMapper;
import com.manong.dao.OrdersMapper;
import com.manong.dao.RoomMapper;
import com.manong.dao.RoomTypeMapper;
import com.manong.entity.Checkin;
import com.manong.entity.Orders;
import com.manong.entity.Room;
import com.manong.entity.RoomType;
import com.manong.service.CheckinService;
import com.manong.vo.CheckinVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.util.Date;
import java.util.List;@Service
@Transactional
public class CheckinServiceImpl implements CheckinService {@Resourceprivate CheckinMapper checkinMapper;public List<Checkin> findCheckinList(CheckinVo checkinVo) {return checkinMapper.findCheckinList(checkinVo);}}

4.后台管理的控制层
CheckinController.java

package com.manong.controller;import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.manong.entity.Checkin;
import com.manong.entity.SysUser;
import com.manong.service.CheckinService;
import com.manong.service.SysUserService;
import com.manong.utils.DataGridViewResult;
import com.manong.utils.SystemConstants;
import com.manong.vo.CheckinVo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.security.Principal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/admin/checkin")
public class CheckinController {@Resourceprivate CheckinService checkinService;/***  查询入住列表* @param checkinVo* @return*/@RequestMapping("/list")public DataGridViewResult list(CheckinVo checkinVo){//设置分页信息PageHelper.startPage(checkinVo.getPage(),checkinVo.getLimit());//调用方法List<Checkin> checkinList = checkinService.findCheckinList(checkinVo);//创建分页对象PageInfo<Checkin> pageInfo = new PageInfo<Checkin>(checkinList);//返回数据return new DataGridViewResult(pageInfo.getTotal(),pageInfo.getList());}}

25.3 登记入住

1.添加监听事件
checkinManager.jsp

<%-- 添加和修改窗口 --%><div style="display: none;padding: 5px" id="addOrUpdateWindow"><form class="layui-form" style="width:90%;" id="dataFrm" lay-filter="dataFrm"><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">预订编号</label><div class="layui-input-inline"><input type="text" name="ordersId" lay-verify="required" autocomplete="off" readonlyplaceholder="请选择预订订单" class="layui-input"></div><div class="layui-form-mid" style="position:relative;bottom:5px;"><button type="button" class="layui-btn layui-btn-sm" id="openOrdersWindow"><i class="layui-icon layui-icon-add-circle-fine"></i>选择订单</button></div></div></div><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">所属房型</label><div class="layui-input-inline"><input type="hidden" name="roomTypeId"><input type="text" name="roomTypeName" placeholder="请选择房型" lay-verify="required" autocomplete="off" readonly class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">房间编号</label><div class="layui-input-inline"><input type="hidden" name="roomId"><input type="text" name="roomNum" placeholder="请输入房间号码" lay-verify="required" autocomplete="off" readonly class="layui-input"></div></div></div><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">入住人</label><div class="layui-input-inline"><input type="text" name="customerName" placeholder="请输入入住人姓名" lay-verify="required" autocomplete="off" readonly class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">手机号码</label><div class="layui-input-inline"><input type="text" name="phone" placeholder="请输入手机号码"  lay-verify="required" autocomplete="off" readonly class="layui-input"></div></div></div><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">入住价格</label><div class="layui-input-inline"><input type="text" name="payPrice" placeholder="请输入入住价格" lay-verify="required" autocomplete="off" readonly class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">入住状态</label><div class="layui-input-inline"><input type="text" value="已入住" autocomplete="off" readonly class="layui-input"></div></div></div><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">入住日期</label><div class="layui-input-inline"><input type="text" name="arriveDate" placeholder="请选择入住日期" readonly autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">离店日期</label><div class="layui-input-inline"><input type="text" name="leaveDate" placeholder="请选择离店日期" readonly autocomplete="off" class="layui-input"></div></div></div><div class="layui-form-item"><label class="layui-form-label">身份证号</label><div class="layui-input-block"><input type="text" name="idCard" placeholder="请输入身份证号码" lay-verify="required" autocomplete="off" readonly class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">备注</label><div class="layui-input-block"><textarea class="layui-textarea" name="remark"></textarea></div></div><div class="layui-form-item layui-row layui-col-xs12"><div class="layui-input-block" style="text-align: center;"><button type="button" class="layui-btn" lay-submit lay-filter="doSubmit"><spanclass="layui-icon layui-icon-add-1"></span>提交</button><button type="reset" class="layui-btn layui-btn-warm"><spanclass="layui-icon layui-icon-refresh-1"></span>重置</button></div></div></form></div><!-- 选择预定订单窗口 --><div style="display: none;" id="selectOrdersWindow"><%-- 数据表格 --%><table class="layui-hide" id="ordersTableId" lay-filter="ordersTableFilter"></table></div>
  //监听头部工具栏事件table.on("toolbar(currentTableFilter)",function (obj) {switch (obj.event) {case 'checkIn':openCheckinWindow();break;}});var url,mainIndex;/*** 打开登记入住窗口*/function openCheckinWindow() {mainIndex = layer.open({type: 1,//打开类型title: "登记入住",//窗口标题area: ["800px", "570px"],//窗口宽高content: $("#addOrUpdateWindow"),//引用的内容窗口success: function () {//清空表单数据$("#dataFrm")[0].reset();//提交地址url = "/admin/checkin/addCheckin";}});}//当点击选择订单按钮时触发$("#openOrdersWindow").click(function () {var index = layer.open({type: 1,//打开类型title: "选择订单",//窗口标题area: ["1300px", "500px"],//窗口宽高maxmin: true,//开启最大化和最小化content: $("#selectOrdersWindow"),//引用的内容窗口success: function () {//清空表单数据//$("#dataFrm")[0].reset();//初始化表格数据initOrdersTableData();},btn: ['确定', '取消'],yes: function(index, layero){//判断使用有选中行var checkStatus = table.checkStatus('ordersTableId');if(checkStatus.data.length>0){//获取选中行的数据var data = checkStatus.data[0];//给表单赋值form.val("dataFrm",{//key是form表单的name属性值"ordersId":data.id//订单id,"roomTypeId": data.roomTypeId //房型ID,"roomTypeName": data.roomType.typeName //房型名称,"roomNum": data.room.roomNum   //房间号码,"roomId": data.roomId          //房间ID,"customerName": data.reservationName   //预订人姓名,"phone": data.phone    //预订人手机,"payPrice": data.reservePrice  //预订价格,"arriveDate": data.arriveDate  //入住日期,"leaveDate": data.leaveDate    //离店日期,"idCard": data.idCard  //身份证号码,"remark":data.remark //备注});//关闭窗口layer.close(index);}else{layer.msg("请选择一条订单信息");}},btn2: function(index, layero){}});});/*** 初始化预订订单表格数据*/function initOrdersTableData() {table.render({elem: '#ordersTableId',url: '${pageContext.request.contextPath}/admin/orders/list?status=2',toolbar: '#toolbarDemo',cols: [[{type: "radio", width: 50},{field: 'id', width: 100, title: '预订编号', align: "center"},{field: 'roomType', width: 100, title: '预订房型', align: "center",templet:function (d) {return d.roomType.typeName;}},{field: 'room', width: 80, title: '房间号', align: "center",templet:function (d) {return d.room.roomNum;}},{field: 'reservationName', width: 100, title: '预订人', align: "center"},{field: 'idCard', width: 170, title: '身份证号', align: "center"},{field: 'phone', width: 140, title: '手机号', align: "center"},{field: 'status', width: 80, title: '状态', align: "center",templet:function (d) {if(d.status==1){return "<font color='red'>待确认</font>";}else if(d.status==2){return "<font color='blue'>已确认</font>";}else if(d.status==3){return "<font color='orange'>入住中</font>";}else if(d.status==4){return "<font color='green'>已离店</font>";}}},{field: 'reservePrice', width: 80, title: '预订价', align: "center"},{field: 'reserveDate', width: 110, title: '预订时间', align: "center"},{field: 'arriveDate', width: 110, title: '入住日期', align: "center"},{field: 'leaveDate', width: 110, title: '离店日期', align: "center"}]],page: true,});}//监听表单提交事件form.on("submit(doSubmit)",function (data) {$.post(url,data.field,function(result){if(result.success){layer.alert(result.message,{icon:1});//刷新数据表格tableIns.reload();//关闭窗口layer.close(mainIndex);}else{layer.alert(result.message,{icon:2});}},"json");//禁止页面刷新return false;});

2.数据层
CheckinMapper.java

    /*** 添加入住信息* @param checkin* @return*/int insert(Checkin checkin);

CheckinMapper.xml

    <insert id="insert">insert into t_checkin (payPrice, roomTypeId,roomId, customerName, idCard,phone, arriveDate, leaveDate,ordersId, status, createDate,createdBy,remark)values (#{payPrice,jdbcType=DECIMAL}, #{roomTypeId,jdbcType=INTEGER},#{roomId,jdbcType=BIGINT}, #{customerName,jdbcType=VARCHAR}, #{idCard,jdbcType=VARCHAR},#{phone,jdbcType=VARCHAR}, #{arriveDate,jdbcType=DATE}, #{leaveDate,jdbcType=DATE},#{ordersId,jdbcType=BIGINT}, #{status,jdbcType=INTEGER}, #{createDate,jdbcType=TIMESTAMP},#{createdBy,jdbcType=INTEGER}, #{remark,jdbcType=VARCHAR})</insert>

RoomTypeMapper.java

    /*** 根据ID查询* @param roomId* @return*/@Select("select * from t_room where id =#{id}")Room getRoomById(Integer roomId);

3.业务层
CheckinService.java

   /*** 添加入住信息* @param checkin* @return*/int insert(Checkin checkin);

CheckinServiceImpl.java

    @Resourceprivate OrdersMapper ordersMapper;@Resourceprivate RoomTypeMapper roomTypeMapper;@Resourceprivate RoomMapper roomMapper;@Transactional(rollbackFor = RuntimeException.class)public int insert(Checkin checkin) {//设置状态checkin.setStatus(1);//入住中checkin.setCreateDate(new Date());//创建时间//调用添加入住信息的方法int count = checkinMapper.insert(checkin);//如果添加成功if(count>0){//修改预订订单信息(从已确认的状态2改成入住中3)Orders orders = new Orders();orders.setId(checkin.getOrdersId());orders.setStatus(3);//入住中//调用修改订单信息的方法ordersMapper.update(orders);//修改房型信息(在原有的已入住数量的基础上+1),预定数量-1RoomType roomType = roomTypeMapper.findById(checkin.getRoomTypeId());roomType.setLivedNum(roomType.getLivedNum()+1);roomType.setReservedNum(roomType.getReservedNum()-1);//调用修改房型的方法roomTypeMapper.updateRoomType(roomType);//修改房间状态(由已预订2改成入住中3)Room room = new Room();room.setStatus(3);room.setId(orders.getRoomId());//调用修改的方法roomMapper.updateRoom(room);}return count;}

4.后台管理的控制层
CheckinController.java

    @Resourceprivate SysUserService sysUserService;/*** 登记入住* @param checkin* @param principal* @return*/@RequestMapping("/addCheckin")public String addCheckin(Checkin checkin, Principal principal){Map<String,Object> map = new HashMap<String,Object>();//获取当前登录用户SysUser loginUser = sysUserService.getUserByUserName(principal.getName());//设置创建人checkin.setCreatedBy(loginUser.getId());//调用方法if(checkinService.insert(checkin)>0){map.put(SystemConstants.SUCCESS,true);map.put(SystemConstants.MESSAGE,"登记成功");}else{map.put(SystemConstants.SUCCESS,false);map.put(SystemConstants.MESSAGE,"登记失败");}return JSON.toJSONString(map);}

25.4 退房

1.添加监听事件
checkinManager.jsp

  table.on("tool(currentTableFilter)",function (obj) {switch (obj.event) {case 'checkout':checkout(obj.data);break;}});/*** 退房* @param data*/function checkout(data) {//判断当前入住订单状态是否为入住中1if(data.status==1){layer.confirm("确定要办理退房吗?",{icon:3,title:"提示"},function (index) {//发送请求$.post("/admin/checkout/addCheckout",{"checkInId":data.id},function(result){if(result.success){layer.alert(result.message,{icon:1});tableIns.reload();}else{layer.alert(result.message,{icon:2});}},"json");layer.close(index);});}else{layer.msg("该订单已办理退房,无需重复操作");}}

2.数据层
CheckoutMapper.java

package com.manong.dao;import com.manong.entity.Checkout;public interface CheckoutMapper {/*** 添加退房记录* @param checkout* @return*/int addCheckout(Checkout checkout);
}

CheckinMapper.java

  /*** 根据ID查询详情* @param checkInId* @return*/@Select("select * from t_checkin where id = #{checkInId}")Checkin findById(Long checkInId);/*** 修改入住订单信息* @param checkin* @return*/int update(Checkin checkin);

CheckoutMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.manong.dao.CheckoutMapper"><insert id="addCheckout">insert into t_checkout (checkOutNumber, checkInId,consumePrice, createDate, createdBy,remark)values ( #{checkOutNumber,jdbcType=VARCHAR}, #{checkInId,jdbcType=BIGINT},#{consumePrice,jdbcType=DECIMAL}, #{createDate,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=INTEGER},#{remark,jdbcType=VARCHAR})</insert>
</mapper>

CheckinMapper.xml

  <update id="update">update t_checkin<set><if test="roomTypeId != null">roomTypeId = #{roomTypeId,jdbcType=INTEGER},</if><if test="roomId != null">roomId = #{roomId,jdbcType=BIGINT},</if><if test="customerName != null">customerName = #{customerName,jdbcType=VARCHAR},</if><if test="idCard != null">idCard = #{idCard,jdbcType=VARCHAR},</if><if test="phone != null">phone = #{phone,jdbcType=VARCHAR},</if><if test="arriveDate != null">arriveDate = #{arriveDate,jdbcType=DATE},</if><if test="leaveDate != null">leaveDate = #{leaveDate,jdbcType=DATE},</if><if test="ordersId != null">ordersId = #{ordersId,jdbcType=BIGINT},</if><if test="status != null">status = #{status,jdbcType=INTEGER},</if><if test="createDate != null">createDate = #{createDate,jdbcType=TIMESTAMP},</if><if test="createdBy != null">createdBy = #{createdBy,jdbcType=INTEGER},</if><if test="modifyDate != null">modifyDate = #{modifyDate,jdbcType=TIMESTAMP},</if><if test="modifyBy != null">modifyBy = #{modifyBy,jdbcType=INTEGER},</if><if test="remark != null">remark = #{remark,jdbcType=VARCHAR},</if></set>where id = #{id,jdbcType=BIGINT}</update>

3.业务层
CheckoutService.java

package com.manong.service;import com.manong.entity.Checkout;public interface CheckoutService {/*** 添加退房记录* @param checkout* @return*/int addCheckout(Checkout checkout);
}

CheckotutServiceImpl.java

package com.manong.service.impl;import com.manong.dao.*;
import com.manong.entity.*;
import com.manong.service.CheckoutService;
import com.manong.utils.UUIDUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.util.Date;@Service
@Transactional
public class CheckoutServiceImpl implements CheckoutService {@Resourceprivate CheckoutMapper checkoutMapper;@Resourceprivate CheckinMapper checkinMapper;@Resourceprivate RoomTypeMapper roomTypeMapper;@Resourceprivate RoomMapper roomMapper;@Resourceprivate OrdersMapper ordersMapper;public int addCheckout(Checkout checkout) {checkout.setCheckOutNumber(UUIDUtils.randomUUID());//退房单号checkout.setCreateDate(new Date());//创建时间//1.向退房表(t_checkout)添加一条数据int count = checkoutMapper.addCheckout(checkout);if(count>0){//2.修改入住登记表(t_checkin)中的状态(status由1改成2已离店)Checkin checkin = checkinMapper.findById(checkout.getCheckInId());checkin.setStatus(2);//已离店//调用修改入住的方法checkinMapper.update(checkin);//3.修改房型表(t_room_type)中的可用房间数+1,入住数-1RoomType roomType = roomTypeMapper.findById(checkin.getRoomTypeId());roomType.setAvilableNum(roomType.getAvilableNum()+1);roomType.setLivedNum(roomType.getLivedNum()-1);roomTypeMapper.updateRoomType(roomType);//4.修改房间表的状态(status由3改成1)Room room = new Room();room.setId(checkin.getRoomId().intValue());room.setStatus(1);roomMapper.updateRoom(room);//修改预订表状态(t_orders)的状态【由3改成4表示已离店】Orders orders = new Orders();orders.setId(checkin.getOrdersId());orders.setStatus(4);ordersMapper.update(orders);}return count;}
}

4.后台管理的控制层
CheckoutController.java

package com.manong.controller;import com.alibaba.fastjson.JSON;
import com.manong.entity.Checkout;
import com.manong.entity.SysUser;
import com.manong.service.CheckoutService;
import com.manong.service.SysUserService;
import com.manong.utils.SystemConstants;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.security.Principal;
import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping("/admin/checkout")
public class CheckoutController {@Resourceprivate CheckoutService checkoutService;@Resourceprivate SysUserService sysUserService;/*** 添加退房记录* @param checkout* @param principal* @return*/@RequestMapping("/addCheckout")public String addCheckout(Checkout checkout, Principal principal){Map<String,Object> map = new HashMap<String,Object>();//获取当前登录用户SysUser sysUser = sysUserService.getUserByUserName(principal.getName());//设置创建人checkout.setCreatedBy(sysUser.getId());//调用添加退房记录的方法if(checkoutService.addCheckout(checkout)>0){map.put(SystemConstants.SUCCESS,true);map.put(SystemConstants.MESSAGE,"退房成功");}else{map.put(SystemConstants.SUCCESS,false);map.put(SystemConstants.MESSAGE,"退房失败");}return JSON.toJSONString(map);}}

SSM酒店管理系统项目Day20相关推荐

  1. SSM酒店管理系统项目Day2

    文章目录 7.配置文件(记得修改依赖包名) 1)在maven-dao中添加applicationContext-dao.xml,database.properties,mybatis-config.x ...

  2. SSM酒店管理系统项目Day22

    文章目录 27.页面完善 27.1 首页 27.2 基本资料 27.3 修改密码 27.页面完善 27.1 首页 首页我没写什么东西,只是放了个图片上去 desktop.jsp <%@ page ...

  3. SSM酒店管理系统项目Day6

    文章目录 11.角色管理 11.1 添加角色管理页面(同10.4) 11.2 实现角色管理的增删改查(同10.5) 11.2.1 实体类 11.2.2 数据访问层 11.2.3 业务逻辑层 11.2. ...

  4. (附源码)计算机毕业设计SSM酒店管理系统

    (附源码)计算机毕业设计SSM酒店管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intelli ...

  5. 基于SSM酒店管理系统

    1,项目功能: (1)房间管理:该模块主要实现房间信息的查询,房间信息的删除,房间信息的修改以及房间信息的查看.管理员可以在系统中查看房间列表,并对列表信息后面得编辑按钮进入编辑页面,在编辑页面把修改 ...

  6. SSM 开发酒店管理系统项目

    │  开发工具打包.rar │  数据库文件 │  最新Activation code.txt │  观看视频必读.txt │  运行必读.txt │  运行环境.txt │   ├─视频教程 │   ...

  7. SSM+酒店管理系统的设计和实现 毕业设计-附源码260839

    酒店管理系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题. ...

  8. 计算机毕业设计java+ssm酒店管理系统(源码+系统+mysql数据库+Lw文档)

    项目介绍 本酒店管理系统毕业设计的内容旨在以管理系统的方式给人们出行提供酒店客房预订服务,从而能够更方便快捷的帮助酒店工作人员办理客户入住酒店手续,解决不必要的麻烦.如何利用先进的管理手段来提高酒店的 ...

  9. 基于jsp+mysql+ssm酒店管理系统-计算机毕业设计

    项目介绍 本酒店管理系统毕业设计的内容旨在以管理系统的方式给人们出行提供酒店客房预订服务,从而能够更方便快捷的帮助酒店工作人员办理客户入住酒店手续,解决不必要的麻烦.如何利用先进的管理手段来提高酒店的 ...

最新文章

  1. 【leetcode】486. Predict the Winner
  2. django中聚合aggregate和annotate GROUP BY的使用方法
  3. 前端开发周边(js版页内锚点跳转方法)
  4. win7 VS2013 新建工程 编译lua5.1 静态库
  5. 02.操作系统概述.md
  6. linux服务器上文件编码格式转化shell
  7. 在bash中,如何检查字符串是否以某个值开头?
  8. 详解linux netstat输出的网络连接状态信息
  9. 【EMV L2】CDA复合动态数据认证/应用密文生成
  10. C程序设计实践——实验指导
  11. Java实现文件或文件夹的复制到指定目录
  12. easyexcel解析xls文件:Convert excel format exception.You can try specifying the ‘excelType‘ yourself
  13. csdn下载分获取方法
  14. WEB前端应了解的NO.IE内核浏览器
  15. 接苹果游戏 小学生邀请赛T3
  16. 留得些许清影,幽香直到人间
  17. 【LeetCode】Algorithms 题集(二)
  18. mysql如何恢复单表_MySQL如何恢复单库或单表,以及可能遇到的坑
  19. 毕业设计EMS办公管理系统(B/S结构)+J2EE+SQLserver8.0
  20. 《精力管理》读书笔记

热门文章

  1. 2018/4/18赛前心情调整
  2. 【已解决】VMware Vmware提示以独占方式锁定此配置文件失败 虚拟机开机黑屏
  3. mac安卓连接助手dmg androidfiletransfer
  4. Access操作与SQL语句:数据分组
  5. 图片上传压缩java_【java基础】压缩图片上传
  6. 头歌Beautifulsoup解析网页
  7. python升级pip版本
  8. Python爬虫之数据解析/提取(二)
  9. 伪类选择器设置奇偶数标签(1+X Web前端开发初级 例题)
  10. mpc-hc播放器在更改桌面分辨率的情况下,只有声音没有图像