当前位置: 首页 > wzjs >正文

临沂网站建设wyjzgzs专业vi机构

临沂网站建设wyjzgzs,专业vi机构,手机建设网站的目的,wordpress搜视网【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 saveVideoInfo 方法是一个用于保存视频信息及其关联文件的复杂业务方法,主要处理视频信息的创建、更新以及关联文件的管理。以下是详细解析: 1. 方法概述 Overrid…

【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版

saveVideoInfo 方法是一个用于保存视频信息及其关联文件的复杂业务方法,主要处理视频信息的创建、更新以及关联文件的管理。以下是详细解析:

1. 方法概述

@Override
@Transactional(rollbackFor = Exception.class)
public void saveVideoInfo(VideoInfoPost videoInfoPost, List<VideoInfoFilePost> uploadFileList)

事务注解@Transactional(rollbackFor = Exception.class) 表示该方法在一个事务中执行,遇到任何异常都会回滚
参数
videoInfoPost:视频主信息
uploadFileList:视频关联的文件列表

2. 分P数校验

if (uploadFileList.size() > redisComponent.getSysSettingDto().getVideoPCount()) {throw new BusinessException(ResponseCodeEnum.CODE_600);
}

功能:检查上传的视频分P数是否超过系统设置的最大限制
实现
• 从Redis获取系统设置
• 比较上传文件列表大小与系统允许的最大分P数
• 超过则抛出业务异常

3. 视频ID存在性校验

if(!StringTools.isEmpty(videoInfoPost.getVideoId())){VideoInfoPost videoInfoPostDb = this.videoInfoPostMapper.selectByVideoId(videoInfoPost.getVideoId());if (videoInfoPostDb == null) {throw new BusinessException(ResponseCodeEnum.CODE_600);}if (ArrayUtils.contains(new Integer[]{VideoStatusEnum.STATUS0.getStatus(), VideoStatusEnum.STATUS2.getStatus()}, videoInfoPostDb.getStatus())) {throw new BusinessException(ResponseCodeEnum.CODE_600);}
}

功能:当videoId不为空时,检查视频是否存在及状态是否允许修改
逻辑

1. 查询数据库中是否存在该videoId对应的记录
2. 不存在则抛出异常
3. 检查视频状态是否为"审核中"或"待审核",是则不允许修改

4. 初始化变量

Date curDate = new Date();
String videoId = videoInfoPost.getVideoId();
List<VideoInfoFilePost> deleteFileList = new ArrayList<>();
List<VideoInfoFilePost> addFileList = uploadFileList;

变量说明
curDate:当前时间,用于设置创建/更新时间
videoId:视频ID
deleteFileList:待删除的文件列表
addFileList:待添加的文件列表(初始化为全部上传文件)

5. 新增视频逻辑

if (StringTools.isEmpty(videoId)) {videoId = StringTools.getRandomString(Constants.LENGTH_10);videoInfoPost.setVideoId(videoId);videoInfoPost.setCreateTime(curDate);videoInfoPost.setLastUpdateTime(curDate);videoInfoPost.setStatus(VideoStatusEnum.STATUS0.getStatus());this.videoInfoPostMapper.insert(videoInfoPost);
}

条件:videoId为空表示新增视频
操作

1. 生成随机videoId
2. 设置创建时间、更新时间
3. 设置初始状态为"待审核"
4. 插入数据库

6. 更新视频逻辑

else {// 查询数据库中的文件列表VideoInfoFilePostQuery fileQuery = new VideoInfoFilePostQuery();fileQuery.setVideoId(videoId);fileQuery.setUserId(videoInfoPost.getUserId());List<VideoInfoFilePost> dbInfoFileList = this.videoInfoFilePostMapper.selectList(fileQuery);// 将上传文件列表转为Map方便查询Map<String, VideoInfoFilePost> uploadFileMap = uploadFileList.stream().collect(Collectors.toMap(item -> item.getUploadId(), Function.identity(), (data1, data2) -> data2));Boolean updateFileName = false;// 比较数据库文件和上传文件for(VideoInfoFilePost fileInfo : dbInfoFileList){VideoInfoFilePost updateFile = uploadFileMap.get(fileInfo.getUploadId());if (updateFile == null) {deleteFileList.add(fileInfo);} else if (!updateFile.getFileName().equals(fileInfo.getFileName())) {updateFileName = true;}}// 筛选新增文件addFileList = uploadFileList.stream().filter(item->item.getFileId()==null).collect(Collectors.toList());// 更新视频信息videoInfoPost.setLastUpdateTime(curDate);Boolean changeVideoInfo = this.changeVideoInfo(videoInfoPost);// 设置视频状态if (addFileList != null && !addFileList.isEmpty()) {videoInfoPost.setStatus(VideoStatusEnum.STATUS0.getStatus());} else if (changeVideoInfo || updateFileName) {videoInfoPost.setStatus(VideoStatusEnum.STATUS2.getStatus());}this.videoInfoPostMapper.updateByVideoId(videoInfoPost, videoInfoPost.getVideoId());
}

核心逻辑

1. 查询数据库中该视频已有的文件列表
2. 比较数据库文件和上传文件:◦ 数据库有但上传没有 → 加入删除列表◦ 文件名被修改 → 标记为需要更新
3. 筛选出新增文件(fileId为null)
4. 根据情况设置视频状态:◦ 有新增文件 → 待审核◦ 视频信息或文件名被修改 → 待审核
5. 更新视频主信息

7. 处理待删除文件

if (!deleteFileList.isEmpty()) {List<String> delFileList = deleteFileList.stream().map(item->item.getFileId()).collect(Collectors.toList());this.videoInfoFilePostMapper.deleteBatchByFileId(delFileList, videoInfoPost.getUserId());List<String> delFilePathList = deleteFileList.stream().map(item->item.getFilePath()).collect(Collectors.toList());redisComponent.addFile2DelQueue(videoId, delFilePathList);
}

操作

1. 从数据库批量删除文件记录
2. 将要删除的文件路径加入Redis删除队列(异步删除实际文件)

8. 处理文件索引和新增文件

Integer index = 1;
for (VideoInfoFilePost videoInfoFile : uploadFileList) {videoInfoFile.setFileIndex(index++);videoInfoFile.setVideoId(videoId);videoInfoFile.setUserId(videoInfoPost.getUserId());if (videoInfoFile.getFileId() == null) {videoInfoFile.setFileId(StringTools.getRandomString(Constants.LENGTH_20));videoInfoFile.setUpdateType(VideoFileUpdateTypeEnum.UPDATE.getStatus());videoInfoFile.setTransferResult(VideoFileTransferResultEnum.TRANSFER.getStatus());}
}
this.videoInfoFilePostMapper.insertOrUpdateBatch(uploadFileList);

操作

1. 为每个文件设置索引(排序)
2. 设置视频ID和用户ID
3. 对新文件(fileId为null):◦ 生成随机fileId◦ 设置更新类型为"更新"◦ 设置传输结果为"待传输"
4. 批量插入或更新文件记录

9. 处理新增文件传输

if (addFileList != null && !addFileList.isEmpty()) {for (VideoInfoFilePost file : addFileList) {file.setUserId(videoInfoPost.getUserId());file.setVideoId(videoId);}redisComponent.addFile2TransferQueue(addFileList);
}

功能:将新增文件加入传输队列(可能是转码、转存等异步处理)

方法总结

saveVideoInfo 方法是一个复杂的视频信息保存方法,主要功能包括:

  1. 参数校验:检查分P数限制、视频状态是否允许修改
  2. 新增视频:生成ID、设置初始状态、插入数据库
  3. 更新视频
    • 比较新旧文件列表,识别新增、删除和修改的文件
    • 根据修改情况设置视频状态
    • 更新视频主信息
  4. 文件处理
    • 删除不再需要的文件记录和实际文件
    • 为新增文件生成ID并设置属性
    • 批量保存文件信息
    • 将新增文件加入处理队列

该方法通过精细的状态管理和文件比较,实现了视频信息的完整保存流程,同时考虑了事务一致性和异步处理的需求。


文章转载自:

http://UwQWpWoZ.hffjj.cn
http://7tiJ8u40.hffjj.cn
http://JIWKrYst.hffjj.cn
http://qivCusHk.hffjj.cn
http://bl2IMJMi.hffjj.cn
http://yIJ86eHb.hffjj.cn
http://gAkF56Bh.hffjj.cn
http://Qd80o3d7.hffjj.cn
http://ETCSREl1.hffjj.cn
http://fTA4732m.hffjj.cn
http://B80jg8sM.hffjj.cn
http://2n5g5RGK.hffjj.cn
http://4NsdU87g.hffjj.cn
http://IRmLpLeu.hffjj.cn
http://EOHDBB74.hffjj.cn
http://D8fLe00s.hffjj.cn
http://DQx4sSwG.hffjj.cn
http://oiDOihQN.hffjj.cn
http://EYE7bH1u.hffjj.cn
http://c7ARwF8g.hffjj.cn
http://ooL1ShMh.hffjj.cn
http://68lbSwD9.hffjj.cn
http://s0IrYlE4.hffjj.cn
http://tqXAHPs1.hffjj.cn
http://hia0WJbV.hffjj.cn
http://scH5KwWc.hffjj.cn
http://gc6eY9Ij.hffjj.cn
http://Q1BHOA8v.hffjj.cn
http://WQTtnbLt.hffjj.cn
http://lE5SSMMg.hffjj.cn
http://www.dtcms.com/wzjs/643905.html

相关文章:

  • 邯郸网站建设哪儿好小说网站开发技术实现
  • 网站被拔毛的原因成都双流兴城建设投资有限公司网站
  • 学网站开发多久杭州网站建设方案服务公司
  • 建网站的软件 优帮云江宁网站建设价格
  • 国内做视频的网站部门网站管理建设工作汇报
  • 免费的网站域名查询浏览器做漫画网站空间多大
  • 对招聘公司做评价的网站微信如何做微商城网站建设
  • 电子加工东莞网站建设dw软件主要做什么
  • 曲阜做网站哪家好12网站免费建站
  • 彩票网站怎么建设微信网站用什么制作的
  • 网站建设 盘网互联wordpress格子主题
  • vs2017手机网站开发附近最好的装修公司
  • 网站被泛解析高端制作网站公司
  • 设计网站都有什么作用是什么qq群排名优化软件
  • 网站流量数据分析怎么做部队网站模板jsp
  • 门户网站开发是什么mssql网站开发
  • 做五金国际网站哪个好seo岗位工资
  • 软件开发商网站萍乡网站建设哪家好
  • 常见网站安全漏洞农村做网站赚钱
  • 中国能建平台网页seo优化
  • 怎么免费做一个网站网页升级访问紧急通知
  • 网站内容建设评估网站建设源代码版权问题
  • asp商业网站源码网站服务器 重启
  • 营销型网站建设市场榆林市住房和城市建设局网站
  • 免费自建网站wordpress标题主题
  • 福州公司网站建设一定要用主流程序php语言做推广效果哪个网站好
  • 东莞网站建设外贸招标代理公司注册
  • 建设领域现场专业人员报名网站网站开发算软件开发吗
  • 网站建设视频教程 百度云中国建设网站培训通知
  • 做网站开发的过程摄影作品欣赏网站推荐