فهرست منبع

修改:主讲人进入直播间校验及查询

hgw 3 سال پیش
والد
کامیت
d4bdcb307e

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java

@@ -41,7 +41,7 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
 
     void quitRoom(List<ImUserState> userState);
 
-    void speakerJoinRoom(String roomUid);
+    ImLiveBroadcastRoomVo speakerJoinRoom(String roomUid);
 
     void joinRoom(String roomUid, Integer userId);
 

+ 57 - 50
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -97,12 +97,16 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         } else {
             sysUser = getSysUser(userId);
         }
+        return queryRoomAndCheck(roomUid, sysUser);
+    }
+
+    public ImLiveBroadcastRoomVo queryRoomAndCheck(String roomUid, SysUser sysUser) {
         //直播间信息校验
         Optional<ImLiveBroadcastRoomVo> optional = Optional.ofNullable(roomUid)
                 .map(this::queryRoomInfo);
         optional.orElseThrow(() -> new BizException("直播间不存在"));
         optional.filter(r -> r.getTenantId().equals(sysUser.getTenantId()))
-                .orElseThrow(() -> new BizException("您不是该直播机构员,不可观看!"));
+                .orElseThrow(() -> new BizException("您不是该直播机构员,不可观看!"));
         optional.filter(r -> r.getRoomState() != 1).orElseThrow(() -> new BizException("直播间不存在"));
         ImLiveBroadcastRoomVo room = optional.get();
         if (room.getLiveState() == 0) {
@@ -115,6 +119,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         return room;
     }
 
+
     /**
      * 查询直播间信息
      *
@@ -491,27 +496,25 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      *
      * @param roomUid
      */
-    public void speakerJoinRoom(String roomUid) {
-        ImLiveBroadcastRoomVo roomVo = Optional.ofNullable(roomUid)
-                .map(this::queryRoomInfo)
-                .orElseThrow(() -> new BizException("直播间不存在"));
-        Integer userId = getSysUser().getId();
+    public ImLiveBroadcastRoomVo speakerJoinRoom(String roomUid) {
+        SysUser sysUser = getSysUser();
+        ImLiveBroadcastRoomVo roomVo = queryRoomAndCheck(roomUid, sysUser);
+        Integer userId = sysUser.getId();
         if (!userId.equals(roomVo.getSpeakerId())) {
             throw new BizException("您不是该直播间的主讲人");
         }
         Date now = new Date();
         //获取直播间信息
         RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString()));
-        if (speakerCache.isExists()) {
-            //判断有没有是房间号的主讲人
-            RoomSpeakerInfo speakerInfo = speakerCache.get();
-            if (roomUid.equals(speakerInfo.getRoomUid())) {
-                speakerInfo.setJoinRoomTime(now);
-                speakerCache.set(speakerInfo);
-            }
-        } else {
-            throw new BizException("还未开启直播间");
-        }
+        if (!speakerCache.isExists()) {
+            //没有主讲人信息则生成一个
+            createSpeakerInfo(this.getById(roomVo.getId()), sysUser);
+            speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString()));
+        }
+        RoomSpeakerInfo speakerInfo = speakerCache.get();
+        speakerInfo.setJoinRoomTime(now);
+        speakerCache.set(speakerInfo);
+        return roomVo;
     }
 
     /**
@@ -628,43 +631,10 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     private void createLiveRoom(ImLiveBroadcastRoom room) {
         log.info("createLiveRoom>>>>>>roomUid:{}", room.getRoomUid());
-        Date now = new Date();
         try {
             //生成主讲人信息到缓存
             SysUser sysUser = getSysUser(room.getSpeakerId());
-            RoomSpeakerInfo speakerInfo = new RoomSpeakerInfo();
-            speakerInfo.setSpeakerId(sysUser.getId());
-            speakerInfo.setSpeakerName(sysUser.getRealName());
-            speakerInfo.setCreateRoomTime(now);
-            speakerInfo.setRoomUid(room.getRoomUid());
-            speakerInfo.setTenantId(sysUser.getTenantId());
-            speakerInfo.setTotalLiveTime(0);
-
-            //查询房间信息是否允许录像
-            ImLiveBroadcastRoom one = this.getOne(new QueryWrapper<ImLiveBroadcastRoom>().eq("room_uid_", room.getRoomUid()));
-            boolean video = getRoomConfig(one.getRoomConfig())
-                    .filter(c -> Objects.nonNull(c.getWhether_video()))
-                    .map(c -> c.getWhether_video() == 0)
-                    .orElse(false);
-            if (video) {
-                //可以录制视频
-                speakerInfo.setWhetherVideo(0);
-            } else {
-                //不可以录制视频
-                speakerInfo.setWhetherVideo(1);
-            }
-            //写入主讲人信息
-            redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString())).set(speakerInfo);
-
-            //生成0点赞
-            redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).set(0);
-
-            //修改房间状态为开始
-            room.setLiveState(1);
-            room.setUpdatedTime(now);
-            room.setUpdatedBy(-1);
-            baseMapper.updateById(room);
-
+            createSpeakerInfo(room, sysUser);
             //去融云创建房间
             imFeignService.createLiveRoom(room.getRoomUid(), room.getRoomTitle());
         } catch (Exception e) {
@@ -672,6 +642,43 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         }
     }
 
+    //生成主讲人信息
+    private void createSpeakerInfo(ImLiveBroadcastRoom room, SysUser sysUser) {
+        Date now = new Date();
+        RoomSpeakerInfo speakerInfo = new RoomSpeakerInfo();
+        speakerInfo.setSpeakerId(sysUser.getId());
+        speakerInfo.setSpeakerName(sysUser.getRealName());
+        speakerInfo.setCreateRoomTime(now);
+        speakerInfo.setRoomUid(room.getRoomUid());
+        speakerInfo.setTenantId(sysUser.getTenantId());
+        speakerInfo.setTotalLiveTime(0);
+
+        //查询房间信息是否允许录像
+        ImLiveBroadcastRoom one = this.getOne(new QueryWrapper<ImLiveBroadcastRoom>().eq("room_uid_", room.getRoomUid()));
+        boolean video = getRoomConfig(one.getRoomConfig())
+                .filter(c -> Objects.nonNull(c.getWhether_video()))
+                .map(c -> c.getWhether_video() == 0)
+                .orElse(false);
+        if (video) {
+            //可以录制视频
+            speakerInfo.setWhetherVideo(0);
+        } else {
+            //不可以录制视频
+            speakerInfo.setWhetherVideo(1);
+        }
+        //写入主讲人信息
+        redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString())).set(speakerInfo);
+
+        //生成0点赞
+        redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).set(0);
+
+        //修改房间状态为开始
+        room.setLiveState(1);
+        room.setUpdatedTime(now);
+        room.setUpdatedBy(-2);
+        baseMapper.updateById(room);
+    }
+
     private Optional<ImLiveBroadcastRoomDto.RoomConfig> getRoomConfig(String roomConfig) {
         return Optional.ofNullable(roomConfig)
                 .map(c -> JSON.parseObject(c, ImLiveBroadcastRoomDto.RoomConfig.class));

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMapper.xml

@@ -65,7 +65,7 @@
             a.room_state_ in(0, 2)
             <if test="param.search != null ">
                 AND (
-                a.`room_uid_` LIKE CONCAT('%', #{param.search},'%')
+                a.`id_` LIKE CONCAT('%', #{param.search},'%')
                 OR a.`room_title_` LIKE CONCAT('%', #{param.search},'%')
                 )
             </if>

+ 2 - 3
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java

@@ -131,9 +131,8 @@ public class ImLiveBroadcastRoomController extends BaseController {
 
     @ApiOperation("主讲人进入房间")
     @GetMapping("/speakerJoinRoom")
-    public HttpResponseResult speakerJoinRoom(String roomUid) {
-        imLiveBroadcastRoomService.speakerJoinRoom(roomUid);
-        return succeed();
+    public HttpResponseResult<ImLiveBroadcastRoomVo> speakerJoinRoom(String roomUid) {
+        return succeed(imLiveBroadcastRoomService.speakerJoinRoom(roomUid));
     }
 
     @ApiOperation("进入房间")