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