https://gf.bilibili.com/item/detail/1104564029
为了帮助小白入门 Java,博主录制了本项目配套的《项目手把手启动教程》,希望能给同学们带来帮助。
一、摘要
1.1 项目介绍
基于JAVA+Vue+SpringBoot+MySQL的民宿预定管理系统,包含了民宿档案模块、民宿订单模块、民宿评价模块、民宿留言模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,民宿预定管理系统基于角色的访问控制,给民宿管理员、旅客使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
1.2 项目录屏
二、功能模块
2.1 用例设计
民宿预订管理系统,使用Spring Boot、Vue.js 框架进行开发,后台服务器使用了Tomcat,数据库使用MySQL。
该系统实现了登录注册、上传房源、预订民宿、我的留言、评价功能、订单生成等模块功能。
本系统分为以下三种用户类型。
租客:指那些在平台上注册的想要租民宿的消费者。
房主:指上传房源的当前民宿经营者。
系统管理员:指管理房源、用户与评论,帮助租客和房主解决问题的系统管理者。
2.2 功能设计
民宿预订管理系统本系统分为使用用户类型分为租客、房主、系统管理员三种,具体功能结构如下。
2.2.1 租客角色
- 注册、登录功能
- 搜索功能:根据某些特定项模糊匹配民宿。
- 预订功能:在线预订民宿房间。
- 留言和评论功能:可以跟其他角色留言、评论民宿房间。
- 订单功能:查看生成的订单详情,进行退订操作。
2.2.2 房主角色
- 注册、登录功能
- 搜索功能:根据某些特定项模糊匹配民宿。
- 民宿房源管理功能:修改房源状态与信息、上传房源照片、新增房源、搜索房源。
- 留言和评论功能:可以跟其他角色留言、评论民宿房间。
- 订单功能:可以查看生成的订单信息。
2.2.3 系统管理员角色
- 注册、登录功能
- 搜索功能:根据某些特定项模糊匹配民宿。
- 用户管理:按条件查询所有类型的用户,删除用户,修改自己的信息。
- 房源管理:修改房源上下线状态。
- 留言和评论管理:可以回复租客和房主的问题且可以删除评论。
三、系统展示
四、核心代码
4.1 查询民宿
@RequestMapping(value = "/getByPage", method = RequestMethod.GET) @ApiOperation(value = "查询民宿") public Result<IPage<Homestay>> getByPage(@ModelAttribute Homestay homestay ,@ModelAttribute PageVo page){ QueryWrapper<Homestay> qw = new QueryWrapper<>(); User currUser = securityUtil.getCurrUser(); // 如果是房主,自己看自己 QueryWrapper<User> userQw = new QueryWrapper<>(); userQw.eq("id",currUser.getId()); userQw.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 and role_id = '1635922262441988096'"); if(iUserService.count(userQw) > 0L) { qw.eq("user_id",currUser.getId()); } if(!ZwzNullUtils.isNull(homestay.getTitle())) { qw.like("title",homestay.getTitle()); } if(!ZwzNullUtils.isNull(homestay.getStatus())) { qw.eq("status",homestay.getStatus()); } IPage<Homestay> data = iHomestayService.page(PageUtil.initMpPage(page),qw); return new ResultUtil<IPage<Homestay>>().setData(data); }
4.2 新增民宿
@RequestMapping(value = "/insert", method = RequestMethod.POST) @ApiOperation(value = "新增民宿") public Result<Homestay> insert(Homestay homestay){ User currUser = securityUtil.getCurrUser(); homestay.setUserId(currUser.getId()); iHomestayService.saveOrUpdate(homestay); return new ResultUtil<Homestay>().setData(homestay); }
4.3 新增民宿评价
@RequestMapping(value = "/insert", method = RequestMethod.POST) @ApiOperation(value = "新增评价") public Result<Appraise> insert(Appraise appraise){ Homestay h = iHomestayService.getById(appraise.getDormId()); if(h == null) { return ResultUtil.error("民宿不存在"); } appraise.setDormName(h.getTitle()); User currUser = securityUtil.getCurrUser(); appraise.setUserId(currUser.getId()); appraise.setUserName(currUser.getNickname()); iAppraiseService.saveOrUpdate(appraise); return new ResultUtil<Appraise>().setData(appraise); }
4.4 查询留言
@RequestMapping(value = "/getByPage", method = RequestMethod.GET) @ApiOperation(value = "查询留言") public Result<IPage<Message>> getByPage(@ModelAttribute Message message ,@ModelAttribute PageVo page){ QueryWrapper<Message> qw = new QueryWrapper<>(); User currUser = securityUtil.getCurrUser(); // 如果是租客,自己看自己 QueryWrapper<User> userQw = new QueryWrapper<>(); userQw.eq("id",currUser.getId()); userQw.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 and role_id = '1536606659751841795'"); if(iUserService.count(userQw) > 0L) { qw.eq("user_id",currUser.getId()); } if(!ZwzNullUtils.isNull(message.getContent())) { qw.like("content",message.getContent()); } if(!ZwzNullUtils.isNull(message.getUserName())) { qw.like("user_name",message.getUserName()); } IPage<Message> data = iMessageService.page(PageUtil.initMpPage(page),qw); return new ResultUtil<IPage<Message>>().setData(data); }
4.5 新增民宿订单
@RequestMapping(value = "/insert", method = RequestMethod.POST) @ApiOperation(value = "新增订单") public Result<Order> insert(Order order){ Homestay h = iHomestayService.getById(order.getDormId()); if(h == null) { return ResultUtil.error("民宿不存在"); } order.setDormName(h.getTitle()); User currUser = securityUtil.getCurrUser(); order.setUserId(currUser.getId()); order.setUserName(currUser.getNickname()); order.setUserMobile(currUser.getMobile()); order.setDate(DateUtil.today()); iOrderService.saveOrUpdate(order); return new ResultUtil<Order>().setData(order); }
五、免责说明
- 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
- 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
- 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!
- 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
- 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
- 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
- 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。