目录
大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是 一款基于SpringBoot+Vue的论坛管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品 毕设 JavaWeb SSM SpringBoot等等项目框架,源码丰富,欢迎咨询。
一、项目介绍
如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在世界上遥遥领先,让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法,必须采用计算机来处理这些信息,因为传统方法对应计算机处理的信息效率上真的相差甚远。
本次使用Java技术开发的论坛系统,就是运用计算机来管理论坛帖子信息,该系统是可以实现版主管理,新闻信息管理,论坛帖子管理,用户管理,留言版管理等功能。
论坛系统使用计算机处理相关信息,主要是在数据的传输上能达到即可传递,数据不管是想要获取或者输入,都可以及时反馈,极大的提高了效率,使用的MySQL数据库也能让数据更能安全的存储。
关键词:论坛系统;版主;帖子
二、开发环境
开发系统:Windows
JDK版本:Java JDK1.8(推荐)
开发工具:IDEA/MyEclipse(推荐IDEA)
数据库版本: mysql8.0(推荐)
数据库可视化工具: navicat
服务器:SpringBoot自带 apache tomcat
框架:springboot,vue
三、功能介绍
管理员主要实现版主管理、用户管理、留言板管理。管理员对版主、用户的基本资料进行修改,添加,查询,删除;管理员可以查看用户留言,通过用户姓名或留言标题查询留言,回复留言内容,删除留言等。
版主主要实现论坛管理、新闻信息查看、个人信息管理。版主可以新增论坛帖子,论坛帖子有发帖时间,帖子标题,身份,姓名,手机号,帖子类型等信息,发布帖子之后,版主可以对论坛帖子的回复随时进行查看;查询新闻,对新闻内容,包括新闻标题在内的新闻信息进行查看;主对个人信息,主要是联系方式,头像等进行更改。
用户只要实现留言板、在线论坛和新闻信息。允许用户与管理员交流,主要是需要用户先发布留言,管理员针对留言内容进行回复;用户根据帖子类型筛选帖子,用户对本界面显示的所有帖子都能查看和评论,用户也能在本界面发布帖子;允许用户查询新闻,对新闻具体内容进行查看。
四、核心代码
/**
* 留言版
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/liuyan")
public class LiuyanController {
private static final Logger logger = LoggerFactory.getLogger(LiuyanController.class);
@Autowired
private LiuyanService liuyanService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private YonghuService yonghuService;
@Autowired
private BanzhuService banzhuService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
else if("版主".equals(role))
params.put("banzhuId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = liuyanService.queryPage(params);
//字典表数据转换
List<LiuyanView> list =(List<LiuyanView>)page.getList();
for(LiuyanView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
LiuyanEntity liuyan = liuyanService.selectById(id);
if(liuyan !=null){
//entity转view
LiuyanView view = new LiuyanView();
BeanUtils.copyProperties( liuyan , view );//把实体数据重构到view中
//级联表
YonghuEntity yonghu = yonghuService.selectById(liuyan.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody LiuyanEntity liuyan, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,liuyan:{}",this.getClass().getName(),liuyan.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("用户".equals(role))
liuyan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper<LiuyanEntity> queryWrapper = new EntityWrapper<LiuyanEntity>()
.eq("yonghu_id", liuyan.getYonghuId())
.eq("liuyan_name", liuyan.getLiuyanName())
.eq("liuyan_text", liuyan.getLiuyanText())
.eq("reply_text", liuyan.getReplyText())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
LiuyanEntity liuyanEntity = liuyanService.selectOne(queryWrapper);
if(liuyanEntity==null){
liuyan.setInsertTime(new Date());
liuyan.setCreateTime(new Date());
liuyanService.insert(liuyan);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody LiuyanEntity liuyan, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,liuyan:{}",this.getClass().getName(),liuyan.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("用户".equals(role))
// liuyan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//根据字段查询是否有相同数据
Wrapper<LiuyanEntity> queryWrapper = new EntityWrapper<LiuyanEntity>()
.notIn("id",liuyan.getId())
.andNew()
.eq("yonghu_id", liuyan.getYonghuId())
.eq("liuyan_name", liuyan.getLiuyanName())
.eq("liuyan_text", liuyan.getLiuyanText())
.eq("reply_text", liuyan.getReplyText())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
LiuyanEntity liuyanEntity = liuyanService.selectOne(queryWrapper);
liuyan.setUpdateTime(new Date());
if(liuyanEntity==null){
liuyanService.updateById(liuyan);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
liuyanService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
五、效果图
六、源码获取:
同系统在主页搜索资源可下载~