feat(content): 新增视频审核功能并优化状态管理

- 新增 AuditVlogBO 类用于视频审核请求参数
- 在 VlogController 中增加视频审核状态变更接口
- 修改 VlogService 接口与实现类,支持通过 BO 对象更新审核状态-为 Vlog 实体类添加 Lombok 注解以简化构建
- 调整视频列表查询逻辑,支持按是否私密和状态筛选
- 更新 VlogMapperCustom.xml 查询条件动态 SQL 结构- 设置默认视频状态为“待审核”
- 移除冗余的用户 ID 参数校验,改用 BO 校验方式
- 引入枚举 VlogStatusEnum 的 Getter 方法便于获取状态值
This commit is contained in:
huk 2025-09-29 16:10:49 +08:00
parent eeab201625
commit 4c1e123214
9 changed files with 141 additions and 123 deletions

View File

@ -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()));
} }

View File

@ -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 = "同步视频")

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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, "通过"),

View File

@ -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);
/** /**
* 查询用的公开/私密的视频列表 * 查询用的公开/私密的视频列表
*/ */

View File

@ -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

View File

@ -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>