|
@@ -44,6 +44,7 @@ import com.ym.mec.util.http.HttpUtil;
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
import org.joda.time.DateTime;
|
|
import org.joda.time.DateTime;
|
|
import org.redisson.api.RBucket;
|
|
import org.redisson.api.RBucket;
|
|
import org.redisson.api.RLock;
|
|
import org.redisson.api.RLock;
|
|
@@ -590,19 +591,26 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
log.info("roomDestroy>>>> insertAndCleanLiveData {}", JSONObject.toJSONString(room));
|
|
log.info("roomDestroy>>>> insertAndCleanLiveData {}", JSONObject.toJSONString(room));
|
|
|
|
|
|
//将房间状态改为已销毁
|
|
//将房间状态改为已销毁
|
|
|
|
+ ImLiveBroadcastRoom liveRoomUpdate = new ImLiveBroadcastRoom();
|
|
|
|
+ liveRoomUpdate.setId(room.getId());
|
|
|
|
+
|
|
Date date = new Date();
|
|
Date date = new Date();
|
|
- room.setRoomState(2);
|
|
|
|
- room.setLiveState(2);
|
|
|
|
|
|
+ liveRoomUpdate.setRoomState(2);
|
|
|
|
+ liveRoomUpdate.setLiveState(2);
|
|
Integer userId = -1;
|
|
Integer userId = -1;
|
|
try {
|
|
try {
|
|
userId = getSysUser().getId();
|
|
userId = getSysUser().getId();
|
|
} catch (Exception ignored) {
|
|
} catch (Exception ignored) {
|
|
}
|
|
}
|
|
- room.setUpdatedBy(userId);
|
|
|
|
- room.setUpdatedTime(date);
|
|
|
|
- room.setLiveEndTime(date);
|
|
|
|
- room.setPopularize(0);//销毁直播间后要关闭推广
|
|
|
|
- this.updateById(room);
|
|
|
|
|
|
+ liveRoomUpdate.setSpeakerStatus(0);
|
|
|
|
+ liveRoomUpdate.setPushStatus(0);
|
|
|
|
+ liveRoomUpdate.setUpdatedBy(userId);
|
|
|
|
+ liveRoomUpdate.setUpdatedTime(date);
|
|
|
|
+ liveRoomUpdate.setLiveEndTime(date);
|
|
|
|
+ //销毁直播间后要关闭推广
|
|
|
|
+ liveRoomUpdate.setPopularize(0);
|
|
|
|
+
|
|
|
|
+ this.updateById(liveRoomUpdate);
|
|
|
|
|
|
//下架商品
|
|
//下架商品
|
|
liveGoodsMapperDao.updateStatus(room.getRoomUid(), null, false);
|
|
liveGoodsMapperDao.updateStatus(room.getRoomUid(), null, false);
|
|
@@ -917,8 +925,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
//获取直播间信息
|
|
//获取直播间信息
|
|
RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString());
|
|
RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString());
|
|
if (!speakerCache.isExists()) {
|
|
if (!speakerCache.isExists()) {
|
|
|
|
+
|
|
//没有主讲人信息则生成一个
|
|
//没有主讲人信息则生成一个
|
|
createSpeakerInfo(this.getById(roomVo.getId()), sysUser);
|
|
createSpeakerInfo(this.getById(roomVo.getId()), sysUser);
|
|
|
|
+
|
|
|
|
+ // 查询主播缓存信息
|
|
speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString());
|
|
speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString());
|
|
}
|
|
}
|
|
RoomSpeakerInfo speakerInfo = speakerCache.get();
|
|
RoomSpeakerInfo speakerInfo = speakerCache.get();
|
|
@@ -926,6 +937,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
speakerCache.set(speakerInfo);
|
|
speakerCache.set(speakerInfo);
|
|
//记录用户当前房间uid
|
|
//记录用户当前房间uid
|
|
redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid, 12L, TimeUnit.HOURS);
|
|
redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid, 12L, TimeUnit.HOURS);
|
|
|
|
+
|
|
return roomVo;
|
|
return roomVo;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -952,11 +964,30 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
if (roomTotalUser.containsKey(userId)) {
|
|
if (roomTotalUser.containsKey(userId)) {
|
|
//多次进入更新动态进入时间
|
|
//多次进入更新动态进入时间
|
|
userInfo = JSONObject.toJavaObject(JSONObject.parseObject(roomTotalUser.get(userId)), RoomUserInfoVo.class);
|
|
userInfo = JSONObject.toJavaObject(JSONObject.parseObject(roomTotalUser.get(userId)), RoomUserInfoVo.class);
|
|
|
|
+
|
|
|
|
+ ImLiveBroadcastRoomMember liveRoomMember = liveBroadcastRoomMemberService.lambdaQuery()
|
|
|
|
+ .eq(ImLiveBroadcastRoomMember::getTenantId, userInfo.getTenantId())
|
|
|
|
+ .eq(ImLiveBroadcastRoomMember::getRoomUid, imLiveBroadcastRoomVo.getRoomUid())
|
|
|
|
+ .eq(ImLiveBroadcastRoomMember::getUserId, userInfo.getUserId())
|
|
|
|
+ .list().stream().findFirst().orElse(null);
|
|
|
|
+
|
|
|
|
+ if (Objects.isNull(liveRoomMember)) {
|
|
|
|
+
|
|
|
|
+ // 初次进入房间
|
|
|
|
+ getLiveRoomUserInfo(userId, imLiveBroadcastRoomVo, now);
|
|
|
|
+ } else {
|
|
|
|
+ // 更新直播间用户信息
|
|
|
|
+ ImLiveBroadcastRoomMember roomMember = new ImLiveBroadcastRoomMember();
|
|
|
|
+ roomMember.setId(liveRoomMember.getId());
|
|
|
|
+ roomMember.setOnlineStatus(1);
|
|
|
|
+ roomMember.setLiveRoomStatus(1);
|
|
|
|
+
|
|
|
|
+ liveBroadcastRoomMemberService.updateById(roomMember);
|
|
|
|
+ }
|
|
|
|
+
|
|
} else {
|
|
} else {
|
|
//第一次进该房间 写入用户首次进入时间
|
|
//第一次进该房间 写入用户首次进入时间
|
|
- userInfo = getUserInfo(userId);
|
|
|
|
- userInfo.setFirstJoinTime(now);
|
|
|
|
- userInfo.setTotalViewTime(0);
|
|
|
|
|
|
+ userInfo = getLiveRoomUserInfo(userId, imLiveBroadcastRoomVo, now);
|
|
}
|
|
}
|
|
//查询主讲人信息
|
|
//查询主讲人信息
|
|
RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, imLiveBroadcastRoomVo.getSpeakerId().toString());
|
|
RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, imLiveBroadcastRoomVo.getSpeakerId().toString());
|
|
@@ -979,6 +1010,37 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
+ * 获取直播间用户信息
|
|
|
|
+ * @param userId 用户id
|
|
|
|
+ * @param imLiveBroadcastRoomVo 直播间信息
|
|
|
|
+ * @param now 当前时间
|
|
|
|
+ * @return RoomUserInfoVo
|
|
|
|
+ */
|
|
|
|
+ @NotNull
|
|
|
|
+ private RoomUserInfoVo getLiveRoomUserInfo(Integer userId, ImLiveBroadcastRoomVo imLiveBroadcastRoomVo, Date now) {
|
|
|
|
+
|
|
|
|
+ RoomUserInfoVo userInfo = getUserInfo(userId);
|
|
|
|
+ userInfo.setFirstJoinTime(now);
|
|
|
|
+ userInfo.setTotalViewTime(0);
|
|
|
|
+
|
|
|
|
+ // 记录直播间用户信息
|
|
|
|
+ ImLiveBroadcastRoomMember roomMember = new ImLiveBroadcastRoomMember();
|
|
|
|
+ roomMember.setTenantId(userInfo.getTenantId());
|
|
|
|
+ roomMember.setRoomUid(imLiveBroadcastRoomVo.getRoomUid());
|
|
|
|
+ roomMember.setUserId(userInfo.getUserId());
|
|
|
|
+ roomMember.setJoinTime(DateTime.now().toDate());
|
|
|
|
+ roomMember.setTotalTime(0);
|
|
|
|
+ roomMember.setOnlineStatus(1);
|
|
|
|
+ roomMember.setBanStatus(0);
|
|
|
|
+ roomMember.setLiveRoomStatus(1);
|
|
|
|
+
|
|
|
|
+ // 保存直播间用户信息
|
|
|
|
+ liveBroadcastRoomMemberService.save(roomMember);
|
|
|
|
+
|
|
|
|
+ return userInfo;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 开始直播-录像
|
|
* 开始直播-录像
|
|
*
|
|
*
|
|
* @param roomUid 房间uid
|
|
* @param roomUid 房间uid
|
|
@@ -1245,10 +1307,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).set(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);
|
|
|
|
|
|
+ ImLiveBroadcastRoom liveRoomUpdate = new ImLiveBroadcastRoom();
|
|
|
|
+ liveRoomUpdate.setLiveState(1);
|
|
|
|
+ liveRoomUpdate.setUpdatedTime(now);
|
|
|
|
+ liveRoomUpdate.setUpdatedBy(-2);
|
|
|
|
+ liveRoomUpdate.setSpeakerStatus(1);
|
|
|
|
+ baseMapper.updateById(liveRoomUpdate);
|
|
}
|
|
}
|
|
|
|
|
|
private Optional<ImLiveBroadcastRoomDto.RoomConfig> getRoomConfig(String roomConfig) {
|
|
private Optional<ImLiveBroadcastRoomDto.RoomConfig> getRoomConfig(String roomConfig) {
|