diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java index 7e7eac49d..27b318a9b 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java @@ -3,6 +3,8 @@ package org.dromara.app; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.wzj.soopin.content.domain.bo.*; import com.wzj.soopin.content.domain.vo.IndexVlogVO; +import com.wzj.soopin.content.enums.VlogStatusEnum; +import com.wzj.soopin.content.enums.YesOrNo; import com.wzj.soopin.content.service.IVlogPullService; import com.wzj.soopin.content.service.VlogService; import com.wzj.soopin.content.service.VlogUploadService; @@ -160,11 +162,11 @@ public class AppVlogController { @Operation(summary = "视频列表") @PostMapping("/page") public R> page(@RequestBody VlogBO vlogBO) { - LoginUser loginUser = LoginHelper.getLoginUser(); - if(vlogBO.getMemberId()==null){ throw new ServiceException("用户id不能为空"); } + vlogBO.setStatus(VlogStatusEnum.APPROVED.type); + vlogBO.setIsPrivate(YesOrNo.NO.type); return R.ok(vlogService.getIndexVlogList(vlogBO,vlogBO.getPage())); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java index 589e695f6..84656d6bb 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java @@ -3,7 +3,7 @@ package com.wzj.soopin.content.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.dromara.common.core.constant.BaseInfoProperties; +import com.wzj.soopin.content.domain.bo.AuditVlogBO; import com.wzj.soopin.content.domain.bo.VlogBO; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.enums.YesOrNo; @@ -13,19 +13,23 @@ import com.wzj.soopin.content.service.VlogService; import com.wzj.soopin.content.utils.RedisOperator; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.constant.BaseInfoProperties; import org.dromara.common.core.domain.R; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @Slf4j -@Tag(name = "短视频相关业务功能的接口") +@Tag(name = "短视频管理") @RequestMapping("/cms/vlog") @RestController @AllArgsConstructor +@Validated public class VlogController extends BaseInfoProperties { private final VlogService vlogService; public final RedisOperator redis; @@ -35,9 +39,10 @@ public class VlogController extends BaseInfoProperties { @Operation(summary = "查询列表") @PostMapping("/page") public R> page(@RequestBody VlogBO bo, @RequestBody Page page) { - Page pages = vlogService.getIndexVlogList(bo ,page); + Page pages = vlogService.getIndexVlogList(bo, page); return R.ok(pages); } + @PostMapping("/vodCallBack") public R vodCallBack(@RequestBody Map callbackData) { try { @@ -59,32 +64,32 @@ public class VlogController extends BaseInfoProperties { if ("FINISH".equals(status)) { // 获取 MediaProcessResultSet,可能包含任务流信息 List> mediaProcessResultSet = - (List>) procedureStateChangeEvent.get("MediaProcessResultSet"); + (List>) procedureStateChangeEvent.get("MediaProcessResultSet"); if (mediaProcessResultSet != null) { - String coverUrl=null; // 首帧图 - String transVdUrl=null; // 转码后的视频地址 + String coverUrl = null; // 首帧图 + String transVdUrl = null; // 转码后的视频地址 for (Map processResult : mediaProcessResultSet) { String type = (String) processResult.get("Type"); if ("CoverBySnapshot".equals(type)) { // 任务流:首帧截图 Map coverBySnapshotTask = - (Map) processResult.get("CoverBySnapshotTask"); + (Map) processResult.get("CoverBySnapshotTask"); Map output = (Map) coverBySnapshotTask.get("Output"); coverUrl = (String) output.get("CoverUrl"); // 正确获取 CoverUrl } - if("Transcode".equals(type)){ + if ("Transcode".equals(type)) { // 拿到output中的url Map TranscodeTask = - (Map) processResult.get("TranscodeTask"); + (Map) processResult.get("TranscodeTask"); Map output = (Map) TranscodeTask.get("Output"); transVdUrl = (String) output.get("Url"); } } - log.info("任务流 [截取首帧,视频转码] 完成, FileId: {}, 封面图 URL: {},视频地址: {}", fileId, coverUrl,transVdUrl); + log.info("任务流 [截取首帧,视频转码] 完成, FileId: {}, 封面图 URL: {},视频地址: {}", fileId, coverUrl, transVdUrl); // TODO: 更新数据库,存储首帧图,设置云端地址,删除minio视频文件 - vlogService.updateVlogFirstImg(fileId,coverUrl,transVdUrl); + vlogService.updateVlogFirstImg(fileId, coverUrl, transVdUrl); } else { log.warn("MediaProcessResultSet 为空,回调数据: {}", callbackData); @@ -95,7 +100,7 @@ public class VlogController extends BaseInfoProperties { log.warn("ProcedureStateChangeEvent 为空或格式错误,回调数据: {}", callbackData); } } - if("ReviewAudioVideoComplete".equals(eventType)){ + if ("ReviewAudioVideoComplete".equals(eventType)) { //处理审核结果 Map reviewEvent = (Map) callbackData.get("ReviewAudioVideoCompleteEvent"); if (reviewEvent != null) { @@ -120,20 +125,20 @@ public class VlogController extends BaseInfoProperties { String subLabel = (String) output.get("SubLabel"); // 违规子标签 log.info("视频文件 {} 审核驳回, 原因: {} - {}", fileId, label, subLabel); // TODO: 更新数据库,发送站内信 - vlogService.updateVlogStatus(fileId,2,label); + vlogService.updateVlogStatus(fileId, 2, label); } else if ("pass".equals(suggestion)) { // 审核通过,处理通过逻辑,修改视频状态为1,发送站内消息,告知审核结果 log.info("视频文件 {} 审核通过", fileId); // TODO: 更新数据库,发送站内信 - vlogService.updateVlogStatus(fileId,1,"通过"); + vlogService.updateVlogStatus(fileId, 1, "通过"); - } else if ("review".equals(suggestion)){ + } else if ("review".equals(suggestion)) { // 建议复审,修改状态为3,发送站内消息,告知审核结果 String label = (String) output.get("Label"); // 违规内容 String subLabel = (String) output.get("SubLabel"); // 违规子标签 log.info("视频文件 {} 建议复审, 原因: {} - {}", fileId, label, subLabel); // TODO: 更新数据库,发送站内信 - vlogService.updateVlogStatus(fileId,3,"等待复审"); + vlogService.updateVlogStatus(fileId, 3, "等待复审"); } } @@ -148,36 +153,24 @@ public class VlogController extends BaseInfoProperties { } - - - - @Operation(summary = "修改视频状态") @PostMapping("/changeVlogStatus") - public R changeVlogStatus(@RequestParam String userId, - @RequestParam String vlogId, - @RequestParam Integer status) { - vlogService.changeVlogStatus(userId, vlogId,status); + public R changeVlogStatus(@RequestBody @Valid AuditVlogBO bo) { + vlogService.changeVlogStatus(bo); return R.ok(); } @Operation(summary = "修改视频为私密") @PostMapping("/changeToPrivate") - public R changeToPrivate(@RequestParam String userId, - @RequestParam String vlogId) { - vlogService.changeToPrivateOrPublic(userId, - vlogId, - YesOrNo.YES.type); + public R changeToPrivate(@RequestParam String vlogId) { + vlogService.changeToPrivateOrPublic(vlogId, YesOrNo.YES.type); return R.ok(); } @Operation(summary = "修改视频为公开") @PostMapping("/changeToPublic") - public R changeToPublic(@RequestParam String userId, - @RequestParam String vlogId) { - vlogService.changeToPrivateOrPublic(userId, - vlogId, - YesOrNo.NO.type); + public R changeToPublic(@RequestParam String vlogId) { + vlogService.changeToPrivateOrPublic(vlogId, YesOrNo.NO.type); return R.ok(); } @@ -189,8 +182,8 @@ public class VlogController extends BaseInfoProperties { @Operation(summary = "推送视频") @GetMapping("/push") - public R pushMember(@RequestParam int count,@RequestParam String tag) { - return R.ok(vlogPushService.pushVlogToMq(count,tag)); + public R pushMember(@RequestParam int count, @RequestParam String tag) { + return R.ok(vlogPushService.pushVlogToMq(count, tag)); } @Operation(summary = "同步视频") diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/AuditVlogBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/AuditVlogBO.java new file mode 100644 index 000000000..c8ac83fb3 --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/AuditVlogBO.java @@ -0,0 +1,35 @@ +package com.wzj.soopin.content.domain.bo; + +import com.wzj.soopin.content.enums.VlogStatusEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 视频审核BO + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AuditVlogBO { + + @Schema(description = "视频id") + @NotBlank(message = "视频id不能为空") + private String vlogId; + + /** + * 状态 + * @see VlogStatusEnum#getType() + */ + @NotNull(message = "状态不能为空") + @Schema(description = "审核状态", implementation = VlogStatusEnum.class) + private Integer status; + + @Schema(description = "未通过原因") + private String reason; +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/VlogBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/VlogBO.java index 139ba548c..9e6ce172b 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/VlogBO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/VlogBO.java @@ -54,6 +54,9 @@ public class VlogBO extends BaseBO { @Schema(description = "视频标题(模糊查询)") private String titleQuery; + @Schema(description = "是否私密") + private Integer isPrivate; + @Schema(description = "视频状态(精确查询)") private Integer status; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Vlog.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Vlog.java index fe388af97..44c81dcda 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Vlog.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Vlog.java @@ -1,15 +1,16 @@ package com.wzj.soopin.content.domain.po; import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; +import lombok.*; import org.apache.ibatis.type.JdbcType; import org.dromara.common.core.domain.model.BaseAudit; @TableName(value = "cont_vlog", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) - +@Builder +@AllArgsConstructor +@NoArgsConstructor public class Vlog extends BaseAudit { @TableId private String id; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/VlogStatusEnum.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/VlogStatusEnum.java index 3d11b57bb..d78466db6 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/VlogStatusEnum.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/enums/VlogStatusEnum.java @@ -1,8 +1,10 @@ package com.wzj.soopin.content.enums; import lombok.AllArgsConstructor; +import lombok.Getter; @AllArgsConstructor +@Getter public enum VlogStatusEnum { AUDITING(0, "待审核"), APPROVED(1, "通过"), diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java index 41beff794..3943d5c9e 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java @@ -3,10 +3,12 @@ package com.wzj.soopin.content.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.wzj.soopin.content.domain.bo.*; +import com.wzj.soopin.content.domain.bo.AuditVlogBO; +import com.wzj.soopin.content.domain.bo.MyListBO; +import com.wzj.soopin.content.domain.bo.SearchBO; +import com.wzj.soopin.content.domain.bo.VlogBO; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.vo.IndexVlogVO; -import com.wzj.soopin.content.utils.PagedGridResult; import java.util.List; import java.util.Map; @@ -34,13 +36,9 @@ public interface VlogService extends IService { /** * 用户把视频改为公开/私密的视频 */ - public void changeToPrivateOrPublic(String userId, - String vlogId, - Integer yesOrNo); + public void changeToPrivateOrPublic(String vlogId, Integer yesOrNo); - public void changeVlogStatus(String userId, - String vlogId, - Integer status); + public void changeVlogStatus(AuditVlogBO auditVlogBO); /** * 查询用的公开/私密的视频列表 */ diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java index f1345e91d..b94c39d82 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java @@ -8,32 +8,36 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; - -import com.wzj.soopin.content.domain.bo.*; +import com.wzj.soopin.content.convert.VlogConvert; +import com.wzj.soopin.content.domain.bo.AuditVlogBO; +import com.wzj.soopin.content.domain.bo.MyListBO; +import com.wzj.soopin.content.domain.bo.SearchBO; +import com.wzj.soopin.content.domain.bo.VlogBO; import com.wzj.soopin.content.domain.po.MyLikedVlog; import com.wzj.soopin.content.domain.po.Vlog; -import com.wzj.soopin.content.enums.VlogStatusEnum; -import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.content.domain.vo.IndexVlogVO; +import com.wzj.soopin.content.enums.VlogStatusEnum; import com.wzj.soopin.content.enums.YesOrNo; import com.wzj.soopin.content.mapper.CommentMapper; import com.wzj.soopin.content.mapper.MyLikedVlogMapper; -import com.wzj.soopin.member.domain.vo.MemberVO; -import com.wzj.soopin.member.mapper.MemberMapper; import com.wzj.soopin.content.mapper.VlogMapper; import com.wzj.soopin.content.mapper.VlogMapperCustom; import com.wzj.soopin.content.service.MsgService; import com.wzj.soopin.content.service.VlogService; import com.wzj.soopin.content.utils.RedisOperator; import com.wzj.soopin.content.utils.Sid; +import com.wzj.soopin.member.domain.po.Member; +import com.wzj.soopin.member.domain.vo.MemberVO; +import com.wzj.soopin.member.mapper.MemberMapper; import com.wzj.soopin.member.service.IFansService; -import com.wzj.soopin.content.convert.VlogConvert; import com.wzj.soopin.member.service.IMemberService; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mq.config.RocketMQConfig; import org.dromara.common.mq.domain.MQMessage; import org.dromara.common.mq.enums.MQMessageType; @@ -46,16 +50,12 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.dromara.common.core.utils.MapstructUtils; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.*; import java.util.stream.Collectors; -import java.util.ArrayList; - -import lombok.extern.slf4j.Slf4j; import static org.dromara.common.core.constant.BaseInfoProperties.*; @@ -141,7 +141,7 @@ public class VlogServiceImpl extends ServiceImpl implements Vl vlog.setId(vid); vlog.setLikeCounts(0); vlog.setCommentsCounts(0); - vlog.setStatus(0); + vlog.setStatus(VlogStatusEnum.AUDITING.type); vlog.setIsPrivate(YesOrNo.NO.type); vlog.setMemberId(loginUser.getUserId()+""); @@ -213,25 +213,16 @@ public class VlogServiceImpl extends ServiceImpl implements Vl @Transactional(rollbackFor = Exception.class) @Override - @CacheEvict(value = GlobalConstants.VLOG_KEY, key = "#vlogId") - public void changeToPrivateOrPublic(String userId, String vlogId, Integer yesOrNo) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Vlog::getId, vlogId) - .eq(Vlog::getMemberId, userId) - .set(Vlog::getIsPrivate, yesOrNo); - vlogMapper.update(null, updateWrapper); + public void changeToPrivateOrPublic(String vlogId, Integer yesOrNo) { + vlogMapper.updateById(Vlog.builder().id(vlogId).isPrivate(yesOrNo).build()); } @Transactional(rollbackFor = Exception.class) @Override - @CacheEvict(value = GlobalConstants.VLOG_KEY, key = "#vlogId") - public void changeVlogStatus(String userId, String vlogId, Integer status) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Vlog::getId, vlogId) - .eq(Vlog::getMemberId, userId) - .set(Vlog::getStatus, status); - vlogMapper.update(null, updateWrapper); + @CacheEvict(value = GlobalConstants.VLOG_KEY, key = "#bo.vlogId") + public void changeVlogStatus(AuditVlogBO bo) { + vlogMapper.updateById(Vlog.builder().id(bo.getVlogId()).status(bo.getStatus()).reason(bo.getReason()).build()); } @Override diff --git a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapperCustom.xml b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapperCustom.xml index 7febc888c..2d4d3b02e 100644 --- a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapperCustom.xml +++ b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapperCustom.xml @@ -3,57 +3,51 @@