package com.qxueyou.scc.controller;
|
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.hankcs.hanlp.corpus.tag.Nature;
|
import com.qxueyou.scc.base.dao.CommonDAO;
|
import com.qxueyou.scc.sdk.MTCloud;
|
import io.swagger.models.auth.In;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import com.qxueyou.scc.admin.classes.model.ClsClass;
|
import com.qxueyou.scc.admin.classes.service.IClassService;
|
import com.qxueyou.scc.admin.teacher.service.ITeacherService;
|
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.model.MediaVideoLiveReplay;
|
import com.qxueyou.scc.teach.live.service.IMediaLiveService;
|
import com.qxueyou.scc.teach.live.service.IMediaVideoLivePlayBackService;
|
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import springfox.documentation.spring.web.json.Json;
|
|
import static com.hankcs.hanlp.corpus.tag.Nature.r;
|
import static com.hankcs.hanlp.corpus.tag.Nature.s;
|
|
@Api(tags="直播管理接口")
|
@RestController
|
@CrossOrigin(origins="*",maxAge=3600)
|
@RequestMapping(value = "/admin/videoLive")
|
public class VideoLiveController {
|
|
// 分页查询中,默认记录条数和页数
|
private static final int DEFAULT_PAGE_SIZE = 10;
|
private static final int DEFAULT_PAGE_NUM = 1;
|
|
@Autowired
|
IMediaLiveService liveService;
|
|
@Autowired
|
IMediaVideoLivePlayBackService mediaVideoLivePlayBackService;
|
|
@Autowired
|
IClassService classService;
|
|
@Autowired
|
MediaLiveDAO dao;
|
|
@Autowired
|
CommonDAO commonDAO;
|
|
/**
|
* 获取直播列表
|
*
|
* @param keyword
|
* 搜索关键字
|
* @param pageNum
|
* 页码
|
* @param pageSize
|
* 页数
|
* @return
|
*/
|
@ApiOperation(value = "获取创建人的直播列表")
|
@GetMapping(value = "list")
|
public Result list(String keyword, Integer pageNum, Integer pageSize) {
|
|
List<MediaVideoLive> data = liveService.listOfMine(keyword, pageNum, pageSize);
|
int count = liveService.listCountOfMine(keyword);
|
|
return new Result(true, "success", CollectionUtils.newObjectMap("videoLiveCount", count,
|
"videoLiveLst",QBeanUtils.listBean2ListMap(data, CollectionUtils.newStringMap(
|
"creator","creator",
|
"startTime","startTime",
|
"endTime","endTime",
|
"updateTime","lastUpdateTime",
|
"videoLiveId","videoLiveId",
|
"name","name",
|
"subjectId","subjectId",
|
"subjectName","subjectName",
|
"status","status",
|
"pushUrl","rtmpPushUrl",
|
"hlsPullUrl","hlsPullUrl",
|
"previewImgUrl","previewImgUrl",
|
"courseId","courseId"
|
))));
|
}
|
|
/**
|
* 新增直播/更新直播
|
*
|
* @param videoLiveId
|
* 直播id(更新的时候才需要传)
|
* @param name
|
* 直播名称
|
* @param content
|
* 直播介绍
|
* @param imgPath
|
* 图片地址
|
* @param startTime
|
* 开始时间
|
* @param endTime
|
* 结束时间
|
* @param isPlayBack
|
* 是否回放
|
* @param classIds
|
* 班级id
|
* @return
|
*/
|
@ApiOperation(value = "创建编辑直播")
|
@PostMapping(value = "addOrUpdate")
|
public Result addOrUpdate(String videoLiveId, String name, String content,String teacherId,String teacherName,String subjectId,
|
String subjectName,String definition,String imgPath, long startTime,long endTime, boolean isPlayBack, String classIds) throws Exception {
|
MTCloud client = new MTCloud();
|
HashMap<Object,Object> options = new HashMap<Object,Object>();
|
options.put("barrage", 1);
|
options.put("isPublic", 1);
|
options.put("robotNumber", 1);
|
options.put("robotType", 1);
|
options.put("pptDisplay", 1);
|
options.put("modetype", 6);
|
//将long类型转换为String类型
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String startTime1 = simpleDateFormat.format(new Date(startTime));
|
String endTime1 = simpleDateFormat.format(new Date(endTime));
|
System.out.println(startTime1+"------"+endTime1);
|
//调用第三方直播接口
|
String s = client.courseAdd(name, ClientUtils.getUserId(), startTime1, endTime1, ClientUtils.getUserName(), "222", options);
|
//json转换拿到courseId
|
JSONObject jsonObject = JSON.parseObject(s);
|
JSONObject data = jsonObject.getJSONObject("data");
|
// System.out.println(Integer.parseInt(course_id));
|
if(jsonObject.getString("code").equals("0")) {
|
String course_id = (String) data.get("course_id");
|
liveService.add(name, content,teacherId,teacherName,subjectId,subjectName,definition,imgPath, new Date(startTime), new Date(endTime),Integer.parseInt(course_id), isPlayBack, StringUtils.isEmpty(classIds)?null:CollectionUtils.newList(String.class,classIds.split(",")));
|
return new Result(true, "成功", s);
|
}
|
return new Result(false,jsonObject.getString("msg"));
|
}
|
|
@ApiOperation(value = "开启直播")
|
@GetMapping(value = "OpenLive")
|
public Result OpenLive(int courseId) throws Exception {
|
MTCloud client = new MTCloud();
|
|
HashMap<Object,Object> options = new HashMap<Object, Object>();
|
options.put("ssl", false);
|
|
String res = client.courseLogin(ClientUtils.getUserId(),MTCloud.ACCOUNT_TYPE_THIRD, options);
|
System.out.println(res);
|
JSONObject jsonObject = JSON.parseObject(res);
|
if(jsonObject.getString("code").equals("0")){
|
JSONObject data = jsonObject.getJSONObject("data");
|
String protocol = (String) data.get("url");
|
return new Result(true,"开启成功",protocol);
|
}
|
return new Result(false,jsonObject.getString("msg"));
|
}
|
|
@ApiOperation(value = "修改直播状态")
|
@GetMapping(value = "updateLive")
|
public Result updateLive(Integer courseId) {
|
|
MediaVideoLive revamp = liveService.revamp(courseId);
|
revamp.setStatus(MediaVideoLive.STATUS_LIVE_STOP);
|
commonDAO.update(revamp);
|
|
return new Result(true,"关闭成功");
|
}
|
|
@ApiOperation(value = "在线时长")
|
@GetMapping(value = "onlineCommunication")
|
public Result onlineCommunication(String courseId,Integer page, Integer size) throws Exception {
|
MTCloud client = new MTCloud();
|
HashMap<Object,Object> options = new HashMap<Object, Object>();
|
options.put("ssl", false);
|
String res = client.courseVisitorList(courseId,page,size,options);
|
return new Result(true,"开启成功",res);
|
}
|
|
// @ApiOperation(value = "查看详情")
|
// @GetMapping(value = "detailLive")
|
// public Result detailLive(String liveId) {
|
// commonDAO.find
|
// return new Result(true,"开启成功",res);
|
// }
|
/**
|
* 查询直播详情
|
*
|
* @param videoLiveId
|
* 直播id
|
* @return
|
*/
|
@ApiOperation(value = "获取直播详情")
|
@GetMapping(value = "queryDetail")
|
public Result detail(String videoLiveId) {
|
List<String> lstClassIds = null;
|
List<Map<String,Object>> lstClassIdNames = null;
|
|
MediaVideoLive live = liveService.read(videoLiveId);
|
List<ClsClass> lstClassses = live.getClasses();
|
|
if(lstClassses!=null){
|
lstClassIds = new ArrayList<String>(lstClassses.size());
|
lstClassIdNames = new ArrayList<Map<String,Object>>(lstClassses.size());
|
|
for(ClsClass cls: lstClassses){
|
lstClassIds.add(cls.getClassId());
|
lstClassIdNames.add(CollectionUtils.newObjectMap("classId",cls.getClassId(),"className",cls.getName()));
|
}
|
}
|
|
return new Result(true, "success",
|
CollectionUtils.newObjectMap(
|
"videoLiveId",live.getVideoLiveId(),
|
"name", live.getName(),
|
"content", live.getRemark(),
|
"imgPath", live.getPreviewImgUrl(),
|
"isplayBack",1,
|
"startTime", live.getStartTime(),
|
"endTime", live.getEndTime(),
|
"rtmpPushUrl", live.getPushUrl(),
|
"hlsPullUrl", live.getHlsPullUrl(),
|
"chatroomId", dao.getChatRoomId(videoLiveId),
|
"watchTimes",live.getWatchTimes(),
|
"praiseTimes",live.getPraiseTimes(),
|
"definition",live.getDefinition(),
|
"subjectId",live.getSubjectId(),
|
"subjectName",live.getSubjectName(),
|
"status",live.getStatus(),
|
"teacherId",live.getAnchorId(),
|
"teacherName",live.getAnchor(),
|
"classIds",lstClassIds ,
|
"classes", lstClassIdNames));
|
}
|
|
/**
|
* 发布/多个以逗号隔开
|
*
|
* @param videoLiveIds
|
* 直播ids
|
* @return
|
*/
|
@ApiOperation(value = "发布直播")
|
@PostMapping(value = "release")
|
public Result release(String videoLiveIds) {
|
for(String liveId:videoLiveIds.split(",")) {
|
liveService.doIssue(liveId);
|
}
|
return Result.SUCCESS;
|
}
|
|
/**
|
* 取消发布/多个以逗号隔开
|
*
|
* @param videoLiveIds
|
* 直播ids
|
* @return
|
*/
|
@ApiOperation(value = "取消发布直播")
|
@PostMapping(value = "cancel")
|
public Result cance(String videoLiveIds) {
|
|
for(String liveId:videoLiveIds.split(",")) {
|
liveService.doCancel(liveId);
|
}
|
return Result.SUCCESS;
|
}
|
|
/**
|
* 删除/多个以逗号隔开
|
*
|
* @param videoLiveIds
|
* @return
|
*/
|
@ApiOperation(value = "删除创建的直播")
|
@PostMapping(value = "delete")
|
public Result delete(String videoLiveIds,String courseIds) throws Exception {
|
return liveService.delete(videoLiveIds.split(","),courseIds.split(","));
|
}
|
|
|
/**
|
* 直播开始
|
*
|
* @param videoLiveIds
|
* 直播id
|
*/
|
@ApiOperation(value = "直播开始")
|
@PostMapping(value = "start")
|
public Result start(String videoLiveIds) {
|
|
for(String liveId:videoLiveIds.split(",")) {
|
liveService.doStart(liveId);
|
}
|
return Result.SUCCESS;
|
}
|
|
|
/**
|
* 直播暂停
|
*
|
* @param videoLiveIds
|
* 直播id
|
*/
|
@ApiOperation(value = "直播暂停")
|
@PostMapping(value = "pause")
|
public Result pause(String videoLiveIds) {
|
|
for(String liveId:videoLiveIds.split(",")) {
|
liveService.doPause(liveId);
|
}
|
return Result.SUCCESS;
|
}
|
|
/**
|
* 直播结束
|
*
|
* @param videoLiveIds
|
* 直播id
|
*/
|
@ApiOperation(value = "直播结束")
|
@PostMapping(value = "stop")
|
public Result stop(String videoLiveIds) {
|
|
for(String liveId:videoLiveIds.split(",")) {
|
liveService.doStop(liveId);
|
}
|
return Result.SUCCESS;
|
}
|
|
|
|
/**
|
* 直播点赞
|
*
|
* @param videoLiveId
|
* 直播id
|
*/
|
@ApiOperation(value = "直播点赞")
|
@PostMapping(value = "praise")
|
public Result praise(String videoLiveId) {
|
return liveService.doPraise(videoLiveId);
|
}
|
|
@ApiOperation(value = "学生端根据班级,课程过滤直播列表")
|
@GetMapping(value = "student/list")
|
public Result list(String keyword,String classIds,String subjectId,Short status,Integer pageNum, Integer pageSize) {
|
pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
|
pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
|
|
String [] arrClassIds = null;
|
if(StringUtils.isNotEmpty(classIds) || StringUtils.isNotBlank(ClientUtils.getClassId())){
|
arrClassIds = StringUtils.isEmpty(classIds)?new String[]{ClientUtils.getClassId()}:classIds.split(",");
|
}
|
|
int count = liveService.listCount(keyword==null?"":keyword.trim() , arrClassIds , subjectId , status);
|
List<MediaVideoLive> data = liveService.list(keyword==null?"":keyword.trim(),StringUtils.isEmpty(classIds)?new String[]{ClientUtils.getClassId()}:classIds.split(","),subjectId,status, pageNum, pageSize);
|
|
return new Result(true, "success", CollectionUtils.newObjectMap("videoLiveCount", count,
|
"videoLiveLst",QBeanUtils.listBean2ListMap(data, CollectionUtils.newStringMap(
|
"creator","creator",
|
"startTime","startTime",
|
"endTime","endTime",
|
"updateTime","lastUpdateTime",
|
"videoLiveId","videoLiveId",
|
"name","name",
|
"subjectId","subjectId",
|
"subjectName","subjectName",
|
"status","status",
|
"pushUrl","rtmpPushUrl",
|
"hlsPullUrl","hlsPullUrl",
|
"previewImgUrl","previewImgUrl",
|
"courseId","courseId"
|
))));
|
}
|
|
@ApiOperation(value = "直播回放列表")
|
@GetMapping(value = "replay/list")
|
public Result listReplay(String videoLiveId) {
|
|
List<MediaVideoLiveReplay> data = mediaVideoLivePlayBackService.queryVideoLiveReplay(videoLiveId);
|
|
return new Result(true, "success", CollectionUtils.newObjectMap(
|
"replayList",QBeanUtils.listBean2ListMap(data, CollectionUtils.newStringMap(
|
"name","replayName",
|
"creator","creator",
|
"beginTime","beginTime",
|
"endTime","endTime",
|
"updateTime","updateTime",
|
"duration","duration",
|
"initialSize","initialSize",
|
"url","url",
|
"videoLiveId","videoLiveId",
|
"status","status",
|
"liveReplayId","liveReplayId"
|
))));
|
}
|
|
@ApiOperation(value = "测试直播回放")
|
@GetMapping(value = "replay/test")
|
public Result testReplay(String liveId) {
|
mediaVideoLivePlayBackService.testPlayBack(liveId);
|
return new Result(true);
|
}
|
|
}
|