IT社区|基于SpringBoot的IT社区平台
作者简介:全栈开发工程,从事Java、Python、前端、小程序方面的开发和研究,对大数据应用与开发比较感兴趣,
主要内容:Java项目、前端项目、Python项目、小程序开发、大数据项目、单片机
收藏点赞不迷路 关注作者有好处
文末获取源码
感谢您的关注,请收藏以免忘记,点赞以示鼓励,评论给以建议,爱你哟
作者主页:编程指南针
作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师
主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助
收藏点赞不迷路 关注作者有好处
文末获取源码
项目编号:BS-PT-098
前言:
随着国家的发展,网络的普及,以及IT行业的高薪就职,导致越来越多的人进入IT行业,分一杯羹,但是由于众多的人数,肯定会存在技术参差不齐的现象,在书写代码上出现了错误,有问题解决不出来时,不知道找谁询问。因此IT社区平台应景而生,不同的IT大神,小白,都可以发布帖子,对帖子进行客观、实在的评价,不同的观点,不同的思想,能够碰发出不一样的火花。本系统的设计目的主要是为了方便同学们在论坛上进行沟通,与网友进行思维碰撞。方便大家在学习生活上有疑难的时候可以询问他人。
本社区平台属于前后端分离的项目,前台包含了首页、文章模块、论贴模块、搜索模块、视频模块、排行模块、筛选模块、个人中心模块(个人资料、我的文章、我的视频、我的帖子、消息通知、收藏、关注、评论、粉丝),后台包含了首页、论贴管理模块、视频管理模块、论贴类型模块、文章管理模块,用户管理,文章标签管理,日志管理。其中每个主模块中又包含多个子模块。
一,项目简介
本社区平台提供了两个可使用的角色:用户、管理员。本平台包含了前台系统和后台管理系统两个系统,前台系统供用户使用,而后台管理系统则供管理员使用。前台系统分为登录注册模块、首页、文章模块、论贴模块、搜索模块、视频模块、排行模块、筛选模块、个人中心模块;后台系统分为首页、论贴管理模块、视频管理模块、论贴类型模块、文章管理模块,用户管理,文章标签管理,日志管理等。
1.前台系统
文章模块:用户可以查看自己感兴趣的文章,可以对文章点赞,收藏,转发,评论等。
论贴模块:用户对其他用户提出的问题进行回答讨论,该模块没限制,用户可以自行发言。
搜索模块:用户可以在前台系统中输入相关信息进行全局查询。
视频模块:用户可以发布教学视频,知识视频等。
排行模块:对论贴类型进行各种排行,评分,点击量,收藏量等等。
个人中心模块:包含各种子模块:个人资料、我的文章、我的视频、我的帖子、消息通知、收藏、关注、评论、粉丝、私信等。
2.后台系统
论贴管理:管理员可以对论贴进行审核,驳回操作。
文章管理:管理员对文章,转发,评论进行管理。
论贴类型模块:管理员对论贴的种类进行管理操作。
用户管理模块:管理员对用户进行认证。
文章标签维护:管理员对前台显示的文章标签进行禁用启动编辑等操作。
日志管理:记录用户的各种操作。
本系统的具体功能分析如下:
- 前台系统模块功能
表3-1 前台系统模块描述
功能名称 |
功能描述 |
文章模块 |
该模块中主要功能包括查看文章详情,发布文章,对文章进行评论,转发文章,对文章点赞。发布文章时选择文章标签然后进行发布。 |
搜索模块 |
通过输入关键字进行模糊查询,查询的范围包含论贴类型,论贴,文章,视频,用户。一输多查。 |
论贴模块 |
发布帖子,通过选择不同的帖子类型进行发布不同的帖子,有面试贴,技术贴,内推贴等等。进入某个帖子专区,可以查看全部属于该专区的帖子,以及属于该专区的视频。 |
排行模块 |
排行中包含评分排行,点击量排行,收藏量排行等功能。 |
视频模块 |
主要功能有发布视频,观看视频,和类型表关联。可以在专区中查看该专区所属的视频。 |
个人中心模块 |
该模块中的功能有:个人资料的修改查看、个人论贴、个人视频、个人文章、个人转发、个人消息(系统消息、动态消息、评论消息、私信消息)、个人收藏、个人评论、个人关注、个人粉丝等若干个功能。 |
2.后台系统模块功能
表3-2 后台系统模块描述
模块名称 |
功能描述 |
文章管理模块 |
原创文章,转发文章,评论进行删除,重写发布操作。 |
用户管理模块 |
对用户进行认证,查询,删除操作。 |
论贴管理模块 |
该模块功能对用户发布的帖子进行审核,驳回操作。 |
视频管理模块 |
该模块的主要功能是对用户发布的视频进行审核,驳回等操作。 |
文章标签维护模块 |
对标签的禁用启用,编辑,彻底删除,查询,添加等操作 |
日志管理模块 |
查询用户的日志,删除日志。 |
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发:Springboot+Mybatis-plus
前台开发:VUE
三,系统展示
5.1 登录注册界面的实现
5.2文章模块的实现
5.3搜索模块的实现
检索模块界面如图5-5,用户输入关键词,通过模糊查询,包含多条查询语句,对论贴类型,论贴,文章,视频,用户的模糊查询,前端查询函数同时执行多条查询sql语句,使其达到目的。
5.4 论贴模块的实现
5.5 排行模块的实现
排行模块如图5-8,该模块通过对数据库话题标(论贴类型表)进行查询,分别对评分,点击量,收藏量进行排序,通过sql语句查询出前10条数据返回页面,进行页面渲染。
5.6 视频模块的实现
视频模块如图5-9、5-10,该模块通过阿里云第三方视频点播服务来完成,通过获取阿里云oss的endpoint,keyid,keysecret,bucketname进行绑定,获取第三方api来实现具体的功能。用户发布视频后,同样需要管理员来审核。
5.7 个人中心模块的实现
5.8 文章管理模块实现
文章管理模块如图5-13、5-14,该模块主要是对文章表、评论表进行sql操作,文章显示,逻辑删除,重新发布等操作,包括转发的文章,同时也包括评论语句。该模块是对文章表,评论表的基本sql语句操作。
四,核心代码展示
public Result item(@RequestParam(defaultValue = "0L", name = "userId") Long userId, @RequestParam("thatId") Long thatId) {// 保存收藏、关注、粉丝、动态、转发、评论、消息数int collectionCount = collectionService.count(new QueryWrapper<Collection>().eq("user_id", thatId));int attentionCount = attentionService.count(new QueryWrapper<Attention>().eq("this_id", thatId));int fansCount = attentionService.count(new QueryWrapper<Attention>().eq("that_id", thatId));int essayCount = essayService.count(new QueryWrapper<Essay>().eq("user_id", thatId));int forwardCount = forwardService.count(new QueryWrapper<Forward>().eq("user_id", thatId));int commentCount = commentService.count(new QueryWrapper<Comment>().eq("user_id", thatId));int messageCount = messageService.count(new QueryWrapper<Message>().eq("this_id", thatId));int newsCount = newsService.count(new QueryWrapper<News>().eq("user_id", thatId).eq("zt", MapUtil.YFB));int videoCount = videoService.count(new QueryWrapper<Video>().eq("user_id", thatId).eq("zt", MapUtil.VIDEO_YFB));final Attention one = attentionService.getOne(new QueryWrapper<Attention>().eq("this_id", userId).eq("that_id", thatId));User user;Object obj = redisUtils.get(MapUtil.USER_KEY + thatId);if (obj != null) {user = (User) obj;} else {user = userService.getById(thatId);redisUtils.set(MapUtil.USER_KEY + thatId, user, MapUtil.USER_SXQ);}Item item = new Item();// 是否已关注item.setFlagAttention(one == null ? 0 : 1);item.setAttentionCount(attentionCount);item.setCollectionCount(collectionCount);item.setFansCount(fansCount);item.setEssayCount(essayCount);item.setForwardCount(forwardCount);item.setCommentCount(commentCount);item.setMessageCount(messageCount);item.setNewsCount(newsCount);item.setVideoCount(videoCount);BeanUtil.copyProperties(user, item);return Result.success(item);}
try {//accessKeyId, accessKeySecret//fileName:上传文件原始名称String fileName = file.getOriginalFilename();//title:上传之后显示名称String title = fileName.substring(0, fileName.lastIndexOf("."));//inputStream:上传文件输入流InputStream inputStream = file.getInputStream();UploadStreamRequest request = new UploadStreamRequest(ConstantProperties.ACCESS_KEY_ID, ConstantProperties.ACCESS_KEY_SECRET, title, fileName, inputStream);UploadVideoImpl uploader = new UploadVideoImpl();UploadStreamResponse response = uploader.uploadStream(request);String videoId;if (response.isSuccess()) {videoId = response.getVideoId();} else {//如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。// 其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因videoId = response.getVideoId();}return videoId;} catch (Exception e) {e.printStackTrace();return null;}
package com.superb.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.superb.common.MapUtil;
import com.superb.entity.Message;
import com.superb.entity.News;
import com.superb.entity.Record;
import com.superb.entity.Video;
import com.superb.service.MessageService;
import com.superb.service.OssService;
import com.superb.service.RecordAdminService;
import com.superb.service.VideoService;
import com.superb.util.Result;
import com.superb.util.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import java.util.Map;/*** <p>* 前端控制器* </p>**/
@RestController
@RequestMapping("/video")
public class VideoController {@Autowiredprivate OssService ossService;@Autowiredprivate VideoService videoService;/*** 视频列表 已发布* @param current* @param size* @return*/@GetMapping("/list")public Result list(@RequestParam(defaultValue = "1", name = "current") Integer current,@RequestParam(defaultValue = "10", name = "size") Integer size){Page<Map<String, Object>> page = new Page<>(current, size);IPage<Map<String, Object>> mapIPage = videoService.listVideo(page, MapUtil.VIDEO_YFB);return Result.success(mapIPage);}/*** 相关视频推荐列表 已发布* @param current* @param size* @return*/@GetMapping("/listVideoByStyleId")public Result listVideoByStyleId(@RequestParam(defaultValue = "1", name = "current") Integer current,@RequestParam(defaultValue = "5", name = "size") Integer size, @RequestParam("styleId")Integer styleId){Page<Map<String, Object>> page = new Page<>(current, size);IPage<Map<String, Object>> mapIPage = videoService.listByStyleId(page, styleId);return Result.success(mapIPage);}/*** 查询所有已驳回 video 附加user* @param current* @param size* @return*/@GetMapping("/listAdminYbh")public Result listAdminYbh (@RequestParam(defaultValue = "1",value = "current") Integer current,@RequestParam(defaultValue = "10",name = "size") Integer size) {Page<Map<String ,Object>> page = new Page<>(current, size);IPage<Map<String, Object>> list = videoService.listVideo(page, MapUtil.VIDEO_YBH);return Result.success(list);}/*** 查询所有待审核 video 附加user* @param current* @param size* @return*/@GetMapping("/listAdminDsh")public Result listAdminDsh (@RequestParam(defaultValue = "1",value = "current") Integer current,@RequestParam(defaultValue = "10",name = "size") Integer size) {Page<Map<String ,Object>> page = new Page<>(current, size);IPage<Map<String, Object>> list = videoService.listVideo(page, MapUtil.VIDEO_DSH);return Result.success(list);}/*** 视频排行* @return*/@GetMapping("/itemPh")public Result itemPh () {return Result.success(videoService.listPh(MapUtil.PHTS, MapUtil.VIDEO_YFB));}/*** 视频详情* @param id* @return*/@GetMapping("/itemXq")public Result itemXq (@RequestParam("id") Integer id) {Map<String, Object> map = videoService.videoById(id);map.put("count", (Long)map.get("count") + 1L);// 访问量+1Video video = new Video();video.setId(id);video.setCount((Long)map.get("count"));videoService.updateById(video);return Result.success(map);}/*** 个人视频* @param current* @param size* @return*/@GetMapping("/listByUserId")public Result listByUserId(@RequestParam(defaultValue = "1", name = "current") Integer current,@RequestParam(defaultValue = "8", name = "size") Integer size,@RequestParam("userId") Long userId){Page<Map<String, Object>> page = new Page<>(current, size);IPage<Map<String, Object>> mapIPage = videoService.listByUserId(page, userId);return Result.success(mapIPage);}/*** 上传视频* @param file* @return*/@PostMapping("/uploadAlyVideo")public Result uploadAlyVideo(MultipartFile file){String videoId = ossService.uploadVideoAly(file);return Result.success(videoId);}/*** 保存* @param video* @return*/@PostMapping("/saveVideo")public Result saveVideo(@RequestBody Video video){video.setZt(MapUtil.VIDEO_DSH);// 获取视频urlString urlById = Utils.getUrlById(video.getVideoId());video.setVideoUrl(urlById);videoService.save(video);return Result.success();}/*** 删除视频* @param video* @return*/@PostMapping("/delete")public Result delete(@RequestBody Video video){ossService.removeMoreAlyVideo(video.getVideoId());return Result.success();}@Autowiredprivate RecordAdminService recordAdminService;@Autowiredprivate MessageService messageService;/*** 驳回视频* @param video* @return*/@PostMapping("/bhAdmin")public Result bhAdmin (@RequestBody Video video) {video.setZt(MapUtil.VIDEO_YBH);videoService.updateById(video);// 发消息Message message = new Message();message.setMessageTitle(MapUtil.XTTZ);message.setMessageText("你的视频《" + video.getVideoTitle() + "》已被驳回");message.setMessageType(MapUtil.XXLX_XT);message.setThatId(MapUtil.GLYID);message.setThisId(video.getUserId());// 后台记录recordAdminService.xr("驳回视频:" + video.getVideoTitle());messageService.save(message);return Result.success("已驳回");}/*** 发布* @param video* @return*/@PostMapping("/fbAdmin")public Result fbAdmin (@RequestBody Video video) {video.setZt(MapUtil.VIDEO_YFB);videoService.updateById(video);// 发消息Message message = new Message();message.setMessageTitle(MapUtil.XTTZ);message.setMessageText("你的视频《" + video.getVideoTitle() + "》已通过审核");message.setMessageType(MapUtil.XXLX_XT);message.setThatId(MapUtil.GLYID);message.setThisId(video.getUserId());// 后台记录recordAdminService.xr("审批通过:" + video.getVideoTitle());messageService.save(message);return Result.success("已发布");}/*** 模糊查询* @param text* @return*/@GetMapping("/search")public Result search(@RequestParam(defaultValue = "", value = "text") String text,@RequestParam(defaultValue = "1", name = "current") Integer current,@RequestParam(defaultValue = "8", name = "size") Integer size){Page<Map<String, Object>> page = new Page<>(current, size);IPage<Map<String, Object>> search = videoService.search(page, text);return Result.success(search);}
}
五,项目总结
IT社区|基于SpringBoot的IT社区平台相关推荐
- 基于springboot的小区社区物业管理系统
一.基于springboot的小区社区物业管理系统 此社区物业管理系统融合了大多数功能,具有管理员和住户两种角色.管理系统可以使小区的管理水平有很大的提升,使小区的管理更加方便便捷 社区管理员具有,车 ...
- 计算机毕业设计springboot基于Springboot的在线教育平台的设计与实现8qecq源码+系统+程序+lw文档+部署
计算机毕业设计springboot基于Springboot的在线教育平台的设计与实现8qecq源码+系统+程序+lw文档+部署 计算机毕业设计springboot基于Springboot的在线教育平台 ...
- springboot+vue+elementUI 基于Springboot的智慧养老平台#毕业设计
随着社会的发展我国的人口老龄化严重,为了让这些在年前是给社会做出过贡献的老人老有所依,老有所养,度过一个安详的晚年,很多地方都实现了智慧养老,为此我们通过springboot+vue+elementU ...
- [附源码]计算机毕业设计基于springboot的高校资源共享平台
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- springboot毕设项目基于springboot的模拟面试平台 7tch0(java+VUE+Mybatis+Maven+Mysql)
springboot毕设项目基于springboot的模拟面试平台 7tch0(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 ...
- Springboot毕设项目基于springboot的模拟面试平台 7tch0java+VUE+Mybatis+Maven+Mysql+sprnig)
Springboot毕设项目基于springboot的模拟面试平台 7tch0java+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk1.8 + Tomc ...
- 基于Springboot的书籍学习平台
摘要 首先,论文一开始便是清楚的论述了平台的研究内容.其次,剖析平台需求分析,弄明白"做什么",分析包括业务分析和业务流程的分析以及用例分析,更进一步明确平台的需求.然后在明白了平 ...
- 基于springboot的家装平台设计与实现
项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等.这里根据疫情当下,你 ...
- Springboot毕设项目基于SpringBoot的民宿平台的开发与实现4p26z(java+VUE+Mybatis+Maven+Mysql)
Springboot毕设项目基于SpringBoot的民宿平台的开发与实现4p26z(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8 ...
最新文章
- 私藏的7个实用工具,干货多到爆炸!
- OpenStack Network --- introduction部分 阅读笔记
- 简单枚举(算法竞赛入门经典)
- c语言判断整数_C语言技能|(草稿,不断完善中...)
- java单例模式和HashMap的线程安全
- 提交App中断出现 Cannot proceed with delivery an existing transporter instan
- 10年老分析师:数据分析不只是一个岗位,更是一种职场必备能力
- php vue seo,处理 Vue 单页面 SEO 的另一种思路
- zw版【转发·台湾nvp系列Delphi例程】.NET调用HALCON COM控件内存释放模式
- Spring父子上下文(WebApplicationContext)(防止事务失效)
- 关于Asterisk的传真以及ForIP的概念
- 计算机图形学中划线的程序,计算机图形学划线实验报告
- CLIP改进工作串讲(上)
- 绝对经典!百句浓缩版小常识(ZT)
- ad 新建一个componen的类_Glyphs智能母件:字体设计师的好帮手 Glyphs smart Component: a good helper font designer...
- Web 窗体控件简介
- HTML小游戏16 —— 消除游戏《魔法石》源码(附完整源码)
- Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]
- 谷歌Project Ara,将开启下一个智能手机时代
- 预成大器,远离对日外包