xiangpei
2025-05-22 0d9214d780c5093165f566f3e6f0c60f5d8aead7
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -1,20 +1,24 @@
package cn.lili.modules.lmk.service.impl;
import cn.lili.common.security.context.UserContext;
import cn.lili.modules.lmk.domain.entity.LmkFile;
import cn.lili.modules.lmk.domain.entity.VideoAuditRecord;
import cn.lili.modules.lmk.domain.entity.VideoTag;
import cn.lili.modules.lmk.domain.entity.VideoTagRef;
import cn.lili.modules.lmk.domain.form.VideoAuditingForm;
import cn.lili.modules.lmk.domain.form.VideoDownForm;
import cn.lili.modules.lmk.domain.form.VideoRecommendForm;
import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
import cn.lili.modules.lmk.domain.vo.SimpleVideoTagVO;
import cn.lili.modules.lmk.enums.general.TagCreateTypeEnum;
import cn.lili.modules.lmk.enums.general.VideoStatusEnum;
import cn.lili.modules.lmk.service.LmkFileService;
import cn.lili.modules.lmk.service.VideoTagRefService;
import cn.lili.modules.lmk.service.VideoTagService;
import cn.lili.modules.lmk.service.*;
import cn.lili.utils.COSUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import cn.lili.modules.lmk.domain.entity.Video;
import cn.lili.modules.lmk.mapper.VideoMapper;
import cn.lili.modules.lmk.service.VideoService;
import cn.lili.base.Result;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.lili.modules.lmk.domain.form.VideoForm;
import cn.lili.modules.lmk.domain.vo.VideoVO;
@@ -27,8 +31,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -45,6 +48,8 @@
    private final VideoTagService videoTagService;
    private final VideoTagRefService videoTagRefService;
    private final LmkFileService lmkFileService;
    private final VideoAuditRecordService videoAuditRecordService;
    private final COSUtil cosUtil;
    /**
     * 添加
@@ -114,9 +119,12 @@
     * @return
     */
    @Override
    public Result detail(Integer id) {
    public Result detail(String id) {
        VideoVO vo = baseMapper.getById(id);
        Assert.notNull(vo, "记录不存在");
        List<SimpleVideoTagVO> tags = videoTagRefService.getTagsByVideoIds(Arrays.asList(id));
        vo.setTagList(tags);
        vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
        return Result.ok().data(vo);
    }
@@ -168,4 +176,80 @@
        lmkFileService.addByForm(form.getFileInfo());
        return Result.ok("发布成功,视频审核中~");
    }
    @Override
    public Result managerPage(ManagerVideoQuery query) {
        IPage<VideoVO> page = PageUtil.getPage(query, VideoVO.class);
        // 1. 先查出视频信息
        baseMapper.managerPage(page, query);
        // 2. 单独查出标签信息
        if (page.getTotal() > 0) {
            Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(
                    page.getRecords().stream().map(VideoVO::getId).collect(Collectors.toList())
            ).stream().collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));;
            // 3. 获取视频临时访问地址、设置视频标签
            page.getRecords().forEach(v -> {
                v.setTagList(tagMap.get(v.getId()));
//                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
            });
        }
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
    @Override
    public Result recommendSet(VideoRecommendForm form) {
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(Video::getId, form.getId())
                .set(Video::getRecommend, form.getRecommend())
                .update();
        return Result.ok("设置成功");
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result auditing(VideoAuditingForm form) {
        Video video = baseMapper.selectById(form.getId());
        if (Objects.isNull(video)) {
            throw new RuntimeException("视频不存在");
        }
        // 1. 添加审核记录
        VideoAuditRecord auditRecord = new VideoAuditRecord();
        auditRecord.setVideoId(form.getId());
        auditRecord.setAuditSuccess(form.getResult());
        if (!form.getResult()) {
            auditRecord.setEditSuggestion(form.getReason());
        }
        videoAuditRecordService.save(auditRecord);
        // 2. 修改视频状态
        if (form.getResult()) {
            video.setStatus(VideoStatusEnum.PUBLISHED.getValue());
            video.setAuditPassTime(new Date());
        } else {
            video.setStatus(VideoStatusEnum.REJECT.getValue());
        }
        baseMapper.updateById(video);
        return Result.ok();
    }
    @Override
    public Result up(String id) {
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(Video::getId, id)
                .set(Video::getStatus, VideoStatusEnum.PUBLISHED.getValue())
                .update();
        return Result.ok("上架成功");
    }
    @Override
    public Result down(VideoDownForm form) {
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(Video::getId, form.getId())
                .set(Video::getStatus, VideoStatusEnum.DISABLE.getValue())
                .update();
        // TODO 将下架原因以通知的方式告知用户
        return Result.ok("下架成功");
    }
}