Browse Source

修改老师端逻辑

hgw 3 năm trước cách đây
mục cha
commit
fabe705b1e

+ 67 - 23
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -133,31 +133,56 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 .map(this::getSysUser)
                 .orElseGet(this::getSysUser);
         osType = Optional.ofNullable(osType).orElse(1);
-        return queryRoomAndCheck(roomUid, sysUser, osType);
+        if (osType == 1) {
+            //学生端
+            return studentQueryRoomAndCheck(roomUid, sysUser);
+        } else if (osType == 2) {
+            //老师端
+            return teacherQueryRoomAndCheck(roomUid, sysUser);
+        }
+        return queryRoomAndCheck(roomUid, sysUser);
     }
 
-    public ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, SysUser sysUser, Integer osType) {
-        Optional<ImLiveBroadcastRoomVo> optional;
+    public ImLiveBroadcastRoomVo studentQueryRoomAndCheck(String roomUid, SysUser sysUser) {
         //如果是学生端,则需要检查是否有权限进入
-        if (Objects.equals(osType, 1)) {
-            Map<String, Object> param = new HashMap<>();
-            param.put("roomUid", roomUid);
-            optional = Optional.of(param).map(this::getImLiveBroadcastRoomVo);
-            optional.orElseThrow(() -> new BizException("您无法观看该直播"));
-        } else {
-            optional = Optional.ofNullable(roomUid).map(this::queryRoomInfo);
-            optional.orElseThrow(() -> new BizException("直播间不存在"));
+        Map<String, Object> param = new HashMap<>();
+        param.put("roomUid", roomUid);
+        ImLiveBroadcastRoomVo vo = Optional.of(param).map(this::getImLiveBroadcastRoomVo)
+                .orElseThrow(() -> new BizException("您无法观看该直播"));
+        if (vo.getSpeakerId().equals(sysUser.getId())) {
+            throw new BizException("您是该直播间的主讲人,请从直播端进入");
+        }
+        if (vo.getLiveState() == 0) {
+            throw new BizException("直播尚未开始");
+        }
+        return queryRoomAndCheck(vo, sysUser);
+    }
+
+    public ImLiveBroadcastRoomVo teacherQueryRoomAndCheck(String roomUid, SysUser sysUser) {
+        ImLiveBroadcastRoomVo vo = Optional.ofNullable(roomUid).map(this::queryRoomInfo)
+                .orElseThrow(() -> new BizException("直播间不存在"));
+        if (vo.getOs().equals("pc")) {
+            throw new BizException("该直播间仅可在电脑端直播");
         }
+        return queryRoomAndCheck(vo, sysUser);
+    }
+
+    public ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, SysUser sysUser) {
+        ImLiveBroadcastRoomVo vo = Optional.ofNullable(roomUid).map(this::queryRoomInfo)
+                .orElseThrow(() -> new BizException("直播间不存在"));
+        return queryRoomAndCheck(vo, sysUser);
+    }
+
+    public ImLiveBroadcastRoomVo queryRoomAndCheck(ImLiveBroadcastRoomVo room, SysUser sysUser) {
         //直播间信息校验
-        optional.filter(r -> r.getTenantId().equals(sysUser.getTenantId()))
-                .orElseThrow(() -> new BizException("您不是该直播机构人员,不可观看!"));
-        optional.filter(r -> r.getRoomState() != 1).orElseThrow(() -> new BizException("直播间不存在"));
-        ImLiveBroadcastRoomVo room = optional.get();
+        if (room.getTenantId().equals(sysUser.getTenantId())) {
+            throw new BizException("您不是该直播机构人员,不可观看!");
+        }
+        if (room.getRoomState() == 1) {
+            throw new BizException("直播间不存在");
+        }
         if (room.getLiveState() == 0) {
             Date liveStartTime = DateUtil.addMinutes(room.getLiveStartTime(), -PRE_LIVE_TIME_MINUTE);
-            if (osType == 1) {
-                throw new BizException("直播尚未开始");
-            }
             throw new BizException(DateUtil.format(liveStartTime, "yyyy年MM月dd日 HH点mm分") + " 可进入直播间准备");
         }
         if (room.getLiveState() == 2) {
@@ -172,7 +197,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         room.setBlacklistFlag(0);
         //黑名单查询-查询当前用户是否在黑名单中
         int count = imLiveRoomBlackService.count(Wrappers.<ImLiveRoomBlack>lambdaQuery()
-                .eq(ImLiveRoomBlack::getRoomUid, roomUid)
+                .eq(ImLiveRoomBlack::getRoomUid, room.getRoomUid())
                 .eq(ImLiveRoomBlack::getUserId, sysUser.getId()));
         if (count > 0) {
             room.setBlacklistFlag(1);
@@ -387,6 +412,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         PageInfo<ImLiveBroadcastRoomVo> pageInfo = imLiveRoomReservationService.queryPageStudent(param);
         List<ImLiveBroadcastRoomVo> list = pageInfo.getRows();
         if (CollectionUtils.isNotEmpty(list)) {
+            getRoomData(list.get(0));
             return list.get(0);
         }
         return null;
@@ -781,6 +807,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 }
             }
         }
+        //如果退出时间大于进入时间就无需再次退出-直接返回
+        if (compareDate.apply(speakerInfo.getExitRoomTime(), speakerInfo.getJoinRoomTime())) {
+            return true;
+        }
         //主讲人退出房间关闭录像
         closeLive(speakerInfo);
         speakerInfo.setExitRoomTime(now);
@@ -796,10 +826,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     public ImLiveBroadcastRoomVo speakerJoinRoom(String roomUid, String os) {
         SysUser sysUser = getSysUser();
-        ImLiveBroadcastRoomVo roomVo = queryRoomAndCheck(roomUid, sysUser, null);
-        if (!os.equals(roomVo.getOs())) {
-            String ex = roomVo.getOs().equals("pc") ? "电脑": "手机";
-            throw new BizException("该直播间仅可在"+ex+"端直播");
+        ImLiveBroadcastRoomVo roomVo;
+        if (os.equals("mobile")) {
+            roomVo = teacherQueryRoomAndCheck(roomUid, sysUser);
+        } else {
+            roomVo = queryRoomAndCheck(roomUid, sysUser);
         }
         Integer userId = sysUser.getId();
         if (!userId.equals(roomVo.getSpeakerId())) {
@@ -1462,6 +1493,19 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     }
 
     /**
+     * 对比时间,2个时间一个为空返回false,否则对比时间大小
+     * <p>- date1 时间1
+     * <p>- date2 时间2
+     */
+    private final BiFunction<Date, Date, Boolean> compareDate = (date1, date2) -> {
+        if (Objects.nonNull(date1) && Objects.nonNull(date2)) {
+            return date1.getTime() > date2.getTime();
+        } else {
+            return false;
+        }
+    };
+
+    /**
      * 主讲人信息
      */
     public static class RoomSpeakerInfo implements Serializable {

+ 12 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherImLiveBroadcastRoomController.java

@@ -87,9 +87,18 @@ public class TeacherImLiveBroadcastRoomController extends BaseController {
         return succeed();
     }
 
-    @PostMapping("/quitRoom")
-    public HttpResponseResult<Object> quitRoom(@RequestBody List<ImUserState> userState) {
-        imLiveBroadcastRoomService.opsRoom(userState);
+    @ApiOperation("开启/关闭直播的录像")
+    @GetMapping("/opsLiveVideo")
+    public HttpResponseResult<Object> opsLiveVideo(@ApiParam(value = "房间uid", required = true) String roomUid,
+                                                   @ApiParam(value = "用户id", required = true) Integer userId,
+                                                   @ApiParam(value = "type 1:开始直播-开始录像     2:关闭直播关闭录像", required = true) Integer type) {
+        if (type == 1) {
+            imLiveBroadcastRoomService.startLive(roomUid, userId);
+        } else if (type == 2) {
+            imLiveBroadcastRoomService.closeLive(roomUid, userId);
+        } else {
+            failed("type参数错误");
+        }
         return succeed();
     }