一、摘要
1.1 项目介绍
基于JAVA+Vue+SpringBoot+MySQL的快乐贩卖馆管理系统,包含了视频模块、视频收藏模块、视频打分模块、视频交友模块、视频购物车模块和视频订单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,快乐贩卖馆管理系统基于角色的访问控制,给视频管理员、普通用户使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
1.2 源码 & 项目详细录屏
https://www.bilibili.com/video/BV13g4y1d7qe
二、功能模块
随着互联网行业各种业务的兴起和发展,这一领域的市场竞争也日趋激烈。从视频网站的角度来看,主要的视频网站并未像许多人认为的那样在激烈的市场竞争中真正获利。相反,连续的损失是视频网站面临的最困难的问题。快乐贩卖馆系统是一套交易搞笑视频的系统,用户可以在其中自由交易搞笑视频。
快乐贩卖馆系统基于Java语言开发,采用前后端分离的技术架构,前端采用Vue.js,后端采用SpringBoot框架,采用MySQL数据库。
快乐贩卖馆系统的功能性需求主要包含数据中心模块、搞笑视频模块、视频收藏模块、视频评价模块、视频交易模块、视频好友模块这六大模块,系统是基于浏览器运行的web管理后端,其中各个模块详细说明如下。
2.1 数据中心模块
数据中心模块包含了快乐贩卖馆系统的系统基础配置,如登录用户的管理、运营公司组织架构的管理、用户菜单权限的管理、系统日志的管理、公用文件云盘的管理。 其中登录用户管理模块,由管理员负责运维工作,管理员可以对登录用户进行增加、删除、修改、查询操作。 组织架构,指的是高校的组织架构,该模块适用于管理这些组织架构的部门层级和教师的部门归属情况。 用户菜单权限管理模块,用于管理不同权限的用户,拥有哪些具体的菜单权限。 系统日志的管理,用于维护用户登入系统的记录,方便定位追踪用户的操作情况。 公用云盘管理模块,用于统一化维护快乐贩卖馆系统中的图片,如合同签订文件、合同照片等等。
2.2 搞笑视频模块
搞笑视频是快乐贩卖馆系统的核心,需要建立搞笑视频模块对其进行管理,搞笑视频的数据包括视频名称、视频介绍、视频价格、文件、排序值、备注、创建人、创建时间、更新人、更新时间,用户可以发布新的搞笑视频,管理员可以对用户发布的搞笑视频进行删除操作。
2.3 视频收藏模块
如果用户对某个视频非常满意,可以对其进行收藏,以便于后续快捷浏览,视频收藏的字段包括视频ID、视频名称、收藏时间、备注、创建人、创建时间、更新人、更新时间,用户可以对搞笑视频进行收藏操作,管理员可以查询用户的收藏数据。
2.4 视频评分模块
在快乐贩卖馆系统中,用户可以对搞笑视频进行评价,以此达到交互的效果,视频评分的数据包括视频ID、视频名称、视频文件、评分数值、创建人、创建时间、更新人、更新时间,用户可以对搞笑视频进行评分操作,管理员可以查询用户的评分数据。
2.5 视频交易模块
用户可以购买搞笑视频,购买需要消耗余额,余额来源自上传的搞笑视频,视频交易字段包括视频ID、视频名称、视频文件、付款状态、创建人、创建时间、更新人、更新时间,用户可以对搞笑视频进行下单、付款操作,管理员可以查询用户的交易数据。
2.6 视频好友模块
如果用户对视频的发布者很感兴趣,可以添加单向好友,方便留档,视频好友的字段包括所属人、好友ID、好友昵称、好友手机、创建人、创建时间、更新人、更新时间,用户可以添加搞笑视频的创作者,管理员可以查询用户添加的好友数据。
三、系统设计
3.1 用例设计
3.2 数据库设计
3.2.1 搞笑视频表
3.2.2 视频收藏表
3.2.3 视频评分表
3.2.4 视频交易表
四、系统展示
五、核心代码
5.1 查询搞笑视频
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询搞笑视频")
public Result<IPage<FunnyVideo>> getByPage(@ModelAttribute FunnyVideo funnyVideo ,@ModelAttribute PageVo page){
QueryWrapper<FunnyVideo> qw = new QueryWrapper<>();
User currUser = securityUtil.getCurrUser();
if(!ZwzNullUtils.isNull(funnyVideo.getTitle())) {
qw.like("title",funnyVideo.getTitle());
}
if(!ZwzNullUtils.isNull(funnyVideo.getContent())) {
qw.like("content",funnyVideo.getContent());
}
IPage<FunnyVideo> data = iFunnyVideoService.page(PageUtil.initMpPage(page),qw);
for (FunnyVideo vo : data.getRecords()) {
// 好友状态
QueryWrapper<FunnyOrder> orderQw = new QueryWrapper<>();
orderQw.eq("video_id",vo.getId());
orderQw.eq("user_id",currUser.getId());
vo.setStatus1(iFunnyOrderService.count(orderQw));
// 好友状态
QueryWrapper<Friends> friQw = new QueryWrapper<>();
friQw.eq("my_id",currUser.getId());
friQw.eq("user_id",vo.getUserId());
vo.setStatus2(iFriendsService.count(friQw));
// 收藏状态
QueryWrapper<FunnyCollect> fcQw = new QueryWrapper<>();
fcQw.eq("video_id",vo.getId());
fcQw.eq("user_id",currUser.getId());
vo.setStatus3(iFunnyCollectService.count(fcQw));
}
return new ResultUtil<IPage<FunnyVideo>>().setData(data);
}
5.2 加购搞笑视频
@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增单条搞笑视频订单")
public Result<FunnyOrder> addOne(@RequestParam String id){
FunnyVideo v = iFunnyVideoService.getById(id);
if(v == null) {
return ResultUtil.error("视频不存在");
}
User currUser = securityUtil.getCurrUser();
QueryWrapper<FunnyOrder> orderQw = new QueryWrapper<>();
orderQw.eq("video_id",v.getId());
orderQw.eq("user_id", currUser.getId());
FunnyOrder order = iFunnyOrderService.getOne(orderQw);
if(order != null) {
if(Objects.equals("加购",order.getStatus1())) {
return ResultUtil.error("您已加购,请下单");
} else {
return ResultUtil.error("您已购买,无需重复购买");
}
}
FunnyOrder o = new FunnyOrder();
o.setVideoId(v.getId());
o.setTitle(v.getTitle());
o.setContent(v.getContent());
o.setFileUrl(v.getFileUrl());
o.setPrice(v.getPrice());
o.setUserId(currUser.getId());
o.setUserName(currUser.getNickname());
o.setStatus1("加购");
o.setStatus2("未付款");
iFunnyOrderService.saveOrUpdate(o);
return ResultUtil.success();
}
5.3 搞笑视频打分
@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增单条搞笑视频评分")
public Result<Object> addOne(@RequestParam String id,@RequestParam BigDecimal grade){
FunnyVideo video = iFunnyVideoService.getById(id);
if(video == null) {
return ResultUtil.error("视频不存在");
}
User currUser = securityUtil.getCurrUser();
FunnyGrade c = new FunnyGrade();
c.setVideoId(video.getId());
c.setTitle(video.getTitle());
c.setContent(video.getContent());
c.setFileUrl(video.getFileUrl());
c.setUserId(currUser.getId());
c.setUserName(currUser.getNickname());
c.setGrade(grade);
c.setTime(DateUtil.now());
iFunnyGradeService.saveOrUpdate(c);
return ResultUtil.success();
}
5.4 搞笑视频收藏
@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增单条搞笑视频收藏")
public Result<Object> addOne(@RequestParam String id){
FunnyVideo video = iFunnyVideoService.getById(id);
if(video == null) {
return ResultUtil.error("视频不存在");
}
User currUser = securityUtil.getCurrUser();
QueryWrapper<FunnyCollect> qw = new QueryWrapper<>();
qw.eq("video_id",video.getId());
qw.eq("user_id",currUser.getId());
if(iFunnyCollectService.count(qw) < 1L) {
FunnyCollect c = new FunnyCollect();
c.setVideoId(video.getId());
c.setTitle(video.getTitle());
c.setContent(video.getContent());
c.setFileUrl(video.getFileUrl());
c.setUserId(currUser.getId());
c.setUserName(currUser.getNickname());
c.setTime(DateUtil.now());
iFunnyCollectService.saveOrUpdate(c);
}
return ResultUtil.success();
}
5.5 添加好友
@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "添加单条好友")
public Result<Friends> addOne(@RequestParam String id){
FunnyVideo v = iFunnyVideoService.getById(id);
if(v == null) {
return ResultUtil.error("视频不存在");
}
User currUser = securityUtil.getCurrUser();
if(Objects.equals(v.getUserId(),currUser.getId())) {
return ResultUtil.error("不能添加自己为好友!");
}
QueryWrapper<Friends> qw = new QueryWrapper<>();
qw.eq("my_id", currUser.getId());
qw.eq("user_id",v.getUserId());
if(iFriendsService.count(qw) > 0L) {
return ResultUtil.error("已添加,无需重复添加!");
}
User user = iUserService.getById(v.getUserId());
if(user != null) {
Friends f = new Friends();
f.setMyId(currUser.getId());
f.setUserId(user.getId());
f.setUserName(user.getNickname());
f.setMobile(user.getMobile());
f.setAddTime(DateUtil.now());
iFriendsService.saveOrUpdate(f);
}
return ResultUtil.success();
}
六、免责说明
- 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
- 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
- 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!
- 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
- 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
- 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
- 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。