VodDictServiceImpl.java 6.19 KB
package com.subsidy.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.common.configure.VODConfig;
import com.subsidy.common.exception.HttpException;
import com.subsidy.dto.content.GetContendVodsDTO;
import com.subsidy.dto.vod.ChangeOrdersDTO;
import com.subsidy.mapper.VodDictMapper;
import com.subsidy.model.VodDictDO;
import com.subsidy.service.VodDictService;
import com.subsidy.util.ConstantUtils;
import com.subsidy.util.Signature;
import com.subsidy.vo.vod.GetContendVodsVO;
import com.subsidy.vo.vod.SignatureVO;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.vod.v20180717.VodClient;
import com.tencentcloudapi.vod.v20180717.models.DeleteMediaRequest;
import com.tencentcloudapi.vod.v20180717.models.MediaProcessTaskInput;
import com.tencentcloudapi.vod.v20180717.models.ProcessMediaRequest;
import com.tencentcloudapi.vod.v20180717.models.TranscodeTaskInput;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Random;

/**
 * <p>
 * 视频表 服务实现类
 * </p>
 *
 * @author DengMin
 * @since 2021-10-11
 */
@Service
public class VodDictServiceImpl extends ServiceImpl<VodDictMapper, VodDictDO> implements VodDictService {

    @Autowired
    private VODConfig vodConfig;

    @Value("${spring.profiles.active}")
    private String env;

    public SignatureVO signature() {
        SignatureVO signatureVO = new SignatureVO();

        Signature signature = new Signature();
        signature.setSecretId(vodConfig.getSecretId());
        signature.setSecretKey(vodConfig.getSecretKey());
        signature.setCurrentTime(System.currentTimeMillis());
        signature.setRandom(new Random().nextInt(Integer.MAX_VALUE));
        signature.setSignValidDuration(3600 * 24 * 2);
        signature.setClassId(vodConfig.getClassId());
        String sign = "";
        try {
            sign = signature.getUploadSignature();
            signatureVO.setSign(sign);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return signatureVO;
    }

    public List<GetContendVodsVO> getContendVods(GetContendVodsDTO getContendVodsDTO) {
        //Page pager = new Page(getContendVodsDTO.getPageNum(), getContendVodsDTO.getPageSize());
        return this.baseMapper.getContendVods( getContendVodsDTO.getVodName(), getContendVodsDTO.getContentId());
    }

    public String deleteVod(VodDictDO vodDictDO) {
        VodDictDO vodDictDO1 = this.baseMapper.selectById(vodDictDO.getId());
        this.baseMapper.deleteById(vodDictDO.getId());
        try {

            //删除原视频
            Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey());

            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("vod.tencentcloudapi.com");

            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);

            VodClient client = new VodClient(cred, "", clientProfile);

            // 实例化一个请求对象,每个接口都会对应一个request对象
            DeleteMediaRequest req = new DeleteMediaRequest();
            req.setFileId(vodDictDO1.getVodCode());
            // 返回的resp是一个DeleteMediaResponse的实例,与请求对象对应
            client.DeleteMedia(req);
        } catch (TencentCloudSDKException e) {
        }

        return ConstantUtils.DELETE_SUCCESS;
    }

    public String addVod(VodDictDO vodDictDO) {

        //排序
        int orderNo = 1;

        List<VodDictDO> vodDictDOS = this.baseMapper.selectList(new QueryWrapper<VodDictDO>()
        .lambda()
        .eq(VodDictDO::getContentId,vodDictDO.getContentId())
        .orderByDesc(VodDictDO::getOrderNo));

        if (vodDictDOS.size()>0){
            VodDictDO vodDictDO1 = vodDictDOS.get(0);
            if (null!=vodDictDO1){
                orderNo = vodDictDOS.get(0).getOrderNo()+1;
            }
        }
        vodDictDO.setOrderNo(orderNo);
        this.baseMapper.insert(vodDictDO);

        //测试环境就不转码了
        if (env.equals("prod")){
            //上传后直接转码
            Credential cred = new Credential(vodConfig.getSecretId(), vodConfig.getSecretKey());

            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("vod.tencentcloudapi.com");

            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);

            VodClient client = new VodClient(cred, "", clientProfile);

            ProcessMediaRequest processMediaRequest = new ProcessMediaRequest();
            MediaProcessTaskInput mediaProcessTaskInput1 = new MediaProcessTaskInput();
            TranscodeTaskInput[] transcodeTaskInputs1 = new TranscodeTaskInput[1];
            TranscodeTaskInput transcodeTaskInput1 = new TranscodeTaskInput();
            transcodeTaskInput1.setDefinition(ConstantUtils.TEMPLATE_VOD);
            transcodeTaskInputs1[0] = transcodeTaskInput1;
            mediaProcessTaskInput1.setTranscodeTaskSet(transcodeTaskInputs1);
            processMediaRequest.setMediaProcessTask(mediaProcessTaskInput1);
            processMediaRequest.setFileId(vodDictDO.getVodCode());

            try {
                client.ProcessMedia(processMediaRequest);
            } catch (Exception ex) {
                throw new HttpException(50001);
            }
        }
        return ConstantUtils.ADD_SUCCESS;
    }

    public String updateVod(VodDictDO vodDictDO) {
        this.baseMapper.updateById(vodDictDO);
        return ConstantUtils.SET_SUCCESS;
    }

    public String changeOrders(ChangeOrdersDTO changeOrdersDTO){

        int i = 1 ;
        List<Long> longs = changeOrdersDTO.getVodIds();
        for (Long lg : longs){
            this.baseMapper.updateVodOrderNo(lg,i++);
        }
        return ConstantUtils.SET_SUCCESS;
    }

}