|
@@ -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));
|