N-128基于springboot,vue酒店管理系统

开发工具:IDEA

服务器:Tomcat9.0, jdk1.8

项目构建:maven

数据库:mysql5.7

系统分前后台,项目采用前后端分离

前端技术:vue+elementUI

服务端技术:springboot+mybatis

本系统功能包括: 

一、前台功能: 

1、用户注册模块:用户可以输入用户名、密码、昵称、姓名、手机来 进行注册。

2、用户登录模块:用户可以根据用户名、密码进行登录。

3、前台首页模块:包括广告、房间信息、酒店新闻。

4、酒店新闻模块:展示酒店标题,创建时间,详情。

5、酒店预订模块:展示了客房的详情以及评价,用户输入入住日期以及入住天数进行预订。

6、用户信息模块:展示了用户的头像、昵称、姓名、手机号码、性别并可进行修改。

7、个人订单模块:展示了全部订单、待付款订单、待入住、已入住,已退房的客房信息。

二、后台功能: 

1、管理员登录模块:管理员可以根据用户名、密码进行登录。

2、统计分析模块:管理员可以直观的查看近一周的客房数量、订单数量、用户数量。

3、会员管理模块:管理员可以查看用户的基本信息。

4、广告管理模块:管理员可以对酒店广告进行新增修改删除。

5、分类管理模块:管理员可以对客房的分类进行新增修改删除。

6、客房管理模块: 管理员可以对客房信息行增删改查。

7、房间管理模块:管理员可以查看目前所有房间的状态并对其进行增删改查。

8、订单管理模块:管理员可以找到用户提交的预订信息并进行开房和退房、查看的操作。

9、评价管理模块:管理员可以对用户的评价进行查询删除。

10、新闻管理模块:管理员可以对用户端新闻进行增删改查。

11、管理员管理模块:管理员可以对管理员的账号行增删改查。

文档截图: 

前台截图: 

后台截图:

package com.wfuhui.modules.order.service.impl;import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import com.wfuhui.modules.room.dao.HouseDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import com.wfuhui.common.utils.NumberUtil;
import com.wfuhui.modules.member.dao.MemberDao;
import com.wfuhui.modules.order.dao.OrderDao;
import com.wfuhui.modules.order.dao.OrderHouseDao;
import com.wfuhui.modules.order.entity.OrderEntity;
import com.wfuhui.modules.order.entity.OrderHouseEntity;
import com.wfuhui.modules.order.service.OrderService;
import com.wfuhui.modules.room.dao.RoomDao;
import com.wfuhui.modules.room.dao.RoomRecordDao;
import com.wfuhui.modules.room.entity.RoomEntity;
import com.wfuhui.modules.room.entity.RoomRecordEntity;@Service("orderService")
public class OrderServiceImpl implements OrderService {@Autowiredprivate OrderDao orderDao;@Autowiredprivate OrderHouseDao orderHouseDao;@Autowiredprivate RoomDao roomDao;@Autowiredprivate RoomRecordDao roomRecordDao;@Autowiredprivate MemberDao memberDao;@Autowiredprivate HouseDao houseDao;@Overridepublic OrderEntity queryObject(Integer id){OrderEntity order = orderDao.queryObject(id);order.setMember(memberDao.queryObject(order.getMemberId()));Map<String, Object> params = new HashMap<String, Object>();params.put("orderId", order.getId());List<OrderHouseEntity> orderHouseList = orderHouseDao.queryList(params);order.setOrderHouseList(orderHouseList);return order;}@Overridepublic List<OrderEntity> queryList(Map<String, Object> map){List<OrderEntity> orderList = orderDao.queryList(map);for (OrderEntity orderEntity : orderList) {Map<String, Object> params = new HashMap<String, Object>();params.put("orderId", orderEntity.getId());List<OrderHouseEntity> orderHouseList = orderHouseDao.queryList(params);orderEntity.setOrderHouseList(orderHouseList);}return orderList;}@Overridepublic int queryTotal(Map<String, Object> map){return orderDao.queryTotal(map);}@Overridepublic void save(OrderEntity order){orderDao.save(order);}@Overridepublic void update(OrderEntity order){orderDao.update(order);}@Overridepublic void delete(Integer orderId){orderDao.delete(orderId);}@Overridepublic void deleteBatch(Integer[] orderIds){orderDao.deleteBatch(orderIds);}@Override@Transactionalpublic void createOrder(OrderEntity order) {order.setOrderNumber(NumberUtil.getOrderNumber());orderDao.save(order);List<OrderHouseEntity> orderHouseList = order.getOrderHouseList();for (OrderHouseEntity orderHouseEntity : orderHouseList) {orderHouseEntity.setOrderId(order.getId());orderHouseDao.save(orderHouseEntity);}}@Overridepublic void updateByOrderNumber(OrderEntity order) {orderDao.updateByOrderNumber(order);}@Overridepublic List<Map<String, String>> queryOrderCount() {return orderDao.queryOrderCount();}@Override@Transactionalpublic void orderRoom(OrderEntity order) {orderDao.update(order);RoomEntity room = new RoomEntity();room.setRoomNumber(order.getRoomNumber());room.setStatus(2);roomDao.updateByRoomNumber(room);RoomRecordEntity roomRecord = new RoomRecordEntity();roomRecord.setCreateTime(new Date());roomRecord.setRoomNumber(order.getRoomNumber());roomRecord.setMemberId(orderDao.queryObject(order.getId()).getMemberId());roomRecord.setStartTime(new Date());roomRecord.setOrderId(order.getId());roomRecordDao.save(roomRecord);}@Override@Transactionalpublic void returnRoom(OrderEntity order) {orderDao.update(order);RoomEntity room = new RoomEntity();room.setRoomNumber(order.getRoomNumber());room.setStatus(1);RoomRecordEntity roomRecord = roomRecordDao.queryByOrderId(order.getId());room.setRoomNumber(roomRecord.getRoomNumber());roomDao.updateByRoomNumber(room);roomRecord.setEndTime(new Date());roomRecordDao.update(roomRecord);}@Overridepublic void delHouseVolume(Integer oid) {Map<String, Object> map = new HashMap<String, Object>();map.put("orderId", oid);List<OrderHouseEntity> orderHouseList = orderHouseDao.queryList(map);if(orderHouseList!=null && !orderHouseList.isEmpty()){OrderHouseEntity houseEntity = orderHouseList.get(0);Integer houseId = houseEntity.getHouseId();houseDao.delVolume(houseId,1);}}}

 

<template><div><el-container><el-header><mainHeader></mainHeader></el-header><el-container><mainSidebar :active="active"></mainSidebar><el-main><el-row :gutter="12"><el-col :span="8"><el-card shadow="always">客房数量<div class="statistics">{{statistics.houseTotal}}</div></el-card></el-col><el-col :span="8"><el-card shadow="always">用户数量<div class="statistics">{{statistics.userTotal}}</div></el-card></el-col><el-col :span="8"><el-card shadow="always">订单数量<div class="statistics">{{statistics.orderTotal}}</div></el-card></el-col></el-row><el-row><div id="main" style="width: 100%;height:400px;"></div></el-row></el-main></el-container></el-container></div>
</template>
<script>
import echarts from 'echarts'
import mainHeader from '../../components/admin-main-header'
import mainSidebar from '../../components/admin-main-sidebar'
export default {name: "AdminIndex",data() {return {statistics: {},user: null,asideStyle: {height: '500px'},active: '1'};},components: {mainHeader,mainSidebar},methods:{logout: function(){localStorage.removeItem("auser");this.$router.push("admin_login");},query: function() {var that = this;this.$axios.get(this.domain + "/statistics/query", {headers: {'token': localStorage.getItem("atoken")}}).then(function(res){var r = res.data;//console.log(r)if(r.code == 0){that.statistics = r.statistics;// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('main'));// 指定图表的配置项和数据var option = {title: {text: ''},tooltip: {},legend: {data:['销量']},xAxis: {data: r.statistics.orderCountList.map(function(v){return v.createTime})},yAxis: {minInterval: 1,},series: [{name: '订单数量',type:'line',data: r.statistics.orderCountList.map(function(v){return v.count})}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);}})}},created(){var docHeight = document.documentElement.clientHeight;this.asideStyle.height = docHeight - 76 + "px";var user = localStorage.getItem("auser");if(user){this.user = JSON.parse(user);}else{this.$router.push("admin_login");}this.query();}
};
</script><style scoped>
.statistics{font-size: 20px; margin-top: 10px; font-weight: blod
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/165392.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么恢复移走的u盘数据?可以尝试这三种方法

当意外移走U盘上的数据时&#xff0c;我们常常会感到焦虑和失望&#xff0c;特别是当这些数据对我们仍然重要时。不过&#xff0c;您不必完全放弃&#xff0c;因为本文将介绍一些方法&#xff0c;以帮助您恢复U盘上的重要数据。 图片来源于网络&#xff0c;如有侵权请告知 移走…

uniapp 安装 u-view 组件库

u-view 组件库安装教程&#xff1a;https://uviewui.com/components/install.html 注&#xff1a;以下使用 HBuilderx 安装 u-view 2.0 版本&#xff0c;不适用于其它版本。 1.安装 u-view 组件库 2、注册并登录 HBuilderx 账号&#xff0c;点击下载 u-view 组件库。 3、点击…

2024年仁爱学院专升本招生专业对应范围专业目录更新的通知

天津仁爱学院2024年高职升本科招生专业对应范围专业目录 为了更好的进行天津仁爱学院专升本工作&#xff0c;动画专业不分文理进行录取。为了进一步提升录取专业的培养需要&#xff0c;请同学们复习专业课时加强专业课学习&#xff0c;请同学们在报考时关注天津仁爱学院招生章…

Pytorch从零开始实战06

Pytorch从零开始实战——明星识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——明星识别环境准备数据集模型选择开始训练模型可视化模型预测总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch2.0.1c…

线性代数3:矢量方程

一、前言 欢迎回到系列文章的第三篇文章&#xff0c;内容是线性代数的基础知识&#xff0c;线性代数是机器学习背后的基础数学。在我之前的文章中&#xff0c;我介绍了梯队矩阵形式。本文将介绍向量、跨度和线性组合&#xff0c;并将这些新想法与我们已经学到的内容联系起来。本…

vmware 16pro安装 mac10.14.6,期间遇到的问题

1、分配硬盘内存尽量分大点&#xff0c;建议是40g&#xff0c;我分了80g&#xff0c;后面下载解压xcode发现还不够&#xff0c;又增加最后分了120g 2、安装过程&#xff0c;卡在选语言的地方&#xff0c;鼠标和键盘无法操作。需要在虚拟机设置中&#xff0c;勾选以下选项“显示…

SpringBoot 打包与运行

一、SpringBoot 程序打包 1、在Springboot工程 pom文件中&#xff0c;引入 spring-boot-maven-plugin 插件。 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifact…

视频SDK开发,多平台SDK快速接入

随着科技的不断发展&#xff0c;视频已经成为了企业业务中不可或缺的一部分。无论是在线教育、企业培训还是产品展示&#xff0c;视频都发挥着至关重要的作用。为了满足企业对视频应用的需求&#xff0c;美摄视频SDK应运而生&#xff0c;为企业提供了一站式的视频解决方案。 一…

[架构之路-240]:目标系统 - 纵向分层 - 应用层 - 应用层协议与业务应用程序的多样化,与大自然生物的丰富多彩,异曲同工

目录 前言&#xff1a; - 倒金子塔结构 - 大自然的组成 一、应用层在计算机系统中的位置 1.1 计算机应用程序的位置 1.1.1 业务应用程序概述 1.1.2 应用程序的分类 - 按照计算机作用范围 1.1.3 业务应用程序分类 - 按照行业分类 1.2 网络应用协议的位置 1.2.1 网络协…

浏览器的四种缓存协议

❤️浏览器缓存 在HTTP里所谓的缓存本质上只是浏览器和业务侧根据不同的报文字段做出不同的缓存动作而已 四种缓存协议如下 Cache-ControlExpiresETag/If-None-MatchLast-Modified/If-Modified-Since &#x1f3a1;Cache-Control 通过响应头设置Cache-Control和max-age&…

React基础: 项目创建 JSX 基础语法 React基础的组件使用 useState状态 基础样式控制

01 React 文章目录 01 React一、React是什么1、React的优势 二、React开发环境搭建1、创建项目2、运行项目3、项目的目录结构 三、JSX基础1、什么是 JSX代码示例&#xff1a; 2、JSX使用场景2.1代码示例&#xff1a; 3、JSX中实现列表渲染4、JSX - 实现基本的条件渲染5、JSX - …

最新Ai写作创作系统源码+Ai绘画系统源码+搭建部署教程+支持GPT4.0+支持Prompt预设应用+思维导图生成

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

Damask使用指南-Hcp结构(镁(考虑孪晶))孪晶如何加入

1&#xff0c;首先利用geom布种子&#xff0c;种子数为40&#xff0c;模型空间尺寸为64*64*1&#xff08;表示二维平面问题&#xff09;代码&#xff1a; 2&#xff0c;根据布种区域生成voronoi镶嵌的晶体结构 代码&#xff1a; 3 检查结构是否正确生成 4&#xff0c;利用dama…

MySQL 性能分析

MySQL 性能分析 对 mysql 进行性能分析&#xff0c;主要就是提升查询的效率&#xff0c;其中索引占主导地位。对 mysql 进行性能分析主要有如下几种方式&#xff1a; 方式一&#xff1a;查看 sql 执行频次 show global status like ‘Com_______’; // global 表示全局 show s…

模拟器-雷电-使用adb push或adb pull操作文件

一、环境 windows 10 雷电模拟器4.0.83 二、问题 有时候我们会需要往模拟器拷贝文件或者复制文件到我的电脑 三、方法 1、获取root权限 adb root adb remount 有可能遇到【daemon not running; starting now at tcp:5037】的报错 查看端口占用进程&#xff1a;netstat -…

国产低功耗MCU芯片:Si24R03

Si24R03集成了基于RISC-V核的低功耗MCU和工作在2.4GHz ISM频段的无线收发器模块&#xff0c;是一款高度集成的低功耗SOC片。 应用领域&#xff1a; 1、物联网 2、智N门锁 3、电机控制 4、消费电子 5、工业控制 其无线收发器模块是专为低功耗无线场合设计&#xff0c;在关…

24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

开箱即用的Appimage是什么以及如何建立快捷方式

1 引言 在使用Linux系统过程中&#xff0c;初学者会遇到无穷多的问题&#xff0c;包括软件的安装问题。 ubuntu的deb,centos的rpm, 当然以及需要解压的tar.gz等等。有一种开箱即用的软件安装类型&#xff0c;格式为Appimage。 AppImage 的官方网站是 AppImage | Linux apps tha…

Spring framework day 02:Spring 整合 Mybatis

前言 在现代软件开发中&#xff0c;数据持久化是一个重要的环节。为了高效、可维护地管理和操作数据库&#xff0c;许多开发者采用了Spring框架和Mybatis持久化框架的组合。Spring提供了依赖注入和面向切面编程等特性&#xff0c;而Mybatis则是一个优秀的对象关系映射&#xf…

力扣每日一题49:字母异位词分组

题目描述&#xff1a; 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate&quo…