|
@@ -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 {
|