• 基于Java+SpringBoot+Vue民宿管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】


    🍊作者:计算机编程-吉哥
    🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。
    🍊心愿:点赞 👍 收藏 ⭐评论 📝
    🍅 文末获取源码联系

    👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~
    Java毕业设计项目~热门选题推荐《1000套》

    技术选型

    springboot、mybatisplus、vue、elementui、html、css、js、mysql、jdk1.8

    数据库表结构

    10张 

    开发工具

    idea、navicat

    ⭐功能

    【角色】

    管理员、用户

    【前台功能模块】

    • 登录注册
    • 首页
    • 房间信息
    • 论坛
    • 公告信息
    • 个人中心
    • 后台管理

    【后台功能模块】

    • 登录
    • 首页
    • 个人中心
    • 管理员管理
    • 基础数据管理
    • 房间信息管理
    • 论坛管理
    • 公告信息管理
    • 用户管理
    • 轮播图管理

    🏆项目演示截图

    1、首页

    2、房间信息

     3、论坛信息

     4、公告信息

     5、个人中心

     6、房间信息管理

     7、房间评论投诉管理

     8、论坛管理

     

    需要看系统演示视频,不理解系统业务逻辑都可以咨询博主噢~ 

    数据库文件设计

    1. CREATE TABLE `config` (
    2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    3. `name` varchar(100) NOT NULL COMMENT '配置参数名称',
    4. `value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
    5. PRIMARY KEY (`id`)
    6. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';
    7. CREATE TABLE `dictionary` (
    8. `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    9. `dic_code` varchar(200) DEFAULT NULL COMMENT '字段',
    10. `dic_name` varchar(200) DEFAULT NULL COMMENT '字段名',
    11. `code_index` int(11) DEFAULT NULL COMMENT '编码',
    12. `index_name` varchar(200) DEFAULT NULL COMMENT '编码名字 Search111 ',
    13. `super_id` int(11) DEFAULT NULL COMMENT '父字段id',
    14. `beizhu` varchar(200) DEFAULT NULL COMMENT '备注',
    15. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    16. PRIMARY KEY (`id`)
    17. ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='字典表';
    18. CREATE TABLE `fangjian` (
    19. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    20. `fangjian_name` varchar(200) DEFAULT NULL COMMENT '房间名称 Search111',
    21. `fangjian_photo` varchar(200) DEFAULT NULL COMMENT '房间图片',
    22. `fangjian_tese` varchar(200) DEFAULT NULL COMMENT '房间特色',
    23. `fangjian_peizhi` varchar(200) DEFAULT NULL COMMENT '房间配置',
    24. `fangjian_shangpin` varchar(200) DEFAULT NULL COMMENT '提供的商品',
    25. `fangjian_fuwu` varchar(200) DEFAULT NULL COMMENT '提供的服务',
    26. `fangjian_money` decimal(10,2) DEFAULT NULL COMMENT '价格(天)',
    27. `fangjian_types` int(11) DEFAULT NULL COMMENT '房间类型 Search111',
    28. `fangjian_number` int(11) DEFAULT NULL COMMENT '房间剩余数量',
    29. `fangjian_clicknum` int(11) DEFAULT NULL COMMENT '点击次数',
    30. `fangjian_content` text COMMENT '房间详情',
    31. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow',
    32. PRIMARY KEY (`id`)
    33. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='房间信息';
    34. CREATE TABLE `fangjian_liuyan` (
    35. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    36. `fangjian_id` int(11) DEFAULT NULL COMMENT '房间',
    37. `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
    38. `fangjian_liuyan_text` text COMMENT '评论/投诉内容',
    39. `reply_text` text COMMENT '回复内容',
    40. `insert_time` timestamp NULL DEFAULT NULL COMMENT '评论/投诉时间',
    41. `update_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',
    42. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    43. PRIMARY KEY (`id`)
    44. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='房间评论/投诉';
    45. CREATE TABLE `fangjian_order` (
    46. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    47. `fangjian_id` int(11) DEFAULT NULL COMMENT '房间',
    48. `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
    49. `fangjian_order_time` date DEFAULT NULL COMMENT '预约日期',
    50. `fangjian_order_text` text COMMENT '预约备注',
    51. `fangjian_order_types` int(11) DEFAULT NULL COMMENT '订单状态',
    52. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    53. PRIMARY KEY (`id`)
    54. ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='房间预约';
    55. CREATE TABLE `forum` (
    56. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    57. `forum_name` varchar(200) DEFAULT NULL COMMENT '帖子标题 Search111 ',
    58. `yonghu_id` int(11) DEFAULT NULL COMMENT '用户',
    59. `users_id` int(11) DEFAULT NULL COMMENT '管理员',
    60. `forum_content` text COMMENT '发布内容',
    61. `super_ids` int(11) DEFAULT NULL COMMENT '父id',
    62. `forum_state_types` int(11) DEFAULT NULL COMMENT '帖子状态',
    63. `insert_time` timestamp NULL DEFAULT NULL COMMENT '发帖时间',
    64. `update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
    65. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show2',
    66. PRIMARY KEY (`id`)
    67. ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='论坛';
    68. CREATE TABLE `news` (
    69. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    70. `news_name` varchar(200) DEFAULT NULL COMMENT '公告标题 Search111 ',
    71. `news_types` int(11) DEFAULT NULL COMMENT '公告类型 Search111 ',
    72. `news_photo` varchar(200) DEFAULT NULL COMMENT '公告图片',
    73. `insert_time` timestamp NULL DEFAULT NULL COMMENT '添加时间',
    74. `news_content` text COMMENT '公告详情',
    75. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 nameShow',
    76. PRIMARY KEY (`id`)
    77. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='公告信息';
    78. CREATE TABLE `token` (
    79. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    80. `userid` bigint(20) NOT NULL COMMENT '用户id',
    81. `username` varchar(100) NOT NULL COMMENT '用户名',
    82. `tablename` varchar(100) DEFAULT NULL COMMENT '表名',
    83. `role` varchar(100) DEFAULT NULL COMMENT '角色',
    84. `token` varchar(200) NOT NULL COMMENT '密码',
    85. `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
    86. `expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
    87. PRIMARY KEY (`id`)
    88. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='token表';
    89. /*Data for the table `token` */
    90. insert into `token`(`id`,`userid`,`username`,`tablename`,`role`,`token`,`addtime`,`expiratedtime`) values (1,1,'admin','users','管理员','eujhisuzw4wbe4v31vxpnknzf6n1gi81','2022-04-13 11:12:35','2022-04-13 12:21:31'),(2,1,'a1','yonghu','用户','1t7hsw4ap15wq61c3zxp8c33e15qyq2f','2022-04-13 11:13:53','2022-04-13 12:17:29');
    91. /*Table structure for table `users` */
    92. DROP TABLE IF EXISTS `users`;
    93. CREATE TABLE `users` (
    94. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    95. `username` varchar(100) NOT NULL COMMENT '用户名',
    96. `password` varchar(100) NOT NULL COMMENT '密码',
    97. `role` varchar(100) DEFAULT '管理员' COMMENT '角色',
    98. `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
    99. PRIMARY KEY (`id`)
    100. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户表';
    101. CREATE TABLE `yonghu` (
    102. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    103. `username` varchar(200) DEFAULT NULL COMMENT '账户',
    104. `password` varchar(200) DEFAULT NULL COMMENT '密码',
    105. `yonghu_name` varchar(200) DEFAULT NULL COMMENT '用户姓名 Search111 ',
    106. `yonghu_photo` varchar(200) DEFAULT NULL COMMENT '头像',
    107. `yonghu_phone` varchar(200) DEFAULT NULL COMMENT '手机号',
    108. `yonghu_email` varchar(200) DEFAULT NULL COMMENT '电子邮箱',
    109. `sex_types` int(11) DEFAULT NULL COMMENT '性别 Search111 ',
    110. `new_money` decimal(10,2) DEFAULT NULL COMMENT '余额 ',
    111. `yonghu_delete` int(11) DEFAULT '1' COMMENT '假删',
    112. `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    113. PRIMARY KEY (`id`)
    114. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户';

    核心代码 

    1. package com.controller;
    2. import java.io.File;
    3. import java.math.BigDecimal;
    4. import java.net.URL;
    5. import java.text.SimpleDateFormat;
    6. import com.alibaba.fastjson.JSONObject;
    7. import java.util.*;
    8. import org.springframework.beans.BeanUtils;
    9. import javax.servlet.http.HttpServletRequest;
    10. import org.springframework.web.context.ContextLoader;
    11. import javax.servlet.ServletContext;
    12. import com.service.TokenService;
    13. import com.utils.*;
    14. import java.lang.reflect.InvocationTargetException;
    15. import com.service.DictionaryService;
    16. import org.apache.commons.lang3.StringUtils;
    17. import com.annotation.IgnoreAuth;
    18. import org.slf4j.Logger;
    19. import org.slf4j.LoggerFactory;
    20. import org.springframework.beans.factory.annotation.Autowired;
    21. import org.springframework.stereotype.Controller;
    22. import org.springframework.web.bind.annotation.*;
    23. import com.baomidou.mybatisplus.mapper.EntityWrapper;
    24. import com.baomidou.mybatisplus.mapper.Wrapper;
    25. import com.entity.*;
    26. import com.entity.view.*;
    27. import com.service.*;
    28. import com.utils.PageUtils;
    29. import com.utils.R;
    30. import com.alibaba.fastjson.*;
    31. /**
    32. * 房间信息
    33. * 后端接口
    34. * @author 计算机编程-吉哥
    35. * @email
    36. */
    37. @RestController
    38. @Controller
    39. @RequestMapping("/fangjian")
    40. public class FangjianController {
    41. private static final Logger logger = LoggerFactory.getLogger(FangjianController.class);
    42. @Autowired
    43. private FangjianService fangjianService;
    44. @Autowired
    45. private TokenService tokenService;
    46. @Autowired
    47. private DictionaryService dictionaryService;
    48. //级联表service
    49. @Autowired
    50. private YonghuService yonghuService;
    51. /**
    52. * 后端列表
    53. */
    54. @RequestMapping("/page")
    55. public R page(@RequestParam Map params, HttpServletRequest request){
    56. logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
    57. String role = String.valueOf(request.getSession().getAttribute("role"));
    58. if(false)
    59. return R.error(511,"永不会进入");
    60. else if("用户".equals(role))
    61. params.put("yonghuId",request.getSession().getAttribute("userId"));
    62. if(params.get("orderBy")==null || params.get("orderBy")==""){
    63. params.put("orderBy","id");
    64. }
    65. PageUtils page = fangjianService.queryPage(params);
    66. //字典表数据转换
    67. List list =(List)page.getList();
    68. for(FangjianView c:list){
    69. //修改对应字典表字段
    70. dictionaryService.dictionaryConvert(c, request);
    71. }
    72. return R.ok().put("data", page);
    73. }
    74. /**
    75. * 后端详情
    76. */
    77. @RequestMapping("/info/{id}")
    78. public R info(@PathVariable("id") Long id, HttpServletRequest request){
    79. logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
    80. FangjianEntity fangjian = fangjianService.selectById(id);
    81. if(fangjian !=null){
    82. //entity转view
    83. FangjianView view = new FangjianView();
    84. BeanUtils.copyProperties( fangjian , view );//把实体数据重构到view中
    85. //修改对应字典表字段
    86. dictionaryService.dictionaryConvert(view, request);
    87. return R.ok().put("data", view);
    88. }else {
    89. return R.error(511,"查不到数据");
    90. }
    91. }
    92. /**
    93. * 后端保存
    94. */
    95. @RequestMapping("/save")
    96. public R save(@RequestBody FangjianEntity fangjian, HttpServletRequest request){
    97. logger.debug("save方法:,,Controller:{},,fangjian:{}",this.getClass().getName(),fangjian.toString());
    98. String role = String.valueOf(request.getSession().getAttribute("role"));
    99. if(false)
    100. return R.error(511,"永远不会进入");
    101. Wrapper queryWrapper = new EntityWrapper()
    102. .eq("fangjian_name", fangjian.getFangjianName())
    103. .eq("fangjian_tese", fangjian.getFangjianTese())
    104. .eq("fangjian_peizhi", fangjian.getFangjianPeizhi())
    105. .eq("fangjian_shangpin", fangjian.getFangjianShangpin())
    106. .eq("fangjian_fuwu", fangjian.getFangjianFuwu())
    107. .eq("fangjian_types", fangjian.getFangjianTypes())
    108. .eq("fangjian_number", fangjian.getFangjianNumber())
    109. .eq("fangjian_clicknum", fangjian.getFangjianClicknum())
    110. ;
    111. logger.info("sql语句:"+queryWrapper.getSqlSegment());
    112. FangjianEntity fangjianEntity = fangjianService.selectOne(queryWrapper);
    113. if(fangjianEntity==null){
    114. fangjian.setFangjianClicknum(1);
    115. fangjian.setCreateTime(new Date());
    116. fangjianService.insert(fangjian);
    117. return R.ok();
    118. }else {
    119. return R.error(511,"表中有相同数据");
    120. }
    121. }
    122. /**
    123. * 后端修改
    124. */
    125. @RequestMapping("/update")
    126. public R update(@RequestBody FangjianEntity fangjian, HttpServletRequest request){
    127. logger.debug("update方法:,,Controller:{},,fangjian:{}",this.getClass().getName(),fangjian.toString());
    128. String role = String.valueOf(request.getSession().getAttribute("role"));
    129. //根据字段查询是否有相同数据
    130. Wrapper queryWrapper = new EntityWrapper()
    131. .notIn("id",fangjian.getId())
    132. .andNew()
    133. .eq("fangjian_name", fangjian.getFangjianName())
    134. .eq("fangjian_tese", fangjian.getFangjianTese())
    135. .eq("fangjian_peizhi", fangjian.getFangjianPeizhi())
    136. .eq("fangjian_shangpin", fangjian.getFangjianShangpin())
    137. .eq("fangjian_fuwu", fangjian.getFangjianFuwu())
    138. .eq("fangjian_types", fangjian.getFangjianTypes())
    139. .eq("fangjian_number", fangjian.getFangjianNumber())
    140. .eq("fangjian_clicknum", fangjian.getFangjianClicknum())
    141. ;
    142. logger.info("sql语句:"+queryWrapper.getSqlSegment());
    143. FangjianEntity fangjianEntity = fangjianService.selectOne(queryWrapper);
    144. if("".equals(fangjian.getFangjianPhoto()) || "null".equals(fangjian.getFangjianPhoto())){
    145. fangjian.setFangjianPhoto(null);
    146. }
    147. if(fangjianEntity==null){
    148. fangjianService.updateById(fangjian);//根据id更新
    149. return R.ok();
    150. }else {
    151. return R.error(511,"表中有相同数据");
    152. }
    153. }
    154. /**
    155. * 删除
    156. */
    157. @RequestMapping("/delete")
    158. public R delete(@RequestBody Integer[] ids){
    159. logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
    160. fangjianService.deleteBatchIds(Arrays.asList(ids));
    161. return R.ok();
    162. }
    163. /**
    164. * 批量上传
    165. */
    166. @RequestMapping("/batchInsert")
    167. public R save( String fileName, HttpServletRequest request){
    168. logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
    169. Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
    170. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    171. try {
    172. List fangjianList = new ArrayList<>();//上传的东西
    173. Map> seachFields= new HashMap<>();//要查询的字段
    174. Date date = new Date();
    175. int lastIndexOf = fileName.lastIndexOf(".");
    176. if(lastIndexOf == -1){
    177. return R.error(511,"该文件没有后缀");
    178. }else{
    179. String suffix = fileName.substring(lastIndexOf);
    180. if(!".xls".equals(suffix)){
    181. return R.error(511,"只支持后缀为xls的excel文件");
    182. }else{
    183. URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
    184. File file = new File(resource.getFile());
    185. if(!file.exists()){
    186. return R.error(511,"找不到上传文件,请联系管理员");
    187. }else{
    188. List> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
    189. dataList.remove(0);//删除第一行,因为第一行是提示
    190. for(List data:dataList){
    191. //循环
    192. FangjianEntity fangjianEntity = new FangjianEntity();
    193. fangjianList.add(fangjianEntity);
    194. //把要查询是否重复的字段放入map中
    195. }
    196. //查询是否重复
    197. fangjianService.insertBatch(fangjianList);
    198. return R.ok();
    199. }
    200. }
    201. }
    202. }catch (Exception e){
    203. e.printStackTrace();
    204. return R.error(511,"批量插入数据异常,请联系管理员");
    205. }
    206. }
    207. /**
    208. * 前端列表
    209. */
    210. @IgnoreAuth
    211. @RequestMapping("/list")
    212. public R list(@RequestParam Map params, HttpServletRequest request){
    213. logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
    214. // 没有指定排序字段就默认id倒序
    215. if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
    216. params.put("orderBy","id");
    217. }
    218. PageUtils page = fangjianService.queryPage(params);
    219. //字典表数据转换
    220. List list =(List)page.getList();
    221. for(FangjianView c:list)
    222. dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
    223. return R.ok().put("data", page);
    224. }
    225. /**
    226. * 前端详情
    227. */
    228. @RequestMapping("/detail/{id}")
    229. public R detail(@PathVariable("id") Long id, HttpServletRequest request){
    230. logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
    231. FangjianEntity fangjian = fangjianService.selectById(id);
    232. if(fangjian !=null){
    233. //点击数量加1
    234. fangjian.setFangjianClicknum(fangjian.getFangjianClicknum()+1);
    235. fangjianService.updateById(fangjian);
    236. //entity转view
    237. FangjianView view = new FangjianView();
    238. BeanUtils.copyProperties( fangjian , view );//把实体数据重构到view中
    239. //修改对应字典表字段
    240. dictionaryService.dictionaryConvert(view, request);
    241. return R.ok().put("data", view);
    242. }else {
    243. return R.error(511,"查不到数据");
    244. }
    245. }
    246. /**
    247. * 前端保存
    248. */
    249. @RequestMapping("/add")
    250. public R add(@RequestBody FangjianEntity fangjian, HttpServletRequest request){
    251. logger.debug("add方法:,,Controller:{},,fangjian:{}",this.getClass().getName(),fangjian.toString());
    252. Wrapper queryWrapper = new EntityWrapper()
    253. .eq("fangjian_name", fangjian.getFangjianName())
    254. .eq("fangjian_tese", fangjian.getFangjianTese())
    255. .eq("fangjian_peizhi", fangjian.getFangjianPeizhi())
    256. .eq("fangjian_shangpin", fangjian.getFangjianShangpin())
    257. .eq("fangjian_fuwu", fangjian.getFangjianFuwu())
    258. .eq("fangjian_types", fangjian.getFangjianTypes())
    259. .eq("fangjian_number", fangjian.getFangjianNumber())
    260. .eq("fangjian_clicknum", fangjian.getFangjianClicknum())
    261. ;
    262. logger.info("sql语句:"+queryWrapper.getSqlSegment());
    263. FangjianEntity fangjianEntity = fangjianService.selectOne(queryWrapper);
    264. if(fangjianEntity==null){
    265. fangjian.setCreateTime(new Date());
    266. fangjianService.insert(fangjian);
    267. return R.ok();
    268. }else {
    269. return R.error(511,"表中有相同数据");
    270. }
    271. }
    272. }

    参考文档

    更多项目推荐:计算机毕业设计项目

    如果大家有任何疑虑,请在下方咨询或评论

  • 相关阅读:
    Hive优化
    [爬虫练手]整理学校招生信息
    Hadoop3教程(十六):MapReduce中的OutputFormat
    centos8 编译安装 httpd-2.4
    2023亚太地区数学建模C题思路+模型+代码+论文
    排序题:数组中的第k个最大元素及出现的次数 - 数组的正态分布排序
    一个很强大的人脸识别库face_recognition
    odoo xmlrpc的用法及实例(二)
    浅析人脸活体检测技术的功能及几种分类
    论人类下一代语言的可能—4.1算术
  • 原文地址:https://blog.csdn.net/weixin_51966461/article/details/133755092