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.mzph.cn/news/112184.shtml

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

相关文章

HarmonyOS 音视频开发概述

在音视频开发指导中&#xff0c;将介绍各种涉及音频、视频播放或录制功能场景的开发方式&#xff0c;指导开发者如何使用系统提供的音视频 API 实现对应功能。比如使用 TonePlayer 实现简单的提示音&#xff0c;当设备接收到新消息时&#xff0c;会发出短促的“滴滴”声&#x…

零基础新手也能会的H5邀请函制作教程

随着科技的的发展&#xff0c;H5邀请函已经成为了各种活动、婚礼、会议等场合的常见邀约方式。它们不仅可以提供动态、互动的体验&#xff0c;还能让邀请内容更加丰富多彩。下面&#xff0c;我们将通过乔拓云平台&#xff0c;带领大家一步步完成H5邀请函的制作。 1. 选择可靠的…

Leetcode 21 合并两个有序链表 (链表)

Leetcode 21 合并两个有序链表 &#xff08;链表&#xff09; 解法1 复杂的第一版本&#xff08;优化大于和等于合并见方法二&#xff09;解法2 注意注意&#xff1a;先添加元素toadd.next list1&#xff0c;添加之后才可以移动指针toadd toadd.next 解法1 复杂的第一版本&a…

【Java 进阶篇】深入了解 Bootstrap 按钮和图标

按钮和图标在网页设计中扮演着重要的角色&#xff0c;它们是用户与网站或应用程序交互的关键元素之一。Bootstrap 是一个流行的前端框架&#xff0c;提供了丰富的按钮样式和图标库&#xff0c;使开发者能够轻松创建吸引人的界面。在本文中&#xff0c;我们将深入探讨 Bootstrap…

【Python生活脚本】视频转Gif动图

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-10-20 ❤️❤️ 本篇更新记录 2023-10-20 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…

pytorch nn.Embedding 读取gensim训练好的词/字向量(有例子)

最近在跑深度学习模型&#xff0c;发现Embedding随机性太强导致模型结果有出入&#xff0c;因此考虑固定初始随机向量&#xff0c;既提前训练好词/字向量&#xff0c;不多说上代码&#xff01;&#xff01; 1、利用gensim训练字向量&#xff08;词向量自行修改&#xff09; #…

谷歌云:下一代开发者和企业解决方案的强力竞争者

自从2018年Oracle前研发总裁Thomas Kurian加入谷歌云&#xff08;Google Cloud&#xff09;并出任谷歌云CEO以来&#xff0c;业界对于谷歌云的发展就十分好奇。而谷歌云的前任CEO Diane Greene曾是VMware的创始人之一&#xff0c;那么两任企业级技术和解决方案出身的CEO&#x…

windows上下载github上的linux内核项目遇到的问题

问题一&#xff1a;clone的时候报错 Cloning into G:\github\linux... POST git-upload-pack (gzip 27925 to 14032 bytes) remote: Counting objects: 6012062, done. remote: Compressing objects: 100% (1031/1031), done. remote: Total 6012062 (delta 893), reused 342 (…

计算机缺失d3dcompiler_47.dll解决方案,如何修复电脑缺失d3d文件

在计算机系统中&#xff0c;DLL文件&#xff08;动态链接库&#xff09;是一种重要的共享库&#xff0c;它包含了可被多个程序使用的代码和数据。然而&#xff0c;当某些DLL文件丢失或损坏时&#xff0c;可能会导致程序无法正常运行。本文将介绍四种解决D3DCompiler_47.dll缺失…

QT学习day4

作业&#xff1a;做一个闹钟 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给定时器指针实例化一个对象timer new QTimer(this);//给语音播报者实例化一个…

总结一下vue中v-bind的常见用法

文章目录 &#x1f415;前言&#xff1a;&#x1f3e8;简述一下v-bind命令其它写法 &#x1f415;前言&#xff1a; 本篇博客主要总结一下v-bind命令在vue中的常见用法 &#x1f3e8;简述一下v-bind命令 v-bind命令是将动态的数据属性与咱们的标签进行一个绑定,它可以绑定标…

【Unity3D编辑器拓展】Unity3D的IMGUI、GUI、GUILayout、EditorGUI、EditorGUILayout、OnGUI【全面总结】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;常常会遇到要使用OnGUI的地方。 也会遇到…

基础课2——自然语言处理

1.概念 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是计算机科学领域与人工智能领域中的一个重要方向&#xff0c;它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理的主要研究方向包括&#xff1a; 语言学研究&…

我们不一样①

我们不一样① 从hello world开始 别人的hello world​​ 我们的hello world 代码展示 #include <stdio.h> int main(){printf("\033[31mhello world\033[0m"); getchar();return 0; } 此处用了 ANSI转义序列 ANSI转义序列是一种带内信号的转义序列标准&am…

【electron】实战技巧(持续更新,不要错过喔)

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境 1️⃣ nvm处理多node环境避免node版本切换指定32位/64位 2️⃣ 常用node库npm-run-all&#xff08;脚本运行工具&#xff09;cross-env&#xff08;配置环境变量&#xff09;dotenv&#xff08;配置文件&#xff09;minimist&#x…

Apollo中的身份验证与授权:保护你的数据

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

模拟器-雷电-使用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 -…

Linux--进程终止

1.进程退出场景 进程退出场景只有三种&#xff1a; 代码运行完毕&#xff0c;结果正确代码运行完毕&#xff0c;结果错误代码在运行期间异常中断&#xff0c;退出进程 比如&#xff1a;对于错误的进程&#xff0c;可以通过不同的返回值来确定&#xff0c;什么是错误码呢&#x…

腾讯云 CODING 快速应用中心,让您 10 分钟轻松玩转 AIGC

点击链接了解详情 前言 AI 时代已经到来&#xff0c;与其说这是一个技术变革&#xff0c;不如说这是对我们工作和生活方式的全面升级。很多人已经听说过 Stable Diffusion AI 绘图和 Meta 公司推出的免费大语言模型 Llama 2&#xff0c;它们代表了当今最前沿的技术水平。但对于…

idea2023配置maven

看过【黑马程序员Maven全套教程&#xff0c;maven项目管理从基础到高级&#xff0c;Java项目开发必会管理工具maven】https://www.bilibili.com/video/BV1Ah411S7ZE?p9&vd_sourceedf9d91e5a0a27db51e3d6d4b9400637 配置的&#xff0c;前提要素配置也在这个课程里有啦&…