RoomOperationServiceImpl.java 3.51 KB
package com.wondertek.service.impl;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.type.TypeReference;
import com.wondertek.dto.DelayParam;
import com.wondertek.entity.LiveMonitorRoom;
import com.wondertek.entity.StreamTask;
import com.wondertek.mapper.LiveMonitorRoomMapper;
import com.wondertek.mapper.StreamTaskMapper;
import com.wondertek.service.RoomOperationSerivice;
import com.wondertek.util.JSONUtils;
import com.wondertek.util.ResponseData;
import com.wondertek.util.ResultBean;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description:
 * @Author W5669
 * @Create 2025/7/22
 * @Version 1.0
 */
@Service
@Slf4j
public class RoomOperationServiceImpl implements RoomOperationSerivice {
    @Resource
    private LiveMonitorRoomMapper liveMonitorRoomMapper;
    @Resource
    private StreamTaskMapper streamTaskMapper;
    @Value("${transcode.delayTimeUrl}")
    private String delayTimeUrl;

    @Override
    public ResultBean setDelayTime(DelayParam delayParam) {
        log.info("-->【云审片平台】审片间延时设置,delayParam:{}",delayParam);
        LiveMonitorRoom liveMonitorRoom = liveMonitorRoomMapper.selectById(delayParam.getRoomId());
        LambdaQueryWrapper<StreamTask> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(StreamTask::getRoomId,delayParam.getRoomId());
        List<StreamTask> streamTasks = streamTaskMapper.selectList(wrapper);
        //1.依次取出延时1、延时2、播出任务,设置转码平台相应的延时时间
        streamTasks.forEach(streamTask -> {
            if (streamTask.getPlayType().equals("delay1")){
                delayTask(streamTask.getTaskId(),delayParam.getDelayFirst());
                //更新任务
                streamTask.setDelayTime(delayParam.getDelayFirst());
                streamTaskMapper.updateById(streamTask);
            }
        });

        //2.更新多画

        return ResultBean.ok("设置成功");
    }

    public void delayTask(String taskId,int delayTime){
        Map<String, Object> paramsMap = new HashMap<>();
        paramsMap.put("taskId", taskId);
        paramsMap.put("delayTime", delayTime);
        HttpResponse execute = null;
        try {
            execute = HttpRequest.post(delayTimeUrl)
                    .header("Content-Type", "application/json")
                    .body(JSONUtils.obj2json(paramsMap)).timeout(30000).execute();
            if (execute.isOk()) {
                log.info("-->请求转码系统延时接口,url:{},paramsMap:{}",delayTimeUrl,paramsMap);
                String body = execute.body();
                ResponseData response = JSONUtils.jsonToObject(body, new TypeReference<ResponseData>() {
                });
                if (response.getResultCode().equals("0")) {
                    log.info("请求转码系统延时接口成功");
                }else {
                    log.info("请求转码系统延时接口响应失败,response:{}",response);
                }
            } else {
                log.error("请求转码系统延时接口失败,url:{},body:{}", delayTimeUrl, execute.body());
            }
        } catch (Exception e) {
            log.error("请求转码系统延时接口失败,url:{}", delayTimeUrl, e);
        }
    }
}