基于javaweb+mysql的springboot美食菜谱分享平台系统设计和实现(java+springboot+mysql+ssm+thymeleaf+html)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot美食菜谱分享平台系统设计和实现(java+springboot+mysql+ssm+thymeleaf+html)
主要技术实现:spring、 springmvc、 springboot、mybatis 、session、 jquery 、 md5 、bootstarp.js tomcat、拦截器等。
具体主要功能模块如下:
1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、 2.美食分享笔记管理:分享笔记列表的展示、添加、修改、删除操作、 3.美食笔记详情管理:美食笔记详情列表的查看、添加、删除等操作、 4.管理员信息管理:管理员信息的查看、修改、 5.公告信息管理:公告信息的查看、添加、修改、删除操作、 6.用户模块管理:用户列表查询、添加、删除、 7.用户评论模块管理:用户评论查询、添加、删除、 8.注销退出登录管理
给大家截一部分效果图吧 系统首页主要功能:
分类查看没事菜谱信息以及智能推荐:
美食分享笔记详情信息查看、用户登录后可以进行评论、浏览量会增加、用户可以收藏当前文档信息、可以点击查看作者信息、可以对作者进行关注等操作:
用户评论操作:
富文本编辑器添加美食分享笔记:
个人中心我的收藏 我的关注等:
关注用户信息以及具体功能操作等:
后台管理主要功能:用户管理、美食菜谱笔记管理、美食菜谱详情发布以及评论等管理
*
* @return
*/
@RequestMapping("/regist")
public String regist() {
return "regist";
}
/**
* 保存注册信息
*
* @param user
* @return
*/
@RequestMapping("/saveUser")
public String saveUser(User user) {
List<Article> randomArticle = articleService.getRandomArticle(3);
String ids = "";
for (int i = 0; i < randomArticle.size(); i++) {
Integer articleId = randomArticle.get(i).getArticleId();
ids += articleId + ",";
}
ids = ids.substring(0, ids.length() - 1);
user.setArticleIds(ids);
userService.save(user);
return "webLogin";
}
/**
* 退出登录
*
* @param request
* @return
*/
@RequestMapping("/quit")
public String quit(HttpServletRequest request) {
HttpSession session = request.getSession();
session.removeAttribute("user");
return "index";
}
/**
* 退出登录
*
* @param request
* @return
*/
@RequestMapping("/quitAdmin")
public String quitAdmin(HttpServletRequest request) {
HttpSession session = request.getSession();
/**
* 分页查询回复
* @param reply
* @param page
* @param limit
* @return
*/
@RequestMapping("/list")
public Map<String, Object> list(Reply reply,@RequestParam(value="page",required=false)Integer page,@RequestParam(value="pageSize",required=false)Integer pageSize){
Map<String, Object> resultMap=new HashMap<String, Object>();
List<Reply> replyList=replyService.list(reply,page-1, pageSize);
Long total=replyService.getCount();
resultMap.put("errorNo", 0);
resultMap.put("data", replyList);
resultMap.put("total", total);
return resultMap;
}
/**
* 删除回复
* @param ids
* @return
*/
@RequestMapping("/delete")
public Map<String, Object> delete(@RequestParam(value="replyId")String ids){
String []idsStr=ids.split(",");
Map<String, Object> resultMap=new HashMap<String, Object>();
for(int i=0;i<idsStr.length;i++) {
replyService.delete(Integer.parseInt(idsStr[i]));
}
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
return resultMap;
}
}
* @param pageSize
* @return
*/
@RequestMapping("/list")
public Map<String, Object> list(@RequestParam(value="page",required=false)Integer page,@RequestParam(value="pageSize",required=false)Integer pageSize){
Map<String, Object> resultMap=new HashMap<String, Object>();
resultMap.put("errorNo", 0);
resultMap.put("data", noticeService.list(page-1, pageSize));
resultMap.put("total", noticeService.getCount());
return resultMap;
}
/**
* 根据ID查找公告
* @param noticeId
* @return
*/
@RequestMapping("/findById")
public Map<String, Object> findById(Integer noticeId) {
Map<String, Object> resultMap=new HashMap<String, Object>();
resultMap.put("errorNo", 0);
resultMap.put("data", noticeService.findById(noticeId));
return resultMap;
}
/**
* 添加或者修改公告
* @param notice
* @return
*/
@RequestMapping("/save")
public Map<String, Object> save(Notice notice){
Map<String, Object> resultMap=new HashMap<String, Object>();
notice.setPublishDate(new Date());
noticeService.save(notice);
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
return resultMap;
}
/**
* 批量删除公告
* @param ids
* @return
*/
/**
* 根路径以及其他请求处理
*
*/
@Controller
public class IndexController {
private String imageFilePath = System.getProperty("user.dir") + "\\src\\main\\webapp\\static\\images\\"; // 图片上传路径
@Resource
private NoticeService noticeService;
@Resource
private UserService userService;
@Resource
private ArticleService articleService;
@Resource
private ClassifyService classifyService;
@RequestMapping("/")
public String index(HttpSession session) {
// 查询公告
session.setAttribute("noticeList", noticeService.list(0, 5));
return "index";// 跳转到index.html
}
@RequestMapping("/delete")
public Map<String, Object> delete(Integer userId) {
@Resource
private ClassifyService classifyService;
@Resource
private StartupRunner startupRunner;
@RequestMapping("list")
public Map<String, Object> list(@RequestParam(value="page",required=false)Integer page,@RequestParam(value="pageSize",required=false)Integer pageSize){
Map<String, Object> resultMap=new HashMap<>();
resultMap.put("errorNo", 0);
resultMap.put("data", classifyService.list(page-1, pageSize));
resultMap.put("total", classifyService.getCount());
return resultMap;
}
/**
* 根据Id查找文章类别
* @param classifyId
* @return
*/
@RequestMapping("findById")
public Map<String, Object> findById(Integer classifyId){
Map<String, Object> resultMap=new HashMap<>();
resultMap.put("errorNo", 0);
resultMap.put("data", classifyService.findById(classifyId));
return resultMap;
}
/**
* 添加或修改文章类别
* @param classify
* @return
*/
@RequestMapping("save")
public Map<String, Object> save(Classify classify){
Map<String, Object> resultMap=new HashMap<>();
classifyService.save(classify);
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
startupRunner.loadData();
return resultMap;
}
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 获取文件的后缀
String newFileName = "";
try {
newFileName = DateUtil.getCurrentDateStr() + suffixName; // 生成新的文件名
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(imageFilePath + newFileName)); // 上传
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 回调到页面
StringBuffer sb = new StringBuffer();
sb.append("<script type=\"text/javascript\">");
sb.append("window.parent.CKEDITOR.tools.callFunction(" + CKEditorFuncNum + ",'" + "/static/images/" + newFileName
+ "','')");
sb.append("</script>");
return sb.toString();
}
}
/**
*/
@RequestMapping("/saveUser")
public String saveUser(User user) {
List<Article> randomArticle = articleService.getRandomArticle(3);
String ids = "";
for (int i = 0; i < randomArticle.size(); i++) {
Integer articleId = randomArticle.get(i).getArticleId();
ids += articleId + ",";
}
ids = ids.substring(0, ids.length() - 1);
user.setArticleIds(ids);
userService.save(user);
return "webLogin";
}
/**
* 退出登录
*
* @param request
* @return
*/
@RequestMapping("/quit")
public String quit(HttpServletRequest request) {
HttpSession session = request.getSession();
session.removeAttribute("user");
return "index";
}
/**
* 退出登录
*
* @param request
* @return
*/
@RequestMapping("/quitAdmin")
public String quitAdmin(HttpServletRequest request) {
HttpSession session = request.getSession();
session.removeAttribute("user");
return "login";
}
* @return
*/
@RequestMapping("/quit")
public String quit(HttpServletRequest request) {
HttpSession session = request.getSession();
session.removeAttribute("user");
return "index";
}
/**
* 退出登录
*
* @param request
* @return
*/
@RequestMapping("/quitAdmin")
public String quitAdmin(HttpServletRequest request) {
HttpSession session = request.getSession();
session.removeAttribute("user");
return "login";
}
/**
* 验证登录
*
* @param user
* @param request
* @return
*/
@RequestMapping("/checkLogin")
public ModelAndView checkLogin(User user, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
User u = userService.findByUsernameAndPassword(user.getUsername(), user.getPassword());
if (u == null) {
mav.addObject("user", user);
mav.addObject("errorInfo", "用户名或者密码错误!");
mav.setViewName("webLogin");
} else {
u.setLatelyLoginTime(new Date());
userService.save(u);
session.setAttribute("user", u);
mav.addObject("username", u.getUsername());
mav.addObject("user", u);
mav.addObject("success", true);
mav.setViewName("/index");
}
return mav;
}
/**
}
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
return resultMap;
}
}
/**
* 回复控制器
*
*/
@RestController
@RequestMapping("/reply")
public class ReplyController {
@Resource
private ReplyService replyService;
/**
* 获取回复
* @param reply
* @return
*/
@RequestMapping("/list")
public Map<String, Object> replyList(Reply reply) {
List<Reply> replyList = replyService.list(reply);
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("data", replyList);
/**
* 时光轴控制器
*
*/
@RestController
@RequestMapping("/admin/timeline")
public class TimelineAdminController {
@Resource
private TimelineService timelineService;
@Resource
private StartupRunner startupRunner;
/**
* 分页查询时光轴
* @param timeline
* @param page
* @param pageSize
* @return
*/
@RequestMapping("/list")
public Map<String, Object> list(Timeline timeline,@RequestParam(value="page",required=false)Integer page,@RequestParam(value="pageSize",required=false)Integer pageSize){
Map<String, Object> resultMap=new HashMap<String, Object>();
resultMap.put("errorNo", 0);
resultMap.put("data", timelineService.list(timeline,page-1, pageSize));
resultMap.put("total", timelineService.getCount(timeline));
return resultMap;
}
/**
* 根据ID查找时光轴
* @param timelineId
* @return
*/
@RequestMapping("/findById")
public Map<String, Object> findById(Integer timelineId) {
Map<String, Object> resultMap=new HashMap<String, Object>();
Map<String, Object> tempMap=new HashMap<String, Object>();
*/
@RestController
@RequestMapping("/admin/comment")
public class CommentAdminController {
@Resource
private CommentService commentService;
@Resource
private UserService userService;
@Resource
private ReplyService replyService;
@Resource
private ArticleService articleService;
/**
* 分页查询评论
* @Title: list
* @param comment 评论实体
* @param commentDates 时间段 (搜索用到)
* @param page 当前页
* @param limit 每页记录数
* @param trueName 昵称
* @return 参数说明
* @return Map<String,Object> 返回类型
* @throws
*/
@RequestMapping("/list")
public Map<String, Object> list(Comment comment,
@RequestParam(value = "commentDates", required = false) String commentDates,
@RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "pageSize", required = false) Integer pageSize,
@RequestParam(value = "nickname", required = false) String nickname) {
String s_bCommentDate = null; // 开始时间
String s_eCommentDate = null; // 结束时间
if (StringUtil.isNotEmpty(commentDates)) {
String[] strs = commentDates.split(" - "); // 拆分时间段
s_bCommentDate = strs[0];
s_eCommentDate = strs[1];
}
Integer userId = null;
Map<String, Object> resultMap = new HashMap<String, Object>();
Long total = articleService.getCount(article, s_bPublishDate, s_ePublishDate);
int totalPage = (int) (total % pageSize == 0 ? total / pageSize : total / pageSize + 1); // 总页数
resultMap.put("totalPage", totalPage);
resultMap.put("errorNo", 0);
resultMap.put("data", articleService.list(article, s_bPublishDate, s_ePublishDate, page - 1, pageSize));
resultMap.put("total", total);
return resultMap;
}
/**
* 后台默认首页
*
* @return
*/
@RequestMapping("/index")
public String root() {
return "/common/index";
}
/**
* 博主信息页面
*
* @return
*/
@RequestMapping("/blogger")
public String blogger() {
return "/blogger/index";
}
/**
* 图片上传处理 @Title: ckeditorUpload @param file 图片文件 @return 参数说明 @return
* Map<String,Object> 返回类型 @throws
*/
@ResponseBody
@RequestMapping("/upload")
public Map<String, Object> ckeditorUpload(@RequestParam("file") MultipartFile file) {
Map<String, Object> resultMap = new HashMap<String, Object>();
Map<String, Object> resultMap1 = new HashMap<String, Object>();
String fileName = file.getOriginalFilename(); // 获取文件名
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 获取文件的后缀
String newFileName = "";
try {
newFileName = DateUtil.getCurrentDateStr() + suffixName; // 新文件名
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(imageFilePath + newFileName)); // 上传
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
resultMap.put("code", 0);
* @return
*/
@RequestMapping("/checkLogin")
public ModelAndView checkLogin(User user, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
User u = userService.findByUsernameAndPassword(user.getUsername(), user.getPassword());
if (u == null) {
mav.addObject("user", user);
mav.addObject("errorInfo", "用户名或者密码错误!");
mav.setViewName("webLogin");
} else {
u.setLatelyLoginTime(new Date());
userService.save(u);
session.setAttribute("user", u);
mav.addObject("username", u.getUsername());
mav.addObject("user", u);
mav.addObject("success", true);
mav.setViewName("/index");
}
return mav;
}
/**
* 查看个人信息
*
* @return
*/
@RequestMapping("viewPerson")
public ModelAndView viewPerson(HttpServletRequest request) {
User user = (User) request.getSession().getAttribute("user");
ModelAndView mav = new ModelAndView();
User u = userService.findById(user.getUserId());
mav.addObject("user", u);
mav.setViewName("/viewPerson");
return mav;
}
/**
* 查看个人收藏夹
*
* @return
*/
@RequestMapping("viewCollection")
public ModelAndView viewCollection(HttpServletRequest request, HttpSession session) {
User user = (User) request.getSession().getAttribute("user");
ModelAndView mav = new ModelAndView();
User u = userService.findById(user.getUserId());
String artIds = u.getArticleIds();
List<String> result = new ArrayList<>();
if (StringUtils.isNotBlank(artIds)) {
obj.put("create_time", DateUtil.formatDate(map.getPublishDate(), "MM月dd日 hh:mm"));
obj.put("content", map.getContent());
monthList.add(obj);
monthMap.put(map.getMonth(), monthList);
yearMap.remove("month");
yearMap.put("month", monthMap);
jsonMap.remove(map.getYear());
jsonMap.put(map.getYear(), yearMap);
}
List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
for (Map.Entry<String, Object> entry : jsonMap.entrySet()) {
datas.add((Map<String, Object>) entry.getValue());
}
resultMap.put("datas", datas);
resultMap.put("result", 1);
}else {
resultMap.put("data", "还没有时光轴数据!");
}
return resultMap;
}
}
/**
* 友情链接控制器
*
*/
@RestController
@RequestMapping("/admin/link")
public class LinkAdminController {
@Resource
private LinkService linkService;
@Resource
private StartupRunner startupRunner;
private MusicService musicService;
@Resource
private ArticleIndex articleIndex;
@Resource
private UserService userService;
@Resource
private ClassifyService classifyService;
private String downloadImagePath = System.getProperty("user.dir") + "\\src\\main\\webapp"; // 图片下载路径
/**
* 文章专栏
*
* @return
*/
@RequestMapping("/article")
public String article() {
return "/foreground/article";
}
@RequestMapping("/mixed_pic")
public String mixed_pic() {
return "/foreground/mixed_pic";
}
/**
* 点点滴滴
*
* @return
*/
@RequestMapping("/timeline")
public String timeline() {
return "/foreground/timeline";
}
/**
* 关于本站
*
* @return
*/
@RequestMapping("/about")
public String about() {
return "/foreground/mixed_pic";
}
/**
* 点点滴滴
*
* @return
*/
@RequestMapping("/timeline")
public String timeline() {
return "/foreground/timeline";
}
/**
* 关于本站
*
* @return
*/
@RequestMapping("/about")
public String about() {
return "/foreground/about";
}
/**
* 文章详情
*
* @return
*/
@RequestMapping("/detail/{id}")
public ModelAndView detail(@PathVariable(value = "id", required = false) Integer id, HttpSession session) {
ModelAndView mav = new ModelAndView();
articleService.increaseClick(id);
Article article = articleService.findById(id);
Article tempArticle = new Article();
tempArticle.setClassify(article.getClassify());
session.setAttribute("similarityList", articleService.list(tempArticle, null, null, 0, 10));
session.setAttribute("RandomArticleList", articleService.getRandomArticle(10)); // 10条随机文章
// 判断该文章是否收藏
boolean flag = false;
User user = (User) session.getAttribute("user");
if (user != null) {
String artIds = user.getArticleIds();
return resultMap;
}
/**
* 根据ID查找公告
* @param noticeId
* @return
*/
@RequestMapping("/findById")
public Map<String, Object> findById(Integer noticeId) {
Map<String, Object> resultMap=new HashMap<String, Object>();
resultMap.put("errorNo", 0);
resultMap.put("data", noticeService.findById(noticeId));
return resultMap;
}
/**
* 添加或者修改公告
* @param notice
* @return
*/
@RequestMapping("/save")
public Map<String, Object> save(Notice notice){
Map<String, Object> resultMap=new HashMap<String, Object>();
notice.setPublishDate(new Date());
noticeService.save(notice);
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
return resultMap;
}
/**
* 批量删除公告
* @param ids
* @return
*/
@RequestMapping("/delete")
public Map<String, Object> delete(@RequestParam(value="noticeId")String ids){
Map<String, Object> resultMap=new HashMap<String, Object>();
String []idsStr=ids.split(",");
for(int i=0;i<idsStr.length;i++) {
noticeService.delete(Integer.parseInt(idsStr[i]));
}
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
return resultMap;
}
/**
* 管理员控制器
*
*/
@RestController
@RequestMapping("/admin")
public class AdminController {
@Value("${MD5Salt}")
private String salt; // md5加密盐
@Resource
private AdminService adminService;
@Resource
private UserService userService;
@Resource
private ArticleService articleService;
@Resource
private ClassifyService classifyService;
/**
* 后台管理员登录验证
* @param admin
* @param request
* @return
*/
@RequestMapping("/login")
public ModelAndView login(Admin admin, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
try {
Admin resultUser = adminService.findByUserNameAndPassword(admin.getUserName(), admin.getPassword());
if (resultUser == null) {
mav.addObject("errorInfo", "用户名或者密码错误!");
mav.setViewName("/login");
} else {
session.setAttribute("adminUser", resultUser);
// 统计用户总数
Long userCount = userService.getCount();
// 统计今天注册
Long userRegCount = userService.getTodayRegistCount(new User(), "1", "1");
// 统计今日登录