100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > SSM框架之酒店管理系统十四(C端完善前台用户登录 计算日期之间的天数 房间预订)

SSM框架之酒店管理系统十四(C端完善前台用户登录 计算日期之间的天数 房间预订)

时间:2022-05-10 10:48:15

相关推荐

SSM框架之酒店管理系统十四(C端完善前台用户登录 计算日期之间的天数 房间预订)

SSM框架之酒店管理系统十四(C端完善前台用户登录、计算日期之间的天数、房间预订)

当用户点击预定的时候,判断是否有登录的session

1、修改用户登录时保存的sessuin中的key

如果不修改的话,用户登录了员工再登录就会报错因为使用了同一个LOGINUSER

SystemConstant.java中添加一个FRONT_LOGINUSER常量来表示前台用户登录的key

2、前台点击预定判断是否登录和预订窗口

在立即预定上面加上一个隐藏域获取到当前保持session中的用户登录id信息

前台点击房间详情页的立即预定判断事件

//点击立即预订按钮触发点击事件$("#bookRoomBtn").click(function () {//获取隐藏域中的用户ID值var userId = $("#currentUserId").val();//判断用户是否已经登录if(userId=="" || userId.length==0){//layer.alert("您还没有登录,请先登录!");alert("您还没有登录,请先登录!")location.href="/login.jsp";}//打开预订房间窗口mainIndex = layer.open({type: 1,//打开类型title: "预订房间",//窗口标题area: ["800px", "550px"],//窗口宽高content: $("#orderRoomWindow"),//引用的内容窗口success: function () {//清空表单数据$("#dataFrm")[0].reset();}});});

并且弹出预定的对话框

预订日期改变事件回填数据

使用到layui日期控件,需要手动的引入

/*** 计算两个日期的天数差* @param strDateStart* @param strDateEnd* @returns {number}*/function getDays(strDateStart,strDateEnd){var strSeparator = "-"; //日期分隔符Date1= strDateStart.split(strSeparator);oDate2= strDateEnd.split(strSeparator);var strDateS = new Date(Date1[0], Date1[1]-1, Date1[2]);var strDateE = new Date(oDate2[0], oDate2[1]-1, oDate2[2]);iDays = parseInt(Math.abs(strDateS - strDateE ) / 1000 / 60 / 60 /24)//把相差的毫秒数转换为天数return iDays ;}//渲染日期范围组件laydate.render({elem:"#book_date",min:"new Date()",//限定开始日期range:"至",//选择范围,内容可以自定义done:function (value,date,endDate) {//var startDate = value.substr(0,value.indexOf("至")).trim();//var endDate = value.substr(value.indexOf("至")+1,value.length).trim();var startDate = value.substr(0,value.indexOf(" ")).trim();//开始日期(入住日期)var endDate = value.substr(value.lastIndexOf(" "),value.length).trim();//结束日期(离店日期)//赋值$("#arrivedate").val(startDate);$("#leavedate").val(endDate);//计算天数差var day = getDays(startDate,endDate);//赋值入住天数$("#day").val(day);//计算房费价格var price = day * $("#price").val();//赋值价格$("#reservePrice").val(price);}});

3、创建预订数据库和实体类

CREATE TABLE `t_orders` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '预订编号',`ordersNo` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '预订单号',`accountId` bigint(20) DEFAULT NULL COMMENT '预订人账号ID',`roomTypeId` int(11) DEFAULT NULL COMMENT '房型编号',`roomId` bigint(20) DEFAULT NULL COMMENT '房间ID',`reservationName` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '预订人姓名',`idCard` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '身份证号码',`phone` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '电话号码',`status` int(11) DEFAULT NULL COMMENT '状态1-待确认 2-已确认',`reserveDate` datetime DEFAULT NULL COMMENT '预定时间',`arriveDate` date DEFAULT NULL COMMENT '到店时间',`leaveDate` date DEFAULT NULL COMMENT '离店时间',`reservePrice` decimal(10,2) DEFAULT NULL COMMENT '预订价格',`remark` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`))

创建对应的实体类Orders

public class Orders {private Integer id;//订单主键private String ordersno;//订单号private Integer accountid;//用户idprivate Integer roomtypeid;//房型IDprivate Integer roomid;//房间IDprivate String reservationname;//预订人姓名private String idcard;//身份证号码private String phone;//电话private Integer status;//订单状态 1-待确认 2-已确认private Date reservedate;//预订时间@DateTimeFormat(pattern = "yyyy-MM-dd")private Date arrivedate;//入住时间@DateTimeFormat(pattern = "yyyy-MM-dd")private Date leavedate;//离店时间private Double reserveprice;//预订房价private String remark;//备注}

4、创建OrdersMapper持久层

/*** 项目名称:ssm_hotel* 描述:预订表持久层** @author zhong* @date -05-22 12:19*/public interface OrdersMapper {/*** 添加预订信息* @param orders* @return*/int addOrders(Orders orders);}

映射文件,目前是添加预订信息

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.zcl.dao.OrdersMapper"><!--添加预订信息--><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></mapper>

5、创建OrdersService业务层

package com.zcl.service.impl;import com.zcl.dao.OrdersMapper;import com.zcl.dao.RoomMapper;import com.zcl.dao.RoomTypeMapper;import com.zcl.entity.Orders;import com.zcl.entity.Room;import com.zcl.entity.RoomType;import com.zcl.service.OrdersService;import com.zcl.service.RoomService;import com.zcl.service.RoomTypeService;import com.zcl.utils.UUIDUtils;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;import java.util.Date;/*** 项目名称:ssm_hotel* 描述:** @author zhong* @date -05-22 12:24*/@Service@Transactionalpublic class OrdersServiceImpl implements OrdersService {/*** 注入持久层*/@ResourceOrdersMapper ordersMapper;/*** 注入房间业务层*/@ResourceRoomMapper roomMapper;/*** 注入房间类型业务层*/@ResourceRoomTypeMapper roomTypeMapper;/*** 添加预订信息,添加了运行时异常就回滚* @param orders* @return*/@Transactional(rollbackFor = RuntimeException.class)public int addOrders(Orders orders) {// 1代表确认orders.setStatus(1);// 2、订单编号orders.setOrdersno(UUIDUtils.randomUUID());// 3、预订时间orders.setReservedate(new Date());int count = ordersMapper.addOrders(orders);// 判断是否修改成功if(count > 0){// 修改房间状态(1已预订)Room room = roomMapper.findById(orders.getRoomid());// 修改房间的状态room.setStatus(1);// 调用修改房间的方法roomMapper.updateRoom(room);// 修改房间类型信息【已预订+1,可使用-1】RoomType roomType = roomTypeMapper.findById(orders.getRoomid());// 修改可用房间数据量roomType.setAvilablenum(roomType.getAvilablenum()-1);// 已预订数量roomType.setReservednum(roomType.getReservednum()+1);// 调用修改方法roomTypeMapper.updateRoomType(roomType);}return count;}}

目前调用的updateRoomType修改房型的的方法还没有编写,需要到RoomTypeMapper中编写,如下就是使用注解完成的修改数据

/*** 更具房型id查询房型信息* @param id* @return*/@Select("select * from t_room_type where id = #{id};")RoomType findById(Integer id);

6、创建OrdersController控制器

package com.zcl.controller;import com.alibaba.fastjson.JSON;import com.zcl.entity.Orders;import com.zcl.service.OrdersService;import com.zcl.utils.SystemConstant;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;import java.util.HashMap;/*** 项目名称:ssm_hotel* 描述:预订控制器** @author zhong* @date -05-22 12:26*/@Controller@RequestMapping("/orders")public class OrdersController {/*** 注入业务层*/@ResourceOrdersService ordersService;/*** 添加预订信息* @param orders* @return*/@ResponseBody@RequestMapping("/addOrders")public String addOrders(Orders orders){HashMap<String, Object> map = new HashMap<String, Object>();// 调用添加方法if(ordersService.addOrders(orders) > 0){map.put(SystemConstant.SUCCESS,true);map.put(SystemConstant.MESSAGES,"酒店预订成功");}else{map.put(SystemConstant.SUCCESS,false);map.put(SystemConstant.MESSAGES,"酒店预订失败,请重试");}return JSON.toJSONString(map);}}

7、前端页面

预订窗口中的数据还缺少了三个数据,分别是用户ID、房间ID、房型ID这三个值都是需要放在隐藏域中存储的,否则添加的预订数据就会不完整,那么数据在哪里获取呢?我们点击跳转查看列表的时候,就已经根据房间的id查询详情信息了并且通过设置model返回数据

预订表单的监听事件

//监听预订表单提交事件form.on("submit(doSubmit)",function (data) {console.log(data.field)$.post("/orders/addOrders",data.field,function(result){if(result.success){layer.alert(result.message,{icon:6});//关闭窗口layer.close(mainIndex);//刷新页面window.location.reload();}else{layer.alert(result.message,{icon:5});}},"json");return false;});

==注意:==这里使用到layui的时间空间,那么在提交数据接收实体类中一定要通过@DateTimeFormat(pattern = "yyyy-MM-dd")来指定他的一个时间格式,否则就会报404服务器错误

运行测试:

当在C端点击在线预订的时候,会将数据添加到预订表中,同时会根据预订隐藏域中的房间id和房型id作为条件查询各自的信息再重新赋值修改

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。