| | |
| | | package com.qxueyou.scc.stucontroller; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.qxueyou.scc.base.dao.CommonDAO; |
| | | import com.qxueyou.scc.sdk.MTCloud; |
| | | import com.qxueyou.scc.teach.live.model.AccessLog; |
| | | import com.qxueyou.scc.teach.live.utils.RedisCache; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | 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 io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | |
| | | @Api(tags="直播接口-学员端") |
| | | @Slf4j |
| | | @Api(tags="直播接口-学员端") |
| | | @RestController |
| | | @CrossOrigin |
| | | @RequestMapping(value = "/stu/live") |
| | | public class StuLiveController { |
| | | |
| | |
| | | |
| | | @Autowired |
| | | MediaLiveDAO dao; |
| | | |
| | | @Autowired |
| | | RedisCache redisCache; |
| | | |
| | | @Autowired |
| | | CommonDAO commonDAO; |
| | | |
| | | private final static short[] PUBLIC_LIVE_STATUS = new short[] { |
| | | MediaVideoLive.STATUS_LIVE_LIVE,MediaVideoLive.STATUS_LIVE_PAUSE, |
| | |
| | | }; |
| | | |
| | | /** |
| | | * 获取直播列表 |
| | | * @param classId 班级id |
| | | * 获取直播列表 |
| | | * @param classId 班级id |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "获取直播列表", notes = "") |
| | | @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"), |
| | | @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) { |
| | |
| | | "previewImgUrl","imgPath" |
| | | )); |
| | | |
| | | //添加聊天室id |
| | | //添加聊天室id |
| | | if(lst!=null && lst.size()>0){ |
| | | for(Map<String,Object> map:lst) { |
| | | map.put("chatroomId", dao.getChatRoomId((String)map.get("videoLiveId"))); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取直播id |
| | | * 获取直播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 { //查询学员所在的全部班级 |
| | | }else { //查询学员所在的全部班级 |
| | | List<ClsClass> clsLst = classService.listMyClass(); |
| | | Set<String> ids = new HashSet<String>(); |
| | | for(ClsClass cls:clsLst) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看直播明细 |
| | | * @param liveId 直播id |
| | | * 查看直播明细 |
| | | * @param couresId 直播id |
| | | * @return |
| | | */ |
| | | @GetMapping(value = "view") |
| | | public Result view(String liveId) { |
| | | |
| | | MediaVideoLive live = liveService.read(liveId); |
| | | |
| | | return new Result(true, "success", CollectionUtils.newObjectMap( |
| | | "startTime",live.getStartTime(), |
| | | "endTime",live.getEndTime(), |
| | | "name",live.getName(), |
| | | "hlsPullUrl",live.getHlsPullUrl(), |
| | | "imgPath",live.getPreviewImgUrl(), |
| | | "chatroomId",dao.getChatRoomId(liveId), |
| | | "remark",live.getRemark() |
| | | )); |
| | | public Result view(String couresId,String userId,String userName,String logId) throws Exception { |
| | | AccessLog log=new AccessLog(); |
| | | if(StringUtils.isEmpty(logId)){ |
| | | // String ip = IpUtils.getIpAddr(request); |
| | | // String cityInfo = null; |
| | | // try { |
| | | // cityInfo = IpUtils.getCityInfo(ip); |
| | | // } catch (Exception e) { |
| | | // log.error("获取ip归属地信息失败!"); |
| | | // } |
| | | log.setCourseId(couresId); |
| | | log.setEnterTime(new Date()); |
| | | log.setType("guangxi"); |
| | | log.setName(userName); |
| | | // log.setIp(ip); |
| | | // log.setIpAttribution(cityInfo); |
| | | commonDAO.save(log); |
| | | }else { |
| | | String liveUrl = redisCache.getCacheObject("LIVE_URL" + userId); |
| | | return new Result(true, "success",liveUrl); |
| | | } |
| | | MTCloud client = new MTCloud(); |
| | | String userRole = null; |
| | | HashMap<Object,Object> options = new HashMap<Object, Object>(); |
| | | if(userId.equals("")){ |
| | | userId= randomId(); |
| | | } |
| | | if(userName.equals("") || userName==null){ |
| | | userName= "游客"; |
| | | userRole=MTCloud.ROLE_GUEST; |
| | | }else { |
| | | userRole=MTCloud.ROLE_USER; |
| | | } |
| | | String res = client.courseAccess(couresId,userId,userName,userRole, 10000, options); |
| | | |
| | | JSONObject jsonObject = JSON.parseObject(res); |
| | | |
| | | if(jsonObject.getString("code").equals("0")){ |
| | | |
| | | JSONObject data = jsonObject.getJSONObject("data"); |
| | | |
| | | String liveUrl = (String) data.get("liveUrl"); |
| | | StringBuffer redisLiveUrl = new StringBuffer("LIVE_URL"); |
| | | redisLiveUrl=redisLiveUrl.append(userId); |
| | | redisCache.setCacheObject(redisLiveUrl.toString(),liveUrl,5, TimeUnit.MINUTES); |
| | | 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; |
| | | } |
| | | |
| | | |
| | | } |