LiveMonitorRoomServiceImpl.java 9.94 KB
package com.wondertek.service.impl;
import java.time.LocalDateTime;
import java.util.*;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.CrpDataVo;
import com.wondertek.dto.LMRoomDto;
import com.wondertek.dto.LMRoomParam;
import com.wondertek.entity.LiveMonitorRoom;
import com.wondertek.entity.StreamTask;
import com.wondertek.mapper.LiveMonitorRoomMapper;
import com.wondertek.service.LiveMonitorRoomService;
import com.wondertek.service.StreamTaskService;
import com.wondertek.util.HttpClientUtils;
import com.wondertek.util.JSONUtils;
import com.wondertek.util.PageBean;
import com.wondertek.util.ResultBean;
import com.wondertek.vo.LMRoomListVo;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@Slf4j
@Service
public class LiveMonitorRoomServiceImpl extends ServiceImpl<LiveMonitorRoomMapper, LiveMonitorRoom> implements LiveMonitorRoomService {

    @Resource
    private LiveMonitorRoomMapper liveMonitorRoomMapper;

    @Resource
    private StreamTaskService monitorMarkService;


    @Value("${transcode.getTaskDetail}")
    private String getTaskDetail;

    @Override
    public PageBean queryPage(LMRoomDto lmRoomDto) {
        Page<LMRoomListVo> page = new Page<>(lmRoomDto.getPage(), lmRoomDto.getSize());
        IPage<LMRoomListVo> resultPage = liveMonitorRoomMapper.findPageList(page, lmRoomDto);
        return new PageBean(Integer.parseInt(String.valueOf(resultPage.getPages())),resultPage.getTotal(),resultPage.getRecords());
    }

    @Override
    public PageBean editPage(LMRoomDto lmRoomDto) {
        return null;
    }


    @Override
    public ResultBean create(LMRoomParam lmRoomParam) {


        //审片间信息
        LiveMonitorRoom liveMonitorRoom = new LiveMonitorRoom();
        liveMonitorRoom.setName(lmRoomParam.getName());
        liveMonitorRoom.setRoomStatus("0");
        liveMonitorRoom.setCreatedBy("");
        liveMonitorRoom.setCreatedTime(LocalDateTime.now());
        liveMonitorRoom.setLiveName(lmRoomParam.getLiveName());
        boolean b = saveOrUpdate(liveMonitorRoom);
        Long roomId = liveMonitorRoom.getId();


        List<CrpDataVo> dataList = lmRoomParam.getDataList();

        //初始化子任务信息
        if(!CollectionUtils.isEmpty(dataList)){
            List<StreamTask> taskList = dataList.stream().map(crpDataVo -> {
                StreamTask streamTask = new StreamTask();
                streamTask.setTaskId(crpDataVo.getTaskId());
                streamTask.setChannelId(crpDataVo.getChannelId());
                streamTask.setRoomId(roomId);
                streamTask.setTaskType(crpDataVo.getTaskType());
                streamTask.setCreatedBy("");
                streamTask.setCreatedTime(LocalDateTime.now());
                return streamTask;
            }).toList();
            monitorMarkService.saveOrUpdateBatch(taskList);
        }

        return ResultBean.ok("创建成功");
    }

    @Override
    public ResultBean update(LMRoomParam lmRoomParam) {

        Long id = lmRoomParam.getId();

        LiveMonitorRoom monitorRoom = getById(id);

        if(monitorRoom == null){
            return ResultBean.error("房间不存在");
        }

        monitorRoom.setName(lmRoomParam.getName());
        monitorRoom.setLiveName(lmRoomParam.getLiveName());
        saveOrUpdate(monitorRoom);

        List<CrpDataVo> dataList = lmRoomParam.getDataList();

        //更新子任务信息
        if(!CollectionUtils.isEmpty(dataList)){
            dataList.forEach(crpDataVo -> {
                Long sId = crpDataVo.getId();
                StreamTask streamTask = monitorMarkService.getById(sId);
                streamTask.setTaskId(crpDataVo.getTaskId());
                streamTask.setChannelId(crpDataVo.getChannelId());
                streamTask.setTaskType(crpDataVo.getTaskType());
                streamTask.setCreatedBy("");
                streamTask.setCreatedTime(LocalDateTime.now());
                monitorMarkService.updateById(streamTask);
            });
        }

        return ResultBean.ok("修改成功");
    }

    @Override
    public ResultBean updateStatus(Long id, String status) {

        LiveMonitorRoom monitorRoom = getById(id);

        if(monitorRoom == null){
            return ResultBean.error("房间不存在");
        }

        String brocStatus = monitorRoom.getBrocStatus();

        if("0".equals(brocStatus)){
            return ResultBean.error("播控中房间不能禁用");
        }
        monitorRoom.setRoomStatus(status);
        monitorRoom.setUpdatedTime(LocalDateTime.now());
        saveOrUpdate(monitorRoom);

        log.info(JSON.toJSONString(ResultBean.ok("修改成功")));
        return ResultBean.ok("修改成功");
    }

    @Override
    public ResultBean delete(Long id) {
        LiveMonitorRoom monitorRoom = getById(id);

        if(monitorRoom == null){
            return ResultBean.error("房间不存在");
        }

        String roomStatus = monitorRoom.getRoomStatus();

        if("0".equals(roomStatus)){
            return ResultBean.error("启用的房间不能删除");
        }
        monitorRoom.setDel("1");
        monitorRoom.setUpdatedTime(LocalDateTime.now());
        saveOrUpdate(monitorRoom);

        return ResultBean.ok("删除成功");
    }


    @Override
    public ResultBean taskDetail(Long id) {


        LiveMonitorRoom monitorRoom = getById(id);

        if(monitorRoom == null){
            return ResultBean.error("房间不存在");
        }

        Map<String, Object> result = JSON.parseObject(JSON.toJSONString(monitorRoom), new TypeReference<Map<String, Object>>() {
        });


        List<Map<String, Object>> streamTaskMapList = new ArrayList<>();


        List<StreamTask> taskList = monitorMarkService.list(new QueryWrapper<StreamTask>().eq("room_id", id));

        if(!CollectionUtils.isEmpty(taskList)){
            for (StreamTask streamTask : taskList) {
                String taskId = streamTask.getTaskId();
                String outputDirCheck = streamTask.getOutputDir();

                Map<String, Object> streamTaskMap = JSON.parseObject(JSON.toJSONString(streamTask), new TypeReference<Map<String, Object>>() {
                });

                String reqUrl = getTaskDetail+"?taskId="+taskId;
                String res = HttpClientUtils.executeByGET(reqUrl);

//                Map<Object,Object> output = new HashMap<>();
                List<Map<String, Object>> outputDirList= new ArrayList<>();

                if(StringUtils.isNotBlank(res)){
                    Map<String, Object> resMap = JSON.parseObject(res, new TypeReference<Map<String, Object>>() {
                    });
                    Object returnMessage = resMap.get("returnMessage");
                    Object resultCode = resMap.get("resultCode");

                    if(Objects.equals("0",resultCode) && Objects.equals("成功",returnMessage)){

                        if(resMap.get("taskInfo")!=null){
                            Map<String, Object> taskInfo = (Map<String, Object>) resMap.get("taskInfo");
                            if(taskInfo.get("taskList")!=null){
                                List<Map<String, Object>> tasks = (List<Map<String, Object>>) taskInfo.get("taskList");

                                for (Map<String, Object> item : tasks) {
                                    //输出地址
                                    Object outGroupNo = item.get("outGroupNo");

                                    if(item.get("outPutList")!=null){
                                        List<Map<String, Object>> outPutList = (List<Map<String, Object>>) item.get("outPutList");
                                        for (Map<String, Object> opmap : outPutList) {
                                            Object outputDir = opmap.get("outputDir");
                                            Map<String, Object> outputDirMap = new HashMap<>();
                                            outputDirMap.put("outputDir", outputDir);
                                            outputDirMap.put("checked", false);
                                            outputDirMap.put("outGroupNo", outGroupNo);

                                            if(outputDir.equals(outputDirCheck)){
                                                outputDirMap.put("checked", true);
                                            }
                                            outputDirList.add(outputDirMap);
                                        }
                                    }

//                                    output.put(outGroupNo,outputDirList);
                                }
                            }
                        }
                    }
                }

                streamTaskMap.put("output",outputDirList);

                streamTaskMapList.add(streamTaskMap);
            }

        }

        result.put("taskList",streamTaskMapList);

        return ResultBean.ok(result);
    }


    @Override
    public ResultBean getLMRoomDetail(Long id) {
        LiveMonitorRoom monitorRoom = getById(id);
        if(monitorRoom == null){
            return ResultBean.error("房间不存在");
        }
        Map<String, Object> result = JSON.parseObject(JSON.toJSONString(monitorRoom), new TypeReference<Map<String, Object>>() {
        });
        List<StreamTask> taskList = monitorMarkService.list(new QueryWrapper<StreamTask>().eq("room_id", id));
        result.put("taskList",taskList);
        return ResultBean.ok(result);
    }

    public static void main(String[] args) {
        System.out.println(ResultBean.ok("result"));
    }
}