LiveControllerApi.java 7.75 KB
package com.cnlive.shenhe.api;

import com.alibaba.fastjson.JSONObject;
import com.cnlive.shenhe.entity.ShyLive;
import com.cnlive.shenhe.service.LiveService;
import com.cnlive.shenhe.utils.CommonConst;
import com.cnlive.shenhe.utils.CommonConstStates;
import com.cnlive.shenhe.utils.CommonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;
import java.util.List;


/**
 * @author Administrator
 */
@SuppressWarnings("unused")
@Controller
@RequestMapping("/api/live")
public class LiveControllerApi {
    private static Logger logger = LoggerFactory.getLogger(LiveControllerApi.class);

    @Autowired
    LiveService liveService;

    @PostMapping("/import")
    @ResponseBody
    public JSONObject impotLive(String param) {
        JSONObject map = new JSONObject();
        JSONObject result = new JSONObject();
        //初始化一个请求数据库返回结果
        boolean yorN;
        logger.info("直播入库,param=====" + param);
        JSONObject json = JSONObject.parseObject(param);
        //获取所有参数
        //直播活动id
        String activityId = json.getString("activityId");
        //直播活动状态
        Integer activityStatus = json.getInteger("activityStatus");
        //直播频道id
        String channelId = json.getString("channelId");
        //开始时间
        String startTime = json.getString("startTime");
        Date timestampStart = CommonUtils.getStartAndEndTime(startTime);
        //结束时间
        String endTime = json.getString("endTime");
        Date timestampEnd = CommonUtils.getStartAndEndTime(endTime);
        //预计开始时间
        String preStartTime = json.getString("preStartTime");
        Date preTimestampStart = CommonUtils.getStartAndEndTime(preStartTime);
        //预计结束时间
        String preEndTime = json.getString("preEndTime");
        Date preTimestampEnd = CommonUtils.getStartAndEndTime(preEndTime);
        ShyLive shyLive = new ShyLive();
        //得到直播活动id去查询是否已有
        shyLive.setActivity_id(activityId);
        //查询一下 存在,更新 没有,插入
        List<ShyLive> shyLiveList = liveService.findShyLive(shyLive);
        if (shyLiveList.size() > 0) {
            //更新
            ShyLive shyLive1 = shyLiveList.get(0);
            yorN = saveOrUpdateLive(shyLive1, json, activityStatus, preTimestampStart, preTimestampEnd, timestampStart, timestampEnd);
        } else {
            //  插入
            //设置直播频道
            shyLive.setChannel_id(channelId);
            //状态 0:未认领 1.已领未审,2:已审
            shyLive.setShenhe_state(CommonConst.RECEIVE_BEFORE);
            //创建时间
            shyLive.setCreated_at(CommonUtils.getCurrentTime());
            yorN = saveOrUpdateLive(shyLive, json, activityStatus, preTimestampStart, preTimestampEnd, timestampStart, timestampEnd);
        }
        if (yorN) {
            result.put("errorCode", "0");
            result.put("errorMessage", "直播审核请求收到成功");
            map.put("statusCode", "200");
        } else {
            result.put("errorCode", "-1");
            result.put("errorMessage", "直播审核入库失败");
            map.put("statusCode", "300");
        }
        map.put("result", result);
        return map;
    }

    /**
     * 保存和更新 直播
     *
     * @param shyLive
     * @param json
     * @param activityStatus
     * @param preTimestampStart
     * @param preTimestampEnd
     * @param timestampStart
     * @param timestampEnd
     * @return
     */
    private boolean saveOrUpdateLive(ShyLive shyLive, JSONObject json, Integer activityStatus, Date preTimestampStart, Date preTimestampEnd, Date timestampStart, Date timestampEnd) {
        //封装数据入库
        //设置spid
        shyLive.setSp_id(json.getInteger("spId"));
        //设置直播活动名称
        shyLive.setActivity_name(json.getString("activityName"));
        //设置直播活动状态
        shyLive.setActivity_status(activityStatus);
        shyLive.setPre_start_time(preTimestampStart);
        shyLive.setPre_end_time(preTimestampEnd);
        //是否是热点: 1:不是 ,2: 是
        shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANYES);
        //直播活动状态,1:直播中,2:直播完成,3:待直播,0:直播撤销(手动),4:直播下线(强制)
        //发布直播
        if (activityStatus.equals(CommonConstStates.ZHIBO_DENGDAI)) {
            shyLive.setActivity_start_time(null);
            shyLive.setActivity_end_time(null);
            //启动直播
        } else if (activityStatus.equals(CommonConstStates.ZHIBO_ZHENGZAI)) {
            shyLive.setActivity_start_time(timestampStart);
            shyLive.setActivity_end_time(null);
            //停止直播
        } else if (activityStatus.equals(CommonConstStates.ZHIBO_JIESHU)) {
            shyLive.setActivity_start_time(timestampStart);
            shyLive.setActivity_end_time(timestampEnd);
            //回放地址
            shyLive.setPlayback_url(json.getString("playbackUrl"));
            //状态 0:未认领 1.已领未审,2:已审
            shyLive.setShenhe_state(CommonConst.RECEIVE_AUDIT);
            //直播完成后自动通过
            shyLive.setUpdater("自动通过");
            //是否是热点: 1:不是 ,2: 是
            shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
            //审核强制下线
        } else if (activityStatus.equals(CommonConstStates.ZHIBO_XIAXIAN)) {
            shyLive.setActivity_start_time(timestampStart);
            shyLive.setActivity_end_time(timestampEnd);
            //回放地址
            shyLive.setPlayback_url(json.getString("playbackUrl"));
            if (shyLive.getId() == null) {
                //状态 0:未认领 1.已领未审,2:已审
                shyLive.setShenhe_state(CommonConst.RECEIVE_AUDIT);
            } else {
                //领取状态改为未领
                shyLive.setShenhe_state(CommonConst.RECEIVE_BEFORE);
            }
            //是否是热点: 1:不是 ,2: 是
            shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
        }
        //直播活动简介
        shyLive.setActivity_intro(json.getString("activityIntro"));
        shyLive.setLive_type(json.getString("liveType"));
        //m3u8直播流
        shyLive.setM3u8_url(json.getString("hlsUrl"));
        //rtmp直播流
        shyLive.setRtmp_url(json.getString("mp4Url"));
        //回调地址
        shyLive.setCallback(json.getString("callback"));
        //封面
        shyLive.setCover_img_url(json.getString("coverImgUrl"));
        //审核类型,1:免审,2:机审,3:人工审
        shyLive.setShenhe_type(CommonConst.AUDIT_TYPE_USER);
        //抽帧状态 1:不抽帧 2:待抽帧 3:抽帧中 4:抽帧完成 5:抽帧失败
        shyLive.setAvsample_state(1);
        //直播撤销
        if (activityStatus.equals(CommonConstStates.ZHIBO_CHEXIAO)) {
            //是否显示 0:不显示 1:显示
            shyLive.setIs_show(CommonConstStates.SHIFOU_XIANSHINO);
            //是否是热点: 1:不是 ,2: 是
            shyLive.setIs_hot(CommonConstStates.SHIFOU_REDIANNO);
        } else {
            shyLive.setIs_show(CommonConstStates.SHIFOU_XIANSHIYES);
        }
        //更新时间
        shyLive.setUpdated_at(CommonUtils.getCurrentTime());
        if (shyLive.getId() == null) {
            return liveService.impotVideo(shyLive);
        } else {
            return liveService.updateShyLive(shyLive);
        }
    }
}