基于javaweb+mysql的springboot房屋租赁系统(java+springboot+maven+ssm+jsp+jquery+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot房屋租赁系统(java+springboot+maven+ssm+jsp+jquery+mysql)
项目介绍
基于springboot房屋出租系统 有前台和后台
登陆角色:用户+房东+管理员
前台功能模块:登陆+注册+整租+合租+租房+新闻资讯+用户反馈+搜索+忘记密码+联系房东等
后台功能模块: 用户端:订单管理+个人信息+我的家+我的收藏+密码修改+我的反馈 管理员端:房子管理+订单管理+新闻资讯管理+反馈管理+用户管理+个人信息+我的收藏+密码修改 房东端:房子管理+订单管理+个人信息+我的收藏+密码修改+我的反馈
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 4.数据库:MySql 5.7/8.0版本均可; 5.是否Maven项目:是;
技术栈
后端:SpringBoot(Spring+SpringMVC+Mybatis)
前端: JSP、css、JavaScript、JQuery、Ajax
使用说明
项目运行: 1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中application.yml配置文件中的数据库配置改为自己的配置; 4. 运行项目,控制台提示运行成功后再去运行前端项目; 5. 管理员用户名密码:admin/admin 普通用户名密码:user/123456
文档介绍(课题背景与意义、系统实现功能、课题研究现状、系统相关技术、java技术、B/S架构、Mysql介绍、Mysql环境配置、Springboot框架、系统需求分析、系统功能、可行性研究、经济可行性、技术可行性、运行可行性、事件可行性、系统业务过程分析、系统业务过程分析、系统用例图、系统设计、数据库设计、系统整体设计、系统设计思想、系统流程图、系统详情设计、系统功能模块、系统功能模块、管理员功能模块):
房屋租赁系统-首页展示:
最新整租咨询展示:
租房列表展示:
旅游景点展示页面:
后台管理展示页:
后台订单管理展示页:
public class RandomValidateCodeUtil {
public static final String RANDOMCODEKEY = "IRENTALSESSIONKEY";//放到session中的key
private final String randString = "0123456789";//随机产生只有数字的字符串 private String
//private String randString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生只有字母的字符串
//private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生数字与字母组合的字符串
private final int width = 95;// 图片宽
private final int height = 25;// 图片高
private final int lineSize = 40;// 干扰线数量
private final int stringNum = 4;// 随机产生字符数量
private final Random random = new Random();
/**
* 获得字体
*/
private Font getFont() {
return new Font("Fixedsys", Font.CENTER_BASELINE, 18);
}
/**
* 获得颜色
*/
private Color getRandColor(int fc, int bc) {
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc - 16);
int g = fc + random.nextInt(bc - fc - 14);
int b = fc + random.nextInt(bc - fc - 18);
return new Color(r, g, b);
}
/**
* 生成随机图片
*/
public void getRandcode(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
// BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作
g.fillRect(0, 0, width, height);//图片大小
/*
* 百度富文本编辑器
* */
@RestController
@RequestMapping("/api/ueditor")
public class UeditorController {
/**
* 获取Ueditor的配置文件
*
* @return
*/
@GetMapping("/config")
public String getConfig() {
return "{\n" +
" \"imageActionName\": \"uploadimage\",\n" +
" \"imageFieldName\": \"file\",\n" +
" \"imageMaxSize\": 2048000,\n" +
" \"imageAllowFiles\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"],\n" +
" \"imageCompressEnable\": true,\n" +
" \"imageCompressBorder\": 1600,\n" +
" \"imageInsertAlign\": \"none\",\n" +
" \"imageUrlPrefix\": \"\",\n" +
" \"imagePathFormat\": \"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}\",\n" +
"\n" +
" /* 上传文件配置 */\n" +
" \"fileActionName\": \"uploadfile\",\n" +
" \"fileFieldName\": \"file\",\n" +
" \"filePathFormat\": \"/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}\",\n" +
" \"fileUrlPrefix\": \"\",\n" +
" \"fileMaxSize\": 51200000,\n" +
" \"fileAllowFiles\": [\n" +
" \".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\",\n" +
" \".flv\", \".swf\", \".mkv\", \".avi\", \".rm\", \".rmvb\", \".mpeg\", \".mpg\",\n" +
" \".ogg\", \".ogv\", \".mov\", \".wmv\", \".mp4\", \".webm\", \".mp3\", \".wav\", \".mid\",\n" +
" \".rar\", \".zip\", \".tar\", \".gz\", \".7z\", \".bz2\", \".cab\", \".iso\",\n" +
" \".doc\", \".docx\", \".xls\", \".xlsx\", \".ppt\", \".pptx\", \".pdf\", \".txt\", \".md\", \".xml\"]\n" +
" }";
}
/*
* 房屋列表
* */
@RequestMapping("/house")
public String houseList(HouseSearchVO houseSearchVO, Model model) {
Page page = PageUtil.initMpPage(houseSearchVO.getPage(), houseSearchVO.getSize());
Page<House> housePage = houseService.getHousePage(houseSearchVO, page);
model.addAttribute("pageInfo", housePage);
model.addAttribute("houseSearchVO", houseSearchVO);
model.addAttribute("pagePrefix", houseSearchVO.getPagePrefix());
return "front/house-list";
}
}
/*
* 新闻资讯控制器
* */
@Controller("backendNewsController")
@RequestMapping("/admin/news")
@CrossOrigin
public class NewsController extends BaseController {
@Autowired
private NewsService newsService;
/*
* 进入新闻管理页面
* */
@RequestMapping("")
public String newsList(@RequestParam(value = "page", defaultValue = "1") Long pageNumber, @RequestParam(value = "size", defaultValue = "6") Long pageSize, Model model) {
Page page = PageUtil.initMpPage(pageNumber, pageSize);
@ResponseBody
public JsonResult loginSubmit(User user, HttpSession session) {
if (user == null) {
return JsonResult.error("接收到非法操作,请重试!");
}
String random = (String) session.getAttribute("IRENTALSESSIONKEY");
if (random == null) {
return JsonResult.error("请输入验证码");
}
if (!random.equals(user.getCode())) {
return JsonResult.error("验证码错误");
}
User user1 = userService.findByUserName(user.getUserName());
if (user1 == null) {
return JsonResult.error("您输入的用户不存在,请重试。");
}
//判断密码是否正确
if (!user.getUserPass().equals(user1.getUserPass())) {
return JsonResult.error("您输入的密码错误,请重试。");
}
if (UserStatusEnum.DISABLE.getValue().equals(user1.getStatus())) {
return JsonResult.error("此账户已被系统锁定,请联系我们获取更多帮助。");
}
session.setAttribute(Constant.SESSION_USER_KEY, user1);
return JsonResult.success("登录成功,欢迎回来!");
}
/*
* 退出登录,返回首页
* */
@RequestMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute(Constant.SESSION_USER_KEY);
session.invalidate();
return "redirect:/";
}
/*
* 用户密码 邮箱 找回
* */
@RequestMapping(value = "/resetPassword", method = RequestMethod.POST)
@ResponseBody
Date date = new Date();
//进行兑换,将礼品卡设置为 status = -1已使用并且,将使用者设置为当前用户
giftcardService.redeemGiftcard(series, GiftcardStatusEnum.USED.getValue(), date, user.getUserName());
Double currentBalance = giftcardService.currentBalance(user.getUserName());
String afterBalance = String.format("%.2f", redeem_value + currentBalance);
giftcardService.addToUserBalance(afterBalance, user.getUserName());
return JsonResult.success("兑换成功!礼品卡为您兑换了" + redeem_value + "元");
}
}
//所有controller控制器的基类
@Controller
public class BaseController {
@Autowired
protected HttpServletRequest request;
/*
* 获取当前登录用户
* */
public User getLoginUser() {
User user = (User) request.getSession().getAttribute(Constant.SESSION_USER_KEY);
return user;
}
/*
* 获取当前用户ID
* */
public Long getLoginUserId() {
User user = getLoginUser();
if (user == null) {
return null;
/*
* 发布新闻资讯提交
* */
@RequestMapping(value = "/publish/submit", method = RequestMethod.POST)
@ResponseBody
public JsonResult publishSubmit(News news) {
try {
if (news.getId() == null) { //如果新闻ID为空的话则新增ID;
news.setCreateTime(new Date());
} else {
News queryNews = newsService.get(news.getId());
if (queryNews == null) {
return JsonResult.error("发布失败,未找到此新闻资讯ID");
}
}
//提取摘要
int postSummary = 300;
String summaryText = HtmlUtil.cleanHtmlTag(news.getContent());
if (summaryText.length() > postSummary) {
String summary = summaryText.substring(0, postSummary);
news.setSummary(summary);
} else {
news.setSummary(summaryText);
}
newsService.insertOrUpdate(news);
} catch (Exception e) {
return JsonResult.error("发布失败,请将内容补充完整!");
}
return JsonResult.success("发布成功", news.getId());
}
/*
* 删除新闻资讯
* */
@RequestMapping("/delete")
@ResponseBody
public JsonResult deleteNews(@RequestParam("id") Long id) {
try {
News news = newsService.get(id);
if (news == null) {
return JsonResult.error("删除失败,未找到新闻资讯ID。");
}
newsService.delete(id);
} catch (Exception e) {
return JsonResult.error("删除新闻资讯信息失败,请重试。");
}
condition.setUserId(getLoginUserId());
}
Page<Feedback> feedbackPage = feedbackService.findAll(page, condition);
model.addAttribute("pageInfo", feedbackPage);
model.addAttribute("pagePrefix", "/news?");
model.addAttribute("tab", "feedback-list");
model.addAttribute("isAdmin", loginUserIsAdmin());
return "admin/feedback-list";
}
@RequestMapping(value = "/admin/feedback/reply/submit", method = RequestMethod.POST)
@ResponseBody
public JsonResult replySubmit(Feedback feedback) {
feedbackService.update(feedback);
return JsonResult.success("保存成功!");
}
/*
* 删除反馈
* */
@RequestMapping("/admin/feedback/delete")
@ResponseBody
public JsonResult deleteFeedback(@RequestParam("id") Long id) {
try {
Feedback feedback = feedbackService.get(id);
if (feedback == null) {
return JsonResult.error("删除失败,未找到反馈ID。");
}
if (!loginUserIsAdmin() && !Objects.equals(feedback.getUserId(), getLoginUserId())) {
return JsonResult.error("无权限操作!");
}
feedbackService.delete(id);
} catch (Exception e) {
return JsonResult.error("删除反馈信息失败,请重试。");
}
return JsonResult.success("删除成功!");
}
}
/*
* 用户控制器
* */
@Controller
public class UserController extends BaseController {
@Autowired
private UserService userService;
/*
* 用户列表
* */
@RequestMapping("/admin/user")
public String user(@RequestParam(value = "page", defaultValue = "1") Long pageNumber, @RequestParam(value = "size", defaultValue = "6") Long pageSize, Model model) {
Page page = PageUtil.initMpPage(pageNumber, pageSize);
User condition = new User();
Page<User> userPage = userService.findAll(page, condition);
model.addAttribute("pageInfo", userPage);
model.addAttribute("pagePrefix", "/admin/user?");
model.addAttribute("tab", "user-list");
return "admin/user-list";
}
/*
* 禁用用户
* */
@RequestMapping("/admin/user/disable")
@ResponseBody
public JsonResult disable(@RequestParam("id") Long id) {
try {
User user = userService.get(id);
if (user == null) {
return JsonResult.error("用户不存在");
}
user.setStatus(UserStatusEnum.DISABLE.getValue());
userService.update(user);
} catch (Exception e) {
return JsonResult.error("禁用用户失败");
}
/*
* 登录相关的控制器
* */
@Controller
@RequestMapping("/login")
public class LoginController {
@Autowired
private UserService userService;
/*
* 登录提交
* */
@RequestMapping(value = "/submit", method = RequestMethod.POST)
@ResponseBody
public JsonResult loginSubmit(User user, HttpSession session) {
if (user == null) {
return JsonResult.error("接收到非法操作,请重试!");
}
String random = (String) session.getAttribute("IRENTALSESSIONKEY");
if (random == null) {
return JsonResult.error("请输入验证码");
}
if (!random.equals(user.getCode())) {
return JsonResult.error("验证码错误");
}
User user1 = userService.findByUserName(user.getUserName());
if (user1 == null) {
return JsonResult.error("您输入的用户不存在,请重试。");
}
//判断密码是否正确
if (!user.getUserPass().equals(user1.getUserPass())) {
return JsonResult.error("您输入的密码错误,请重试。");
}
if (UserStatusEnum.DISABLE.getValue().equals(user1.getStatus())) {
return JsonResult.error("此账户已被系统锁定,请联系我们获取更多帮助。");
}
session.setAttribute(Constant.SESSION_USER_KEY, user1);
return JsonResult.success("登录成功,欢迎回来!");
}
/*
* 退出登录,返回首页
* */
/*
* 前端房屋信息控制器
* */
@Controller("frontHouseController")
public class HouseController extends BaseController {
@Autowired
private HouseService houseService;
@Autowired
private OrderService orderService;
@Autowired
private UserService userService;
/*
* 房屋详情
* */
@RequestMapping("/house/detail/{id}")
public String houseDetail(@PathVariable("id") Long id, Model model) {
//根据ID查询房屋
House house = houseService.get(id);
if (house == null) {
return renderNotFound();
}
//处理轮播图URL
List<String> slideList = JSON.parseArray(house.getSlideUrl(), String.class); // to list
house.setSlideImgList(slideList);
//如果是合租房屋,查询合租房屋。
List<House> shareHouseList = houseService.findByUserIdAndCertificateNoAndRentType(house.getUserId(), house.getCertificateNo(), HouseRentTypeEnum.SHARE.getValue());
//从订单里查找到租户ID,把租户放到每个房子里
if (shareHouseList != null && shareHouseList.size() > 0) {
return JsonResult.success("发布成功", house.getId());
}
/*
* 下架房屋提交
* */
@RequestMapping("/down")
@ResponseBody
public JsonResult downHouse(@RequestParam("id") Long id) {
try {
House house = houseService.get(id);
if (house == null) {
return JsonResult.error("下架失败,没有选择的房屋。");
}
//如果无管理员权限下架别人的房屋,跳转到403页面
if (!loginUserIsAdmin() && Objects.equals(house.getUserId(), getLoginUserId())) {
return JsonResult.error("下架失败,无法下架他人房屋信息。");
}
if (Objects.equals(house.getStatus(), HouseStatusEnum.HAS_RENT.getValue())) {
return JsonResult.error("房屋正在租住中,不能下架");
}
house.setStatus(HouseStatusEnum.HAS_DOWN.getValue());
houseService.update(house);
} catch (Exception e) {
return JsonResult.error("下架房屋失败,请重试。");
}
return JsonResult.success("下架成功!");
}
/*
* 上架房屋提交
* */
@RequestMapping("/up")
@ResponseBody
public JsonResult upHouse(@RequestParam("id") Long id) {
try {
House house = houseService.get(id);
if (house == null) {
return JsonResult.error("上架失败,没有选择的房屋。");
}
//如果无管理员权限上架别人的房屋,跳转到403页面
if (!loginUserIsAdmin() && Objects.equals(house.getUserId(), getLoginUserId())) {
return JsonResult.error("上架失败,无法上架他人房屋信息。");
}
if (Objects.equals(house.getStatus(), HouseStatusEnum.HAS_RENT.getValue())) {
}
/*
* 前端房屋信息控制器
* */
@Controller("frontHouseController")
public class HouseController extends BaseController {
@Autowired
private HouseService houseService;
@Autowired
private OrderService orderService;
@Autowired
private UserService userService;
/*
* 房屋详情
* */
@RequestMapping("/house/detail/{id}")
public String houseDetail(@PathVariable("id") Long id, Model model) {
//根据ID查询房屋
House house = houseService.get(id);
if (house == null) {
return renderNotFound();
}
try {
if (house.getId() == null) { //如果为空,新增;
house.setCreateTime(new Date());
house.setUserId(getLoginUserId());
} else { //修改
House queryHouse = houseService.get(house.getId());
if (queryHouse == null) {
return JsonResult.error("发布失败,未找到此房屋");
}
//如果无管理员权限编辑别人的房屋,跳转到403页面
if (!loginUserIsAdmin() && Objects.equals(house.getUserId(), getLoginUserId())) {
return JsonResult.error("发布失败,无法编辑他人房屋信息。");
}
}
house.setStatus(HouseStatusEnum.NOT_CHECK.getValue());
//获取轮播图
String sessionKey = Constant.SESSION_IMG_PREFIX + key;
List<String> imgList = (List<String>) session.getAttribute(sessionKey);
if (imgList != null && imgList.size() > 0) {
//设置轮播图,转换成JSON格式存储
house.setSlideUrl(JSON.toJSONString(imgList));
//将第一个图放到缩略图中
house.setThumbnailUrl(imgList.get(0));
}
houseService.insertOrUpdate(house);
} catch (Exception e) {
return JsonResult.error("发布失败,请填写完整信息");
}
return JsonResult.success("发布成功", house.getId());
}
/*
* 下架房屋提交
* */
@RequestMapping("/down")
@ResponseBody
public JsonResult downHouse(@RequestParam("id") Long id) {
try {
House house = houseService.get(id);
if (house == null) {
return JsonResult.error("下架失败,没有选择的房屋。");
}
/*
* 用户控制器
* */
@Controller
public class UserController extends BaseController {
@Autowired
private UserService userService;
/*
* 用户列表
* */
@RequestMapping("/admin/user")
public String user(@RequestParam(value = "page", defaultValue = "1") Long pageNumber, @RequestParam(value = "size", defaultValue = "6") Long pageSize, Model model) {
Page page = PageUtil.initMpPage(pageNumber, pageSize);
User condition = new User();
Page<User> userPage = userService.findAll(page, condition);
model.addAttribute("pageInfo", userPage);
model.addAttribute("pagePrefix", "/admin/user?");
model.addAttribute("tab", "user-list");
return "admin/user-list";
}
/*
* 禁用用户
* */
@RequestMapping("/admin/user/disable")
@ResponseBody
public JsonResult disable(@RequestParam("id") Long id) {
try {
User user = userService.get(id);
if (user == null) {
return JsonResult.error("用户不存在");
}
user.setStatus(UserStatusEnum.DISABLE.getValue());
* */
@Controller
@RequestMapping("/login")
public class LoginController {
@Autowired
private UserService userService;
/*
* 登录提交
* */
@RequestMapping(value = "/submit", method = RequestMethod.POST)
@ResponseBody
public JsonResult loginSubmit(User user, HttpSession session) {
if (user == null) {
return JsonResult.error("接收到非法操作,请重试!");
}
String random = (String) session.getAttribute("IRENTALSESSIONKEY");
if (random == null) {
return JsonResult.error("请输入验证码");
}
if (!random.equals(user.getCode())) {
return JsonResult.error("验证码错误");
}
User user1 = userService.findByUserName(user.getUserName());
if (user1 == null) {
return JsonResult.error("您输入的用户不存在,请重试。");
}
//判断密码是否正确
if (!user.getUserPass().equals(user1.getUserPass())) {
return JsonResult.error("您输入的密码错误,请重试。");
}
if (UserStatusEnum.DISABLE.getValue().equals(user1.getStatus())) {
return JsonResult.error("此账户已被系统锁定,请联系我们获取更多帮助。");
}
session.setAttribute(Constant.SESSION_USER_KEY, user1);
return JsonResult.success("登录成功,欢迎回来!");
}
/*
* 退出登录,返回首页
* */
@RequestMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute(Constant.SESSION_USER_KEY);
session.invalidate();
return "redirect:/";
}
/*
* 用户密码 邮箱 找回
* */
@RequestMapping(value = "/resetPassword", method = RequestMethod.POST)
@ResponseBody
public JsonResult resetPassword(User user, HttpSession session) throws Exception {
public String upload(@RequestParam("file") MultipartFile file) {
String result = "";
if (!file.isEmpty()) {
String originalFileName = file.getOriginalFilename();
// 这里写你的文件上传逻辑
// String imgPath = fileUtil.uploadImg(file);
String imgPath = null;
try {
imgPath = FileUtil.upload(file).get("filePath");
} catch (Exception e) {
e.printStackTrace();
}
result = "{\n" +
" \"state\": \"SUCCESS\",\n" +
" \"url\": \"" + imgPath + "\",\n" +
" \"title\": \"" + originalFileName + "\",\n" +
" \"original\": \"" + originalFileName + "\"\n" +
"}";
}
return result;
}
}
}
} else if (payMethod.equals("1")) {
/*用于测试环境下的模拟订单支付成功环境*/
order.setStatus(OrderStatusEnum.NORMAL.getValue());
orderService.update(order);
house.setStatus(HouseStatusEnum.HAS_RENT.getValue());
house.setLastOrderStartTime(order.getStartDate());
house.setLastOrderEndTime(order.getEndDate());
houseService.update(house);
return JsonResult.success("模拟支付成功,联系房东入住吧。");
} else if (payMethod.equals("2")) {
/*用于测试环境下的模拟订单支付成功环境*/
order.setStatus(OrderStatusEnum.NORMAL.getValue());
orderService.update(order);
house.setStatus(HouseStatusEnum.HAS_RENT.getValue());
house.setLastOrderStartTime(order.getStartDate());
house.setLastOrderEndTime(order.getEndDate());
houseService.update(house);
return JsonResult.success("模拟支付成功,联系房东入住吧。");
} else if (payMethod.equals("8888")) {
/*用于测试环境下的模拟订单支付成功环境*/
order.setStatus(OrderStatusEnum.NORMAL.getValue());
orderService.update(order);
house.setStatus(HouseStatusEnum.HAS_RENT.getValue());
house.setLastOrderStartTime(order.getStartDate());
house.setLastOrderEndTime(order.getEndDate());
houseService.update(house);
return JsonResult.success("模拟支付成功,联系房东入住吧。");
} else {
return JsonResult.error("未知支付功能参数,请勿修改支付参数!您的IP已被记录。");
}
}
/*
* 联系房东
* */
@RequestMapping("/house/contact")
@ResponseBody
public JsonResult contact(@RequestParam("houseId") Long houseId, @RequestParam("name") String name,
@RequestParam("phone") String phone, @RequestParam("email") String email,
@RequestParam("content") String content) {
if (getLoginUser() == null) {
return JsonResult.error("用户未登录");
}
House house = houseService.get(houseId);
if (house == null) {
return JsonResult.error("房屋信息不存在");
}
User owner = userService.get(house.getUserId());
if (owner == null) {
return JsonResult.error("房东不存在");
}
/*
* 个人信息管理控制器
* */
@Controller
@RequestMapping("/admin/")
public class AdminController extends BaseController {
@Autowired
private UserService userService;
@Autowired
private HouseService houseService;
@Autowired
private OrderService orderService;
@Autowired
private FeedbackService feedbackService;
@Autowired
private NewsService newsService;
/*
* 个人信息页面
* */
@RequestMapping("/control")
public String index(@RequestParam(value = "page", defaultValue = "1") Long pageNumber, @RequestParam(value = "size", defaultValue = "3") Long pageSize, Model model) {
/*后台控制面板的*/
User user = getLoginUser();
model.addAttribute("user", user);
model.addAttribute("tab", "admin-control");