| 
					
				 | 
			
			
				@@ -44,6 +44,7 @@ import com.ym.mec.util.http.HttpUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.collections.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.jetbrains.annotations.NotNull; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.joda.time.DateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.redisson.api.RBucket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.redisson.api.RLock; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -590,19 +591,26 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         log.info("roomDestroy>>>> insertAndCleanLiveData {}", JSONObject.toJSONString(room)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //将房间状态改为已销毁 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ImLiveBroadcastRoom liveRoomUpdate = new ImLiveBroadcastRoom(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        liveRoomUpdate.setId(room.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        room.setRoomState(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        room.setLiveState(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        liveRoomUpdate.setRoomState(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        liveRoomUpdate.setLiveState(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Integer userId = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             userId = getSysUser().getId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 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); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -917,8 +925,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取直播间信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         RBucket<RoomSpeakerInfo> speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!speakerCache.isExists()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //没有主讲人信息则生成一个 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             createSpeakerInfo(this.getById(roomVo.getId()), sysUser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 查询主播缓存信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             speakerCache = getRoomSpeakerInfoCache(roomUid, userId.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         RoomSpeakerInfo speakerInfo = speakerCache.get(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -926,6 +937,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         speakerCache.set(speakerInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //记录用户当前房间uid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid, 12L, TimeUnit.HOURS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return roomVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -952,11 +964,30 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (roomTotalUser.containsKey(userId)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //多次进入更新动态进入时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             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 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //第一次进该房间 写入用户首次进入时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userInfo = getUserInfo(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userInfo.setFirstJoinTime(now); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            userInfo.setTotalViewTime(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userInfo = getLiveRoomUserInfo(userId, imLiveBroadcastRoomVo, now); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //查询主讲人信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1245,10 +1307,12 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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) { 
			 |