# lvma酒店 **Repository Path**: abalonel/lvmaHotel ## Basic Information - **Project Name**: lvma酒店 - **Description**: 旅马酒店是对途牛旅游网和马蜂窝网分析后创建的一个以预定酒店为主题的网站,使用SpringBoot开发,前端统一采用引入vue.js、axios.js以及element-ui样式,编写页面,对接接口;后端框架使用SpringBoot框架查看对应的其他组件版本,统一后端依赖版本号。主要有优惠券服务端模块、酒店系统模块、订单系统模块、评论模块、个人中心模块。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 23 - **Forks**: 1 - **Created**: 2022-11-18 - **Last Updated**: 2026-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 旅马酒店 #### 项目简介 旅马酒店是一个仿照途牛开发的项目,在这里,用户注册并登录该平台后, 会根据酒店被收藏数量进行门店推荐,之后用户便可根据门店名进行预定想要居住的酒店。 用户进行搜索之后可以根据酒店的价格以及评分进行筛选自己所需要的酒店,用户进入酒店页面之后,可以查看酒店详情、评论、推荐酒店等等,在选择完自己入住的时间以及个人信息之后便可以进行预定了,预定成功之后可以提交订单、提交订单需要用户的姓名以及手机号,这边的支付使用的是沙箱支付,支付完成后,会返回给用户一个流水号,之后用户可以在个人中心页面看到自己的订单信息,同时用户还可以领取优惠劵在预定房间的时候进行使用,用于提升用户体验。 #### 项目功能思维导图 #### 开发者 **林天宇、马永春** #### 项目收获 1.通过完成这个项目锻炼了我们小组个人独立思考和解决问题的能力,在自己负责的业务上都有自己的想法,同时通过各个模块的交互开发,锻炼了我们的团队协作能力。 2.在一些复杂的业务上锻炼了逻辑思维能力,养成了做业务之前先梳理逻辑的习惯,在书写业务代码之前,先画思维导图,理清楚业务的整个逻辑以及每一步应该做什么,同时遇到自己解决不了的问题,小组也会开会讨论,小组业务出现分歧的时候,出现分歧的组员也会进行逻辑辩论,最终一起商量出一个最适合项目开发的解决方案。 3.项目当中很多自己负责的技术都是通过查看GitHub上的源码以及一些技术博客进行学习使用的。 4.使我对 Java 有了新的了解与认识,巩固了 Java 技术知识。 5.遇到好多有趣的高并发场景并且都独立解决了这些问题,增加了我对开发项目的兴趣与自信。 6.增强了我的责任心,身为组长,成员出现问题时候我都会积极去解决,这也使得我解决问题能力越来越好。 #### 软件架构说明 该项目用到的框架是 Spring Boot 2.6.11 持久层由 Mybatis 逆向工程生成 数据库使用的是 MySQL 8.0.28 #### 用到的技术 Java、Mybatis-plus、SpringBoot、RabbitMQ、Redis、WebSocket、Mysql、MongoDB、ElasticSearch、Scheduled、Mahout、七牛云、阿里云手机验证、沙箱环境支付、百度地图API、RSA+AES双重加密、 jQuery、HTML、CSS、Ajax、Vue #### 系统要求 JDK == 1.8 MySQL >= 8 Redis RabbitMQ MongoDB ElasticSearch #### 项目功能介绍 1.注册登录 这里使用了阿里云手机验证,用户可以通过手机号进行接收验证码进行登录 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/image-20221109093641995.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/image-20221109093805332.png) 2.主页使用了Redis热数据加载 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/image-20221109094034732.png) 3.酒店查询页面 ​ 用户可以通过酒店信息对满足条件的酒店进行查询,这边使用了ElasticSearch进行分词搜索。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/image-20221109094225136.png) 4.酒店地址 ​ 这里调用了百度地图的接口,用户可以查看自己当前位置以及指定酒店的位置。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/image-20221109094411764.png) 5.用户收藏酒店 用户点击收藏按钮会将用户名存储到Redis对应的酒店点赞表当中,每次用户进入该页面系统会发送一个请求用于判断用户是否已经点赞,如果点赞则CSS样式发生变动。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997615815.png) 6.个人中心优惠劵临近过期提醒 用户获取优惠劵则会将对应的优惠劵存入到消息队列当中(过期时间为优惠劵过期时间前三天),一旦消息过期,则通过WebSocket提醒用户,有优惠劵将要过期,同时将此优惠劵再次放入新的消息队列,设置统一的过期时间为三天,如果过期,则代表优惠劵已过期,修改优惠劵状态。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997643705.png) 7.用户发表评论 用户进行支付订单之后,个人中心当中将会生成该订单数据,可以点击评论进行评价操作,评价内容以及评分将会展示在下订单的酒店评论区域。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997653355.png) 8.用户回复评论并发送消息告诉被回复用户 用户进行回复,会将消息存储的MongoDB当中,同时会通过WebSocket对被回复的用户进行消息通知。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667996978888.png) 9.用户评论的点赞功能 在酒店详情页面的评论部分,这里用户可以给那些评论点赞。这里的点赞我们通过Redis缓存实现的。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667996978888.png) 10.订单削峰限流 订单创建通过消息队列,队列长度设置为100,超过100次访问则不进入队列,重新发送消息直到完成一些业务。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667996992346.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667996997089.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997013938.png) 11.订单削峰限流 订单创建通过消息队列,队列长度设置为100,超过100次访问则不进入队列,重新发送消息直到完成一些业务。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997146269.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997150463.png) 12.房间锁 在某一个用户正在操作一间房间时,其他请求无法访问该房间。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997176800.png) 13.用户中心,我的优惠卷,我的收藏,我的订单 在这里用户可以查看自己的信息。 在这里用户可以查看自己领取的优惠券。 在这里用户可以查看自己收藏的酒店。 在这里用户可以查看自己的订单。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997194381.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997200473.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997204312.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997207302.png) 14.订单详情 支付完成后将会跳转条订单详情页面。 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997245364.png) 15.通过延迟队列实现订单20分钟自动取消 并讲订单信息放入redis中若15分钟时未支付通过websocket提醒用户 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997259023.png) 16.优惠券平台 登录注册 采用JWT技术,生成token令牌,设置过期时间,用来判断用户的登录状态; 调用阿里云短信服务接口,获取验证码,将验证码设置到redis中,设置过期时间,下一次获取验证码先从缓存中获取对应手机号的验证码缓存 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997345695.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997370089.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997373493.png) 17.优惠券平台 发布优惠券(手动、定时自动)、修改、注销、分页查询、模糊查询。定时发布使用的是springboot自带的Scheduled注解实现 每天下午17:00定时发布折扣券,商家可以发布满减券 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997386904.png) 18.优惠券秒杀 采用Redis分布式锁、MySQL的乐观锁--行锁(vsesion字段)、RabbitMQ的死信队列与延迟队列以及websocket技术 每天的17:00发布活动折扣券,用户可以抢购该优惠券 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997404011.png) 19.客服聊天模块 结合WeSocket、Redis、RabbitMQ技术 用户可以与客服进行即时通信,将聊天记录存入到redis中,每超过十条或者断开连接,就对聊天记录进行两种方式处理:一种是写入txt文件保存 另一种是将redis中的数据存入到数据库中,设置延时队列,聊天记录过期时间一到就删除数据库中的记录 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997417334.png) ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997421028.png) 20.酒店详情页推荐酒店 基于Mahout推荐算法,根据用户信息与酒店信息,推荐相似的酒店 ![](http://gitee.com/abalonel/lvmaHotel/raw/master/READMEImg/1667997431515.png)