package org.dromara.app; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; import com.wzj.soopin.content.domain.bo.*; import com.wzj.soopin.content.domain.po.MyLikedVlog; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.service.IVlogPullService; import com.wzj.soopin.content.service.VlogService; import com.wzj.soopin.content.service.VlogUploadService; import com.wzj.soopin.content.utils.PagedGridResult; import com.wzj.soopin.content.utils.QcCloud; import com.wzj.soopin.content.utils.RedisOperator; import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.mq.domain.MQMessage; import org.dromara.common.mq.enums.MQMessageType; import org.dromara.common.mq.enums.MessageActionEnum; import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.redis.redis.RedisCache; import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.wzj.soopin.content.domain.base.BaseInfoProperties.*; @Slf4j @Api(tags = "VlogController 短视频相关业务功能的接口") @RequestMapping("/app/vlog") @RestController @AllArgsConstructor public class AppVlogController { private final VlogService vlogService; private final QcCloud qcCloud; private final VlogUploadService vlogUploadService; public final RedisCache cache; private final IVlogPullService pullService; @Tag(name = "首页视频列表") @PostMapping("/indexList") public R> indexList(@RequestBody IndexListBO bo, @RequestBody Page page) { Page pages = pullService.page(page); return R.ok(pages); } @GetMapping("/detail/{vlogId}") public R detail(@PathVariable String vlogId) { return R.ok(vlogService.getVlogDetailById(vlogId)); } @Tag(name = "我的私密视频列表") @PostMapping("/myPrivateList") public R> myPrivateList(@RequestBody MyListBO bo, @RequestBody Page page) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } bo.setUserId(String.valueOf(loginUser.getUserId())); Page pages = vlogService.queryMyVlogList(bo, page); return R.ok(pages); } @Tag(name = "我点赞的视频列表") @PostMapping("/myLikedList") public R> myLikedList(@RequestBody MyLikedVlogBO bo, @RequestBody Page page) { Page pages = vlogService.getMyLikedVlogList(page); return R.ok(pages); } @Tag(name = "我关注的人的视频列表") @PostMapping("/followList") public R> followList(@RequestBody SimpleListBO bo, @RequestBody Page page) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } bo.setMyId(String.valueOf(loginUser.getUserId())); Page pages = vlogService.getMyFollowVlogList(page); return R.ok(pages); } @Tag(name = "好友视频列表") @PostMapping("/friendList") public R> friendList(@RequestBody SimpleListBO bo, @RequestBody Page page) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } bo.setMyId(String.valueOf(loginUser.getUserId())); Page pages = vlogService.getMyFriendVlogList(page); return R.ok(pages); } @PostMapping("publish") public R publish(@RequestBody VlogBO vlogBO) throws Exception { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } vlogBO.setVlogerId(String.valueOf(loginUser.getUserId())); String url = vlogBO.getUrl(); log.info("未审核视频地址:" + url); String fileName = url.substring(url.lastIndexOf("/") + 1); log.info("视频文件名称:" + fileName); log.info("开始上传腾讯云点播:" + fileName); String fileId = qcCloud.uploadViaTempFile(fileName); log.info("视频发布ID:" + fileId); vlogBO.setFileId(fileId); // 删除minio文件 // MinIOUtils.removeFile(minIOConfig.getBucketName(),fileName); // log.info("删除minio文件:"+fileName); // FIXME 校验VlogBO vlogService.createVlog(vlogBO); return R.ok(); } @Tag(name = "我的公开视频列表") @PostMapping("/myPublicList") public R> myPublicList(@RequestBody MyListBO bo, @RequestBody Page page) { Page pages = vlogService.queryMyVlogList(bo, page); return R.ok(pages); } @PostMapping("/like") public R like(@RequestBody VlogBO vlogBO) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } String userId = String.valueOf(loginUser.getUserId()); String vlogId = vlogBO.getId(); vlogService.userLikeVlog(userId,vlogId ); return R.ok(); } @PostMapping("/unlike") public R unlike(@RequestBody VlogBO vlogBO) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } String userId = String.valueOf(loginUser.getUserId()); String vlogId = vlogBO.getId(); vlogService.userUnLikeVlog(userId, vlogId); return R.ok(); } @GetMapping("/read") public R read(@RequestBody VlogBO vlogBO) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } vlogService.readVlog(loginUser.getUserId(), vlogBO.getId()); return R.ok(); } @Tag(name = "手动触发缓存点赞最多视频") @PostMapping("/cacheTopLikedVlogs") public R cacheTopLikedVlogs(@RequestParam(defaultValue = "100") int limit) { try { // vlogService.cacheTopLikedVlogs(limit); return R.ok(); } catch (Exception e) { log.error("手动触发缓存点赞最多视频失败", e); return R.fail("缓存失败: " + e.getMessage()); } } }