|
@@ -17,11 +17,7 @@ import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoomMember;
|
|
|
import com.ym.mec.biz.dal.enums.MessageTypeEnum;
|
|
|
import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
|
|
|
import com.ym.mec.biz.dal.vo.RoomUserInfoVo;
|
|
|
-import com.ym.mec.biz.service.ImLiveBroadcastRoomDataService;
|
|
|
-import com.ym.mec.biz.service.ImLiveBroadcastRoomMemberService;
|
|
|
-import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
|
|
|
-import com.ym.mec.biz.service.SysConfigService;
|
|
|
-import com.ym.mec.biz.service.SysMessageService;
|
|
|
+import com.ym.mec.biz.service.*;
|
|
|
import com.ym.mec.common.entity.ImRoomMessage;
|
|
|
import com.ym.mec.common.entity.ImUserState;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
@@ -32,6 +28,7 @@ import com.ym.mec.common.tenant.TenantContextHolder;
|
|
|
import com.ym.mec.im.ImFeignService;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
import com.ym.mec.util.http.HttpUtil;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.redisson.api.RBucket;
|
|
|
import org.redisson.api.RList;
|
|
@@ -42,7 +39,6 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
import java.util.*;
|
|
@@ -183,6 +179,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
obj.setRoomTitle(dto.getRoomTitle());
|
|
|
} else {
|
|
|
BeanUtils.copyProperties(dto, obj);
|
|
|
+ obj.setRoomConfig(JSONObject.toJSONString(dto.getRoomConfig()));
|
|
|
}
|
|
|
obj.setUpdatedBy(getSysUser().getId());
|
|
|
obj.setUpdatedTime(new Date());
|
|
@@ -230,6 +227,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
}
|
|
|
//获取所有直播间缓存数据并写入数据库
|
|
|
insertLiveAllData(room.getRoomUid(), room.getSpeakerId());
|
|
|
+ //todo 删除直播间缓存数据
|
|
|
|
|
|
//将房间状态改为已销毁
|
|
|
Date date = new Date();
|
|
@@ -262,7 +260,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
member.setTotalTime(v.getTotalViewTime());
|
|
|
memberList.add(member);
|
|
|
});
|
|
|
- liveBroadcastRoomMemberService.getDao().insertBatch(memberList);
|
|
|
+ if (CollectionUtils.isNotEmpty(memberList)) {
|
|
|
+ liveBroadcastRoomMemberService.getDao().insertBatch(memberList);
|
|
|
+ }
|
|
|
|
|
|
//获取直播间数据
|
|
|
ImLiveBroadcastRoomVo roomVo = queryRoomInfo(roomUid);
|
|
@@ -359,18 +359,18 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 主讲人登录专用
|
|
|
+ *
|
|
|
* @param roomUid
|
|
|
*/
|
|
|
- public void speakerJoinRoom(String roomUid){
|
|
|
+ public void speakerJoinRoom(String roomUid) {
|
|
|
ImLiveBroadcastRoomVo roomVo = Optional.ofNullable(roomUid)
|
|
|
.map(this::queryRoomInfo)
|
|
|
.orElseThrow(() -> new BizException("直播间不存在"));
|
|
|
Integer userId = getSysUser().getId();
|
|
|
- if(!userId.equals(roomVo.getSpeakerId())){
|
|
|
- throw new BizException("您不算是该直播间的主讲人");
|
|
|
+ if (!userId.equals(roomVo.getSpeakerId())) {
|
|
|
+ throw new BizException("您不是该直播间的主讲人");
|
|
|
}
|
|
|
Date now = new Date();
|
|
|
//获取直播间信息
|
|
@@ -428,7 +428,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
//查询房间信息是否允许录像
|
|
|
RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString()));
|
|
|
RoomSpeakerInfo roomSpeakerInfo = speakerCache.get();
|
|
|
- if (roomSpeakerInfo.getWhetherVideo() == 0) {
|
|
|
+ if (Objects.nonNull(roomSpeakerInfo.getWhetherVideo()) && roomSpeakerInfo.getWhetherVideo() == 0) {
|
|
|
//开始录制视频
|
|
|
imFeignService.startRecord(roomUid);
|
|
|
}
|
|
@@ -447,16 +447,19 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
//关闭直播
|
|
|
RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString()));
|
|
|
RoomSpeakerInfo roomSpeakerInfo = speakerCache.get();
|
|
|
- roomSpeakerInfo.setState(1);
|
|
|
- if (roomSpeakerInfo.getWhetherVideo() == 0) {
|
|
|
+
|
|
|
+ if (Objects.nonNull(roomSpeakerInfo.getWhetherVideo()) && roomSpeakerInfo.getWhetherVideo() == 0) {
|
|
|
//停止录制视频
|
|
|
imFeignService.stopRecord(roomUid);
|
|
|
}
|
|
|
- //计算时长
|
|
|
- int minutesBetween = getMinutesBetween(roomSpeakerInfo.getStartLiveTime(), new Date());
|
|
|
- int i = Objects.isNull(roomSpeakerInfo.getTotalLiveTime()) ? 0 : roomSpeakerInfo.getTotalLiveTime();
|
|
|
- roomSpeakerInfo.setTotalLiveTime(i + minutesBetween);
|
|
|
- speakerCache.set(roomSpeakerInfo);
|
|
|
+ if (Objects.nonNull(roomSpeakerInfo.getState()) && roomSpeakerInfo.getState() == 0) {
|
|
|
+ roomSpeakerInfo.setState(1);
|
|
|
+ //计算时长
|
|
|
+ int minutesBetween = getMinutesBetween(roomSpeakerInfo.getStartLiveTime(), new Date());
|
|
|
+ int i = Objects.isNull(roomSpeakerInfo.getTotalLiveTime()) ? 0 : roomSpeakerInfo.getTotalLiveTime();
|
|
|
+ roomSpeakerInfo.setTotalLiveTime(i + minutesBetween);
|
|
|
+ speakerCache.set(roomSpeakerInfo);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -493,18 +496,28 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
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()));
|
|
|
- Optional.ofNullable(one.getRoomConfig())
|
|
|
+ boolean video = Optional.ofNullable(one.getRoomConfig())
|
|
|
.map(c -> JSON.parseObject(c, ImLiveBroadcastRoomDto.RoomConfig.class))
|
|
|
.filter(c -> Objects.nonNull(c.getWhether_video()))
|
|
|
- .filter(c -> c.getWhether_video() == 0)
|
|
|
- .ifPresent(c -> speakerInfo.setWhetherVideo(0));//可以录制视频
|
|
|
+ .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);
|
|
@@ -513,7 +526,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
|
|
|
//去融云创建房间
|
|
|
imFeignService.createLiveRoom(room.getRoomUid(), room.getRoomTitle());
|
|
|
-
|
|
|
} catch (Exception e) {
|
|
|
log.error(">>>>>>>>>> createLiveRoom error roomUid:{} msg:{}", room.getRoomUid(), e.getMessage());
|
|
|
}
|