BackupMaterialServiceImpl.java 6.02 KB
package com.wondertek.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wondertek.dto.BackupChangeDto;
import com.wondertek.dto.BackupMaterialDto;
import com.wondertek.dto.BackupUploadVo;
import com.wondertek.entity.BackupConfig;
import com.wondertek.entity.BackupMaterial;
import com.wondertek.entity.StreamTask;
import com.wondertek.exception.BusinessException;
import com.wondertek.mapper.BackupConfigMapper;
import com.wondertek.mapper.BackupMaterialMapper;
import com.wondertek.service.BackupMaterialService;
import com.wondertek.service.FileService;
import com.wondertek.util.FileUtils;
import com.wondertek.util.PageBean;
import com.wondertek.util.ResultBean;
import com.wondertek.util.UUIDUtil;
import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class BackupMaterialServiceImpl extends ServiceImpl<BackupMaterialMapper, BackupMaterial> implements BackupMaterialService {

    @Resource
    private BackupMaterialMapper backupMaterialMapper;
    @Resource
    private FileService fileService;
    @Value("${file.realPath}")
    private String realPath;
    @Resource
    private BackupConfigMapper backupConfigMapper;


    @Override
    public PageBean queryPage(BackupMaterialDto backupMaterialDto) {
        Integer page = backupMaterialDto.getPage();
        Integer size = backupMaterialDto.getSize();



        LambdaQueryWrapper<BackupMaterial> queryWrapper = new LambdaQueryWrapper<>();

        if(StringUtils.isNotBlank(backupMaterialDto.getBackupName())){
            queryWrapper.like(BackupMaterial::getBackupName,backupMaterialDto.getBackupName());
        }


        Page<BackupMaterial> pageInfo = new Page<>(page, size);


        IPage<BackupMaterial> resultPage = backupMaterialMapper.selectPage(pageInfo, queryWrapper);
        return new PageBean(Integer.parseInt(String.valueOf(resultPage.getPages())),resultPage.getTotal(),resultPage.getRecords());
    }

    @Override
    public ResultBean upload(MultipartFile backupFile, BackupUploadVo backupUploadVo) {
        //上传文件
        if(!"mp4".equalsIgnoreCase(backupUploadVo.getFileType())){
            throw new BusinessException("仅支持上传mp4格式的垫片文件!");
        }

        String fileId = UUIDUtil.randomUUID();
        String fileName = backupUploadVo.getBackupName() + "." + backupUploadVo.getFileType();
        ///home/wondertek/material_file_assets/dianpian/2025/07/24/roomid/
        String filedir = FileUtils.generateDianPianDir(backupUploadVo.getRoomId().toString(), realPath);
        String destFilePath = filedir + fileName;//文件上传目录
        try {
            fileService.upload(backupFile, destFilePath);
        } catch (Exception e) {
            return ResultBean.error("上传文件异常");
        }

        //保存垫片素材表
        BackupMaterial backupMaterial = new BackupMaterial();
        backupMaterial.setFileId(fileId);
        backupMaterial.setBackupName(backupUploadVo.getBackupName());
        String relativePath = destFilePath.replace(realPath, "");
        backupMaterial.setFilePath(relativePath);
        backupMaterial.setFileType(backupUploadVo.getFileType());
        backupMaterial.setCreatedTime(LocalDateTime.now());
        backupMaterial.setCreatedBy("admin");
        backupMaterialMapper.insert(backupMaterial);
        //添加审片间垫片配置
        LambdaQueryWrapper<BackupConfig> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(BackupConfig::getRoomId,backupUploadVo.getRoomId());
        wrapper.eq(BackupConfig::getBackupOrder,backupUploadVo.getBackupOrder());
        BackupConfig backupConfig = backupConfigMapper.selectOne(wrapper);
        if(ObjectUtil.isNull(backupConfig)){
            backupConfig = new BackupConfig();
        }
        backupConfig.setRoomId(backupUploadVo.getRoomId());
        backupConfig.setBackupId(backupMaterial.getId());
        backupConfig.setBackupOrder(backupUploadVo.getBackupOrder());
        backupConfigMapper.insertOrUpdate(backupConfig);

        //对应垫片任务切源(转码平台演示环境已挂载统一存储)
        LambdaQueryWrapper<StreamTask> wrapper1 = new LambdaQueryWrapper<>();
        wrapper1.eq(StreamTask::getRoomId,backupUploadVo.getRoomId());
        wrapper1.eq(StreamTask::getPlayType,"play");




        //判断是否需要修改当前播出流的垫片

        return ResultBean.ok("上传成功");
    }

    @Override
    public ResultBean getByRoom(Long roomId) {
        LambdaQueryWrapper<BackupConfig> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(BackupConfig::getRoomId,roomId);
        List<BackupConfig> backupConfigs = backupConfigMapper.selectList(wrapper);
        return ResultBean.ok(backupConfigs);
    }

    @Override
    public ResultBean change(BackupChangeDto backupChangeDto) {
        LambdaQueryWrapper<BackupConfig> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(BackupConfig::getRoomId,backupChangeDto.getRoomId());
        List<BackupConfig> backupConfigs = backupConfigMapper.selectList(wrapper);
        if(CollectionUtil.isNotEmpty(backupConfigs)){
            backupConfigs.forEach(backupConfig -> {
                if(backupConfig.getBackupId().equals(backupChangeDto.getBackupId())){
                    backupConfig.setBackupStatus("1");
                    //将播放流的垫片配置切到此垫片上
                }else {
                    backupConfig.setBackupStatus("0");
                }
                backupConfigMapper.updateById(backupConfig);
            });

        }
        return ResultBean.ok();
    }

}