feat(content): 新增视频审核功能并优化状态管理
- 新增 AuditVlogBO 类用于视频审核请求参数 - 在 VlogController 中增加视频审核状态变更接口 - 修改 VlogService 接口与实现类,支持通过 BO 对象更新审核状态-为 Vlog 实体类添加 Lombok 注解以简化构建 - 调整视频列表查询逻辑,支持按是否私密和状态筛选 - 更新 VlogMapperCustom.xml 查询条件动态 SQL 结构- 设置默认视频状态为“待审核” - 移除冗余的用户 ID 参数校验,改用 BO 校验方式 - 引入枚举 VlogStatusEnum 的 Getter 方法便于获取状态值
This commit is contained in:
parent
eeab201625
commit
4c1e123214
@ -3,6 +3,8 @@ package org.dromara.app;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.wzj.soopin.content.domain.bo.*;
|
import com.wzj.soopin.content.domain.bo.*;
|
||||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
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.IVlogPullService;
|
||||||
import com.wzj.soopin.content.service.VlogService;
|
import com.wzj.soopin.content.service.VlogService;
|
||||||
import com.wzj.soopin.content.service.VlogUploadService;
|
import com.wzj.soopin.content.service.VlogUploadService;
|
||||||
@ -160,11 +162,11 @@ public class AppVlogController {
|
|||||||
@Operation(summary = "视频列表")
|
@Operation(summary = "视频列表")
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
public R<Page<IndexVlogVO>> page(@RequestBody VlogBO vlogBO) {
|
public R<Page<IndexVlogVO>> page(@RequestBody VlogBO vlogBO) {
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
|
||||||
|
|
||||||
if(vlogBO.getMemberId()==null){
|
if(vlogBO.getMemberId()==null){
|
||||||
throw new ServiceException("用户id不能为空");
|
throw new ServiceException("用户id不能为空");
|
||||||
}
|
}
|
||||||
|
vlogBO.setStatus(VlogStatusEnum.APPROVED.type);
|
||||||
|
vlogBO.setIsPrivate(YesOrNo.NO.type);
|
||||||
return R.ok(vlogService.getIndexVlogList(vlogBO,vlogBO.getPage()));
|
return R.ok(vlogService.getIndexVlogList(vlogBO,vlogBO.getPage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ package com.wzj.soopin.content.controller;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.bo.VlogBO;
|
||||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||||
import com.wzj.soopin.content.enums.YesOrNo;
|
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 com.wzj.soopin.content.utils.RedisOperator;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.common.core.constant.BaseInfoProperties;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Tag(name = "短视频相关业务功能的接口")
|
@Tag(name = "短视频管理")
|
||||||
@RequestMapping("/cms/vlog")
|
@RequestMapping("/cms/vlog")
|
||||||
@RestController
|
@RestController
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@Validated
|
||||||
public class VlogController extends BaseInfoProperties {
|
public class VlogController extends BaseInfoProperties {
|
||||||
private final VlogService vlogService;
|
private final VlogService vlogService;
|
||||||
public final RedisOperator redis;
|
public final RedisOperator redis;
|
||||||
@ -35,9 +39,10 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
@Operation(summary = "查询列表")
|
@Operation(summary = "查询列表")
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
public R<IPage<IndexVlogVO>> page(@RequestBody VlogBO bo, @RequestBody Page page) {
|
public R<IPage<IndexVlogVO>> page(@RequestBody VlogBO bo, @RequestBody Page page) {
|
||||||
Page<IndexVlogVO> pages = vlogService.getIndexVlogList(bo ,page);
|
Page<IndexVlogVO> pages = vlogService.getIndexVlogList(bo, page);
|
||||||
return R.ok(pages);
|
return R.ok(pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/vodCallBack")
|
@PostMapping("/vodCallBack")
|
||||||
public R<Void> vodCallBack(@RequestBody Map<String, Object> callbackData) {
|
public R<Void> vodCallBack(@RequestBody Map<String, Object> callbackData) {
|
||||||
try {
|
try {
|
||||||
@ -62,8 +67,8 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
(List<Map<String, Object>>) procedureStateChangeEvent.get("MediaProcessResultSet");
|
(List<Map<String, Object>>) procedureStateChangeEvent.get("MediaProcessResultSet");
|
||||||
|
|
||||||
if (mediaProcessResultSet != null) {
|
if (mediaProcessResultSet != null) {
|
||||||
String coverUrl=null; // 首帧图
|
String coverUrl = null; // 首帧图
|
||||||
String transVdUrl=null; // 转码后的视频地址
|
String transVdUrl = null; // 转码后的视频地址
|
||||||
for (Map<String, Object> processResult : mediaProcessResultSet) {
|
for (Map<String, Object> processResult : mediaProcessResultSet) {
|
||||||
String type = (String) processResult.get("Type");
|
String type = (String) processResult.get("Type");
|
||||||
if ("CoverBySnapshot".equals(type)) {
|
if ("CoverBySnapshot".equals(type)) {
|
||||||
@ -74,7 +79,7 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
coverUrl = (String) output.get("CoverUrl"); // 正确获取 CoverUrl
|
coverUrl = (String) output.get("CoverUrl"); // 正确获取 CoverUrl
|
||||||
|
|
||||||
}
|
}
|
||||||
if("Transcode".equals(type)){
|
if ("Transcode".equals(type)) {
|
||||||
// 拿到output中的url
|
// 拿到output中的url
|
||||||
Map<String, Object> TranscodeTask =
|
Map<String, Object> TranscodeTask =
|
||||||
(Map<String, Object>) processResult.get("TranscodeTask");
|
(Map<String, Object>) processResult.get("TranscodeTask");
|
||||||
@ -82,9 +87,9 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
transVdUrl = (String) output.get("Url");
|
transVdUrl = (String) output.get("Url");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info("任务流 [截取首帧,视频转码] 完成, FileId: {}, 封面图 URL: {},视频地址: {}", fileId, coverUrl,transVdUrl);
|
log.info("任务流 [截取首帧,视频转码] 完成, FileId: {}, 封面图 URL: {},视频地址: {}", fileId, coverUrl, transVdUrl);
|
||||||
// TODO: 更新数据库,存储首帧图,设置云端地址,删除minio视频文件
|
// TODO: 更新数据库,存储首帧图,设置云端地址,删除minio视频文件
|
||||||
vlogService.updateVlogFirstImg(fileId,coverUrl,transVdUrl);
|
vlogService.updateVlogFirstImg(fileId, coverUrl, transVdUrl);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
log.warn("MediaProcessResultSet 为空,回调数据: {}", callbackData);
|
log.warn("MediaProcessResultSet 为空,回调数据: {}", callbackData);
|
||||||
@ -95,7 +100,7 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
log.warn("ProcedureStateChangeEvent 为空或格式错误,回调数据: {}", callbackData);
|
log.warn("ProcedureStateChangeEvent 为空或格式错误,回调数据: {}", callbackData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if("ReviewAudioVideoComplete".equals(eventType)){
|
if ("ReviewAudioVideoComplete".equals(eventType)) {
|
||||||
//处理审核结果
|
//处理审核结果
|
||||||
Map<String, Object> reviewEvent = (Map<String, Object>) callbackData.get("ReviewAudioVideoCompleteEvent");
|
Map<String, Object> reviewEvent = (Map<String, Object>) callbackData.get("ReviewAudioVideoCompleteEvent");
|
||||||
if (reviewEvent != null) {
|
if (reviewEvent != null) {
|
||||||
@ -120,20 +125,20 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
String subLabel = (String) output.get("SubLabel"); // 违规子标签
|
String subLabel = (String) output.get("SubLabel"); // 违规子标签
|
||||||
log.info("视频文件 {} 审核驳回, 原因: {} - {}", fileId, label, subLabel);
|
log.info("视频文件 {} 审核驳回, 原因: {} - {}", fileId, label, subLabel);
|
||||||
// TODO: 更新数据库,发送站内信
|
// TODO: 更新数据库,发送站内信
|
||||||
vlogService.updateVlogStatus(fileId,2,label);
|
vlogService.updateVlogStatus(fileId, 2, label);
|
||||||
} else if ("pass".equals(suggestion)) {
|
} else if ("pass".equals(suggestion)) {
|
||||||
// 审核通过,处理通过逻辑,修改视频状态为1,发送站内消息,告知审核结果
|
// 审核通过,处理通过逻辑,修改视频状态为1,发送站内消息,告知审核结果
|
||||||
log.info("视频文件 {} 审核通过", fileId);
|
log.info("视频文件 {} 审核通过", fileId);
|
||||||
// TODO: 更新数据库,发送站内信
|
// TODO: 更新数据库,发送站内信
|
||||||
vlogService.updateVlogStatus(fileId,1,"通过");
|
vlogService.updateVlogStatus(fileId, 1, "通过");
|
||||||
|
|
||||||
} else if ("review".equals(suggestion)){
|
} else if ("review".equals(suggestion)) {
|
||||||
// 建议复审,修改状态为3,发送站内消息,告知审核结果
|
// 建议复审,修改状态为3,发送站内消息,告知审核结果
|
||||||
String label = (String) output.get("Label"); // 违规内容
|
String label = (String) output.get("Label"); // 违规内容
|
||||||
String subLabel = (String) output.get("SubLabel"); // 违规子标签
|
String subLabel = (String) output.get("SubLabel"); // 违规子标签
|
||||||
log.info("视频文件 {} 建议复审, 原因: {} - {}", fileId, label, subLabel);
|
log.info("视频文件 {} 建议复审, 原因: {} - {}", fileId, label, subLabel);
|
||||||
// TODO: 更新数据库,发送站内信
|
// TODO: 更新数据库,发送站内信
|
||||||
vlogService.updateVlogStatus(fileId,3,"等待复审");
|
vlogService.updateVlogStatus(fileId, 3, "等待复审");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,36 +153,24 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Operation(summary = "修改视频状态")
|
@Operation(summary = "修改视频状态")
|
||||||
@PostMapping("/changeVlogStatus")
|
@PostMapping("/changeVlogStatus")
|
||||||
public R<Void> changeVlogStatus(@RequestParam String userId,
|
public R<Void> changeVlogStatus(@RequestBody @Valid AuditVlogBO bo) {
|
||||||
@RequestParam String vlogId,
|
vlogService.changeVlogStatus(bo);
|
||||||
@RequestParam Integer status) {
|
|
||||||
vlogService.changeVlogStatus(userId, vlogId,status);
|
|
||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "修改视频为私密")
|
@Operation(summary = "修改视频为私密")
|
||||||
@PostMapping("/changeToPrivate")
|
@PostMapping("/changeToPrivate")
|
||||||
public R<Void> changeToPrivate(@RequestParam String userId,
|
public R<Void> changeToPrivate(@RequestParam String vlogId) {
|
||||||
@RequestParam String vlogId) {
|
vlogService.changeToPrivateOrPublic(vlogId, YesOrNo.YES.type);
|
||||||
vlogService.changeToPrivateOrPublic(userId,
|
|
||||||
vlogId,
|
|
||||||
YesOrNo.YES.type);
|
|
||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "修改视频为公开")
|
@Operation(summary = "修改视频为公开")
|
||||||
@PostMapping("/changeToPublic")
|
@PostMapping("/changeToPublic")
|
||||||
public R<Void> changeToPublic(@RequestParam String userId,
|
public R<Void> changeToPublic(@RequestParam String vlogId) {
|
||||||
@RequestParam String vlogId) {
|
vlogService.changeToPrivateOrPublic(vlogId, YesOrNo.NO.type);
|
||||||
vlogService.changeToPrivateOrPublic(userId,
|
|
||||||
vlogId,
|
|
||||||
YesOrNo.NO.type);
|
|
||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,8 +182,8 @@ public class VlogController extends BaseInfoProperties {
|
|||||||
|
|
||||||
@Operation(summary = "推送视频")
|
@Operation(summary = "推送视频")
|
||||||
@GetMapping("/push")
|
@GetMapping("/push")
|
||||||
public R pushMember(@RequestParam int count,@RequestParam String tag) {
|
public R pushMember(@RequestParam int count, @RequestParam String tag) {
|
||||||
return R.ok(vlogPushService.pushVlogToMq(count,tag));
|
return R.ok(vlogPushService.pushVlogToMq(count, tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "同步视频")
|
@Operation(summary = "同步视频")
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -54,6 +54,9 @@ public class VlogBO extends BaseBO {
|
|||||||
@Schema(description = "视频标题(模糊查询)")
|
@Schema(description = "视频标题(模糊查询)")
|
||||||
private String titleQuery;
|
private String titleQuery;
|
||||||
|
|
||||||
|
@Schema(description = "是否私密")
|
||||||
|
private Integer isPrivate;
|
||||||
|
|
||||||
@Schema(description = "视频状态(精确查询)")
|
@Schema(description = "视频状态(精确查询)")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
package com.wzj.soopin.content.domain.po;
|
package com.wzj.soopin.content.domain.po;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import lombok.Data;
|
import lombok.*;
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import org.apache.ibatis.type.JdbcType;
|
import org.apache.ibatis.type.JdbcType;
|
||||||
import org.dromara.common.core.domain.model.BaseAudit;
|
import org.dromara.common.core.domain.model.BaseAudit;
|
||||||
|
|
||||||
@TableName(value = "cont_vlog", autoResultMap = true)
|
@TableName(value = "cont_vlog", autoResultMap = true)
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
public class Vlog extends BaseAudit {
|
public class Vlog extends BaseAudit {
|
||||||
@TableId
|
@TableId
|
||||||
private String id;
|
private String id;
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package com.wzj.soopin.content.enums;
|
package com.wzj.soopin.content.enums;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
public enum VlogStatusEnum {
|
public enum VlogStatusEnum {
|
||||||
AUDITING(0, "待审核"),
|
AUDITING(0, "待审核"),
|
||||||
APPROVED(1, "通过"),
|
APPROVED(1, "通过"),
|
||||||
|
@ -3,10 +3,12 @@ package com.wzj.soopin.content.service;
|
|||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
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.po.Vlog;
|
||||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||||
import com.wzj.soopin.content.utils.PagedGridResult;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -34,13 +36,9 @@ public interface VlogService extends IService<Vlog> {
|
|||||||
/**
|
/**
|
||||||
* 用户把视频改为公开/私密的视频
|
* 用户把视频改为公开/私密的视频
|
||||||
*/
|
*/
|
||||||
public void changeToPrivateOrPublic(String userId,
|
public void changeToPrivateOrPublic(String vlogId, Integer yesOrNo);
|
||||||
String vlogId,
|
|
||||||
Integer yesOrNo);
|
|
||||||
|
|
||||||
public void changeVlogStatus(String userId,
|
public void changeVlogStatus(AuditVlogBO auditVlogBO);
|
||||||
String vlogId,
|
|
||||||
Integer status);
|
|
||||||
/**
|
/**
|
||||||
* 查询用的公开/私密的视频列表
|
* 查询用的公开/私密的视频列表
|
||||||
*/
|
*/
|
||||||
|
@ -8,32 +8,36 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.wzj.soopin.content.convert.VlogConvert;
|
||||||
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.MyLikedVlog;
|
import com.wzj.soopin.content.domain.po.MyLikedVlog;
|
||||||
import com.wzj.soopin.content.domain.po.Vlog;
|
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.domain.vo.IndexVlogVO;
|
||||||
|
import com.wzj.soopin.content.enums.VlogStatusEnum;
|
||||||
import com.wzj.soopin.content.enums.YesOrNo;
|
import com.wzj.soopin.content.enums.YesOrNo;
|
||||||
import com.wzj.soopin.content.mapper.CommentMapper;
|
import com.wzj.soopin.content.mapper.CommentMapper;
|
||||||
import com.wzj.soopin.content.mapper.MyLikedVlogMapper;
|
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.VlogMapper;
|
||||||
import com.wzj.soopin.content.mapper.VlogMapperCustom;
|
import com.wzj.soopin.content.mapper.VlogMapperCustom;
|
||||||
import com.wzj.soopin.content.service.MsgService;
|
import com.wzj.soopin.content.service.MsgService;
|
||||||
import com.wzj.soopin.content.service.VlogService;
|
import com.wzj.soopin.content.service.VlogService;
|
||||||
import com.wzj.soopin.content.utils.RedisOperator;
|
import com.wzj.soopin.content.utils.RedisOperator;
|
||||||
import com.wzj.soopin.content.utils.Sid;
|
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.member.service.IFansService;
|
||||||
import com.wzj.soopin.content.convert.VlogConvert;
|
|
||||||
import com.wzj.soopin.member.service.IMemberService;
|
import com.wzj.soopin.member.service.IMemberService;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.dromara.common.core.constant.GlobalConstants;
|
import org.dromara.common.core.constant.GlobalConstants;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
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.config.RocketMQConfig;
|
||||||
import org.dromara.common.mq.domain.MQMessage;
|
import org.dromara.common.mq.domain.MQMessage;
|
||||||
import org.dromara.common.mq.enums.MQMessageType;
|
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.cache.annotation.Cacheable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
import static org.dromara.common.core.constant.BaseInfoProperties.*;
|
import static org.dromara.common.core.constant.BaseInfoProperties.*;
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
vlog.setId(vid);
|
vlog.setId(vid);
|
||||||
vlog.setLikeCounts(0);
|
vlog.setLikeCounts(0);
|
||||||
vlog.setCommentsCounts(0);
|
vlog.setCommentsCounts(0);
|
||||||
vlog.setStatus(0);
|
vlog.setStatus(VlogStatusEnum.AUDITING.type);
|
||||||
vlog.setIsPrivate(YesOrNo.NO.type);
|
vlog.setIsPrivate(YesOrNo.NO.type);
|
||||||
|
|
||||||
vlog.setMemberId(loginUser.getUserId()+"");
|
vlog.setMemberId(loginUser.getUserId()+"");
|
||||||
@ -213,25 +213,16 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
|
|
||||||
@CacheEvict(value = GlobalConstants.VLOG_KEY, key = "#vlogId")
|
@CacheEvict(value = GlobalConstants.VLOG_KEY, key = "#vlogId")
|
||||||
public void changeToPrivateOrPublic(String userId, String vlogId, Integer yesOrNo) {
|
public void changeToPrivateOrPublic(String vlogId, Integer yesOrNo) {
|
||||||
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
vlogMapper.updateById(Vlog.builder().id(vlogId).isPrivate(yesOrNo).build());
|
||||||
updateWrapper.eq(Vlog::getId, vlogId)
|
|
||||||
.eq(Vlog::getMemberId, userId)
|
|
||||||
.set(Vlog::getIsPrivate, yesOrNo);
|
|
||||||
vlogMapper.update(null, updateWrapper);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Override
|
@Override
|
||||||
@CacheEvict(value = GlobalConstants.VLOG_KEY, key = "#vlogId")
|
@CacheEvict(value = GlobalConstants.VLOG_KEY, key = "#bo.vlogId")
|
||||||
public void changeVlogStatus(String userId, String vlogId, Integer status) {
|
public void changeVlogStatus(AuditVlogBO bo) {
|
||||||
LambdaUpdateWrapper<Vlog> updateWrapper = new LambdaUpdateWrapper<>();
|
vlogMapper.updateById(Vlog.builder().id(bo.getVlogId()).status(bo.getStatus()).reason(bo.getReason()).build());
|
||||||
updateWrapper.eq(Vlog::getId, vlogId)
|
|
||||||
.eq(Vlog::getMemberId, userId)
|
|
||||||
.set(Vlog::getStatus, status);
|
|
||||||
vlogMapper.update(null, updateWrapper);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,8 +3,7 @@
|
|||||||
<mapper namespace="com.wzj.soopin.content.mapper.VlogMapperCustom" >
|
<mapper namespace="com.wzj.soopin.content.mapper.VlogMapperCustom" >
|
||||||
|
|
||||||
<select id="getIndexVlogList" parameterType="map" resultType="com.wzj.soopin.content.domain.vo.IndexVlogVO">
|
<select id="getIndexVlogList" parameterType="map" resultType="com.wzj.soopin.content.domain.vo.IndexVlogVO">
|
||||||
SELECT
|
SELECT v.id,
|
||||||
v.id,
|
|
||||||
v.member_id,
|
v.member_id,
|
||||||
m.avatar,
|
m.avatar,
|
||||||
m.nickname,
|
m.nickname,
|
||||||
@ -24,23 +23,18 @@
|
|||||||
v.file_id as fileId,
|
v.file_id as fileId,
|
||||||
v.status as status,
|
v.status as status,
|
||||||
v.first_frame_img as firstFrameImg
|
v.first_frame_img as firstFrameImg
|
||||||
FROM
|
FROM cont_vlog v
|
||||||
cont_vlog v
|
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
ums_member m
|
ums_member m
|
||||||
ON
|
ON
|
||||||
v.member_id = m.id
|
v.member_id = m.id
|
||||||
WHERE
|
WHERE v.first_frame_img IS NOT NULL
|
||||||
v.is_private = 0
|
<if test="bo.isPrivate != null">
|
||||||
<choose>
|
AND v.is_private = #{bo.isPrivate}
|
||||||
<when test="bo.status != null and bo.status!=''">
|
</if>
|
||||||
|
<if test="bo.status != null">
|
||||||
AND v.status = #{bo.status}
|
AND v.status = #{bo.status}
|
||||||
</when>
|
</if>
|
||||||
<otherwise>
|
|
||||||
AND v.status = 1
|
|
||||||
</otherwise>
|
|
||||||
</choose>
|
|
||||||
AND v.first_frame_img IS NOT NULL
|
|
||||||
<if test="bo.cityCode != null and bo.cityCode != ''">
|
<if test="bo.cityCode != null and bo.cityCode != ''">
|
||||||
AND v.city_code = #{bo.cityCode}
|
AND v.city_code = #{bo.cityCode}
|
||||||
</if>
|
</if>
|
||||||
@ -50,10 +44,10 @@
|
|||||||
<if test="bo.title != null and bo.title != ''">
|
<if test="bo.title != null and bo.title != ''">
|
||||||
AND v.title like '%${bo.title}%'
|
AND v.title like '%${bo.title}%'
|
||||||
</if>
|
</if>
|
||||||
<if test="bo.startTime != null ">
|
<if test="bo.startTime != null">
|
||||||
AND v.create_time >= #{bo.startTime}
|
AND v.create_time >= #{bo.startTime}
|
||||||
</if>
|
</if>
|
||||||
<if test="bo.endTime != null ">
|
<if test="bo.endTime != null">
|
||||||
AND #{bo.endTime} >= v.create_time
|
AND #{bo.endTime} >= v.create_time
|
||||||
</if>
|
</if>
|
||||||
<if test="bo.mobile != null and bo.mobile != ''">
|
<if test="bo.mobile != null and bo.mobile != ''">
|
||||||
@ -77,8 +71,7 @@
|
|||||||
#{vlogId}
|
#{vlogId}
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
ORDER BY
|
ORDER BY v.create_time
|
||||||
v.create_time
|
|
||||||
DESC
|
DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user