package com.qxueyou.scc.stucontroller;
|
|
import java.util.*;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.qxueyou.scc.sdk.MTCloud;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import com.qxueyou.scc.admin.classes.model.ClsClass;
|
import com.qxueyou.scc.admin.classes.service.IClassService;
|
import com.qxueyou.scc.base.model.Result;
|
import com.qxueyou.scc.base.util.ClientUtils;
|
import com.qxueyou.scc.base.util.CollectionUtils;
|
import com.qxueyou.scc.base.util.QBeanUtils;
|
import com.qxueyou.scc.teach.live.dao.MediaLiveDAO;
|
import com.qxueyou.scc.teach.live.model.MediaVideoLive;
|
import com.qxueyou.scc.teach.live.service.IMediaLiveService;
|
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
|
@Api(tags="直播接口-学员端")
|
@RestController
|
@CrossOrigin
|
@RequestMapping(value = "/stu/live")
|
public class StuLiveController {
|
|
@Autowired
|
IClassService classService;
|
|
@Autowired
|
IMediaLiveService liveService;
|
|
@Autowired
|
MediaLiveDAO dao;
|
|
private final static short[] PUBLIC_LIVE_STATUS = new short[] {
|
MediaVideoLive.STATUS_LIVE_LIVE,MediaVideoLive.STATUS_LIVE_PAUSE,
|
MediaVideoLive.STATUS_LIVE_STOP,MediaVideoLive.STATUS_LIVE_REVIEW
|
};
|
|
/**
|
* 获取直播列表
|
* @param classId 班级id
|
* @return
|
*/
|
@ApiOperation(value = "获取直播列表", notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
|
@ApiImplicitParam(name = "status", value = "直播状态(2正在直播,5直播中的暂停状态,9停止直播,3回放)", required = true, paramType="query", dataType = "String"),
|
})
|
@GetMapping(value = "list")
|
public Result list(String classId, Short status) {
|
short[] _status = null;
|
if(status == null || status == 0) {
|
_status = PUBLIC_LIVE_STATUS;
|
}else {
|
_status = new short[]{status};
|
}
|
|
List<String> liveIds = getLiveIdLst(StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId);
|
|
List<MediaVideoLive> lives = liveService.readByStatus(liveIds,_status);
|
|
List<Map<String,Object>> lst =QBeanUtils.listBean2ListMap(lives, CollectionUtils.newStringMap(
|
"creator","creator",
|
"startTime","startTime",
|
"endTime","endTime",
|
"updateTime","lastUpdateTime",
|
"videoLiveId","videoLiveId",
|
"name","name",
|
"status","status",
|
"hlsPullUrl","hlsPullUrl",
|
"previewImgUrl","imgPath"
|
));
|
|
//添加聊天室id
|
if(lst!=null && lst.size()>0){
|
for(Map<String,Object> map:lst) {
|
map.put("chatroomId", dao.getChatRoomId((String)map.get("videoLiveId")));
|
}
|
}
|
|
return new Result(true, "success", CollectionUtils.newObjectMap("liveCount", lst==null?0:lst.size(), "liveLst",lst));
|
}
|
|
/**
|
* 获取直播id
|
* @param classId
|
* @return
|
*/
|
private List<String> getLiveIdLst(String classId) {
|
List<String> liveIds = new ArrayList<String>(5);
|
|
//获取班级列表及班级所在直播列表
|
if(StringUtils.isNotEmpty(classId)) {
|
liveIds = dao.getClassLives(classId);
|
}else { //查询学员所在的全部班级
|
List<ClsClass> clsLst = classService.listMyClass();
|
Set<String> ids = new HashSet<String>();
|
for(ClsClass cls:clsLst) {
|
ids.addAll(dao.getClassLives(cls.getClassId()));
|
}
|
liveIds.addAll(ids);
|
}
|
return liveIds;
|
}
|
|
/**
|
* 查看直播明细
|
* @param couresId 直播id
|
* @return
|
*/
|
@GetMapping(value = "view")
|
public Result view(String couresId,String userId,String userName) throws Exception {
|
|
|
MTCloud client = new MTCloud();
|
|
HashMap<Object,Object> options = new HashMap<Object, Object>();
|
if(userId.equals("")){
|
userId= randomId();
|
}
|
if(userName.equals("") || userName==null){
|
userName= "游客";
|
}
|
|
String res = client.courseAccess(couresId,userId,userName, MTCloud.ROLE_USER, 10000, options);
|
JSONObject jsonObject = JSON.parseObject(res);
|
|
|
if(jsonObject.getString("code").equals("0")){
|
JSONObject data = jsonObject.getJSONObject("data");
|
|
String liveUrl = (String) data.get("liveUrl");
|
|
return new Result(true, "success",liveUrl);
|
}
|
|
return new Result(false, jsonObject.getString("msg"));
|
}
|
|
public String randomId() {
|
Random random=new Random();
|
String str="";
|
for (int i = 0; i <12; i++) {
|
if(i==0){
|
//首位不能为0且数字取值区间为 [1,9]
|
str+=(random.nextInt(9)+1);
|
}else{
|
//其余位的数字的取值区间为 [0,9]
|
str+=random.nextInt(10);
|
}
|
}
|
return str;
|
}
|
|
|
}
|