SSM框架之酒店管理系统十五(B端预定管理)

SSM框架之酒店管理系统十五(B端预定管理)

如果还没有订单管理就要到后台添加对应的菜单信息和预定管理的跳转路径

1、在SystemController控制器中添加去到预定管理的控制器

/**
 * 去到预定管理页面
 * @return
 */
@RequestMapping("/toOrdersManager")
public String toOrdersManager(){
    return "admin/orders/ordersManager";
}

前提是需要在webapp.WEB-INF.js.admin.orders文件下有ordersManager.jsp页面,否则是跳转不了的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cFBedD1g-1653259015593)(image/40、预订管理.png)]

2、预订管理查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g6zorM7Q-1653259015594)(image/41、预订数据查询.png)]

  1. 创建分页查询的预订VO类

    public class OrdersVo extends Orders {
        /**
         * 当前页码
         */
        private Integer page;
        /**
         * 每页显示数量
         */
        private Integer limit;
        /**
         * 开始日期
         */
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        private Date startDate;
        /**
         * 结束日期
         */
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        private Date endDate;
    }
    
  2. 修改Orders实体类

    目前修改了字段的属性大写了,需要修改用户提交信息的表单name值,否则回接收不到数据,或者是不修改实体,都可以

    package com.zcl.entity;
    
    import com.fasterxml.jackson.annotation.JsonFormat;
    import lombok.Data;
    import lombok.ToString;
    import org.springframework.format.annotation.DateTimeFormat;
    
    import java.util.Date;
    
    @Data
    @ToString
    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-已确认
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        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;//备注
        //房间对象
        private String roomNum;
        //房型对象
        private String typeName;
    
    }
    

    同时也需要修改搜索区域的nane值

  3. OrdersMapper

    package com.zcl.dao;
    
    import com.zcl.entity.Orders;
    import com.zcl.entity.vo.OrdersVo;
    
    import java.util.List;
    
    /**
     * 项目名称:ssm_hotel
     * 描述:预订表持久层
     *
     * @author zhong
     * @date 2022-05-22 12:19
     */
    public interface OrdersMapper {
        /**
         * 分页查询预订订单列表
         * @param vo
         * @return
         */
        List<Orders> findOrdersList(OrdersVo vo);
    
        /**
         * 添加预订信息
         * @param orders
         * @return
         */
        int addOrders(Orders orders);
    }
    

    映射文件

    <?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.zcl.dao.OrdersMapper">
    
    
        <!--分页查询预订信息列表-->
        <select id="findOrdersList" resultType="com.zcl.entity.Orders">
            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>
    
        <!--添加预订信息-->
        <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>
    

    上面的映射文件同时也包含了用户预订时插入的数据

  4. OrdersService

    package com.zcl.service;
    
    import com.zcl.entity.Orders;
    import com.zcl.entity.vo.OrdersVo;
    
    import java.util.List;
    
    /**
     * 项目名称:ssm_hotel
     * 描述:预订业务层
     *
     * @author zhong
     * @date 2022-05-22 12:23
     */
    public interface OrdersService {
        /**
         * 分页查询预订订单列表
         * @param vo
         * @return
         */
        List<Orders> findOrdersList(OrdersVo vo);
    
        /**
         * 添加预订信息
         * @param orders
         * @return
         */
        int addOrders(Orders orders);
    }
    
    

    接口实现类

    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.entity.vo.OrdersVo;
    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;
    import java.util.List;
    
    /**
     * 项目名称:ssm_hotel
     * 描述:
     *
     * @author zhong
     * @date 2022-05-22 12:24
     */
    @Service
    @Transactional
    public class OrdersServiceImpl implements OrdersService {
        /**
         * 注入持久层
         */
        @Resource
        OrdersMapper ordersMapper;
    
        /**
         * 注入房间业务层
         */
        @Resource
        RoomMapper roomMapper;
    
        /**
         * 注入房间类型业务层
         */
        @Resource
        RoomTypeMapper roomTypeMapper;
    
        /**
         * 分页查询预订订单列表
         * @param vo
         * @return
         */
        public List<Orders> findOrdersList(OrdersVo vo) {
            System.out.println("业务员层在执行查询");
            return ordersMapper.findOrdersList(vo);
        }
    
        /**
         * 添加预订信息,添加了运行时异常就回滚
         * @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;
        }
    }
    
    
  5. OrdersAdminController

    package com.zcl.controller.admin;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.zcl.entity.Menu;
    import com.zcl.entity.Orders;
    import com.zcl.entity.vo.MenuVo;
    import com.zcl.entity.vo.OrdersVo;
    import com.zcl.service.OrdersService;
    import com.zcl.utils.DataGridViewResult;
    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.List;
    
    /**
     * 项目名称:ssm_hotel
     * 描述:预订管理控制器
     *
     * @author zhong
     * @date 2022-05-22 19:26
     */
    @RestController
    @RequestMapping("/admin/orders")
    public class OrdersAdminController {
        @Resource
        OrdersService ordersService;
    
        /**
         * 查询订单列表
         * @param ordersVo
         * @return
         */
        @ResponseBody
        @RequestMapping("/list")
        public DataGridViewResult list(OrdersVo ordersVo){
            //设置分页信息
            PageHelper.startPage(ordersVo.getPage(),ordersVo.getLimit());
            //调用分页查询订单列表的方法
            List<Orders> ordersList = ordersService.findOrdersList(ordersVo);
            for (Orders orders : ordersList) {
                System.out.println("查询的预订数据:"+orders);
            }
            //创建分页对象
            PageInfo<Orders> pageInfo = new PageInfo<Orders>(ordersList);
            //返回数据
            return new DataGridViewResult(pageInfo.getTotal(),pageInfo.getList());
        }
    }
    
    
  6. 前端页面接口编写

    需要注意的时,layui接接口对应的是属性字段

3、确认订单

  1. OrdersMapper

    /**
     * 确认订单
     * @param orders
     * @return
     */
    int updateOrders(Orders orders);
    

    映射文件

    <!--确认订单-->
    <update id="updateOrders">
        update t_orders
        <set>
            <if test="orderSno != null">
                ordersNo = #{orderSno},
            </if>
            <if test="accountId != null">
                accountId = #{accountId},
            </if>
            <if test="roomTypeId != null">
                roomTypeId = #{roomTypeId},
            </if>
            <if test="roomId != null">
                roomId = #{roomId},
            </if>
            <if test="reservationName != null">
                reservationName = #{reservationName},
            </if>
            <if test="idCard != null">
                idCard = #{idCard},
            </if>
            <if test="phone != null">
                phone = #{phone},
            </if>
            <if test="status != null">
                status = #{status},
            </if>
            <if test="reserveDate != null">
                reserveDate = #{reserveDate},
            </if>
            <if test="arriveDate != null">
                arriveDate = #{arriveDate},
            </if>
            <if test="leaveDate != null">
                leaveDate = #{leaveDate},
            </if>
            <if test="reservePrice != null">
                reservePrice = #{reservePrice},
            </if>
            <if test="remark != null">
                remark = #{remark},
            </if>
        </set>
        where id = #{id}
    </update>
    
  2. OrdersService实现类

    /**
     * 确认订单信息
     * @param orders
     * @return
     */
    public int updateOrders(Orders orders) {
        return ordersMapper.updateOrders(orders);
    }
    
  3. OrdersController

    /**
     * 确认入住
     * @param orders
     * @return
     */
    @RequestMapping("/confirmOrders")
    public String confirmOrders(Orders orders){
        HashMap<String, Object> map = new HashMap<String, Object>();
        // 修改订单的状态
        orders.setStatus(2);
        // 调用修改的方法
        if(ordersService.updateOrders(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);
    }
    
  4. 前端页面请求

    // 预订确认事件
    function confirmOrders(data) {
        // 判断当前的状态
        if(data.status ==1){
            // 发送请求
            $.post("/admin/orders/confirmOrders",{"id":data.id},function (result) {
                if(result.succser){
                    // 刷新表格数据
                    tableIns.reload();
                }
                layer.msg(result.messages);
            },"json");
        }else {
            layer.msg("该订单已确认,无需重复操作");
        }
    }
    
  5. 批量确认订单

    1. 前端页面请求获取复选框的数据

      // 批量监听事件
      function barchConfim() {
          // 获取选中行
          var checkStatus = table.checkStatus('currentTableId'); //idTest 即为基础参数 id 对应的值
          //获取选中行数量,可作为是否有选中行的条件
          var lengths = checkStatus.data.length;
          if( lengths > 0){
              // 判断包含或与入住的
              for (var i = 0; i < lengths; i++) {
                  if(checkStatus.data[i].status != 1){
                      layer.alert("只能批量待确认的订单");
                      return;
                  }
              }
      
              // 提示用户是否确认
              layer.confirm("确定要批量确认这些订单吗",{icon:3,title:"提示"},function (index) {
                  // 获取选中行的数据
                  var data = checkStatus.data;
                  // 声明数组存储批量确认的id
                  var idsArr = [];
                  // 循环获取到待确认的id
                  for (var i = 0; i < lengths; i++) {
                      // 将选中行的id放到数组中
                      idsArr.push(data[i].id);
                  }
                  // 将数组转换层字符串
                  var ids = idsArr.join(",");
                  // 发送请求
                  $.post("/admin/orders/barchConfim",{"ids":ids},function (result) {
                      if(result.succser){
                          // 刷新表格数据
                          tableIns.reload();
                      }
                      layer.msg(result.messages);
                  },"json");
              });
          }else {
              layer.msg("请选择需要确认的订单");
          }
      }
      
    2. OrdersAdminController控制器

      因为前面点击确认请求时,已经完成了持久层和业务层的创建,所以在控制器中直接调用数据修改就可以了的

      /**
       * 批量确认入住
       * @param ids
       * @return
       */
      @RequestMapping("/barchConfim")
      public String barchConfim(String ids){
          HashMap<String, Object> map = new HashMap<String, Object>();
          int count = 0;
          // 将字符串拆分成数组
          String[] idsStr = ids.split(",");
          // 循环确认
          for (int i = 0; i < idsStr.length; i++) {
              // 创建对象【修改状态和查询条件】
              Orders orders = new Orders();
              orders.setId(Integer.valueOf(idsStr[i]));
              orders.setStatus(2);
              // 调用修改方法
              count = ordersService.updateOrders(orders);
              // 判断受影响的行数
              if(count > 0){
                  map.put(SystemConstant.SUCCESS,true);
                  map.put(SystemConstant.MESSAGES,"订单确认成功");
              }
          }
          if(count <= 0){
              map.put(SystemConstant.SUCCESS,false);
              map.put(SystemConstant.MESSAGES,"订单确认失败");
          }
          return JSON.toJSONString(map);
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钟要学习!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值