Ver código fonte

增加首页推广相关功能

hgw 3 anos atrás
pai
commit
081396e542

+ 12 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDao;
@@ -392,8 +393,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     }
 
     public void roomDestroy(ImLiveBroadcastRoom room) {
-        //销毁房间要先关闭直播
-        closeLive(room.getRoomUid(),room.getSpeakerId());
         //10秒内同一个房间不能重复销毁-防重复销毁
         RBucket<Object> bucket = redissonClient.getBucket("IM:ROOMDESTROY:" + room.getRoomUid());
         if (!bucket.trySet(1, 10, TimeUnit.SECONDS)) {
@@ -404,7 +403,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         Integer speakerId = room.getSpeakerId();
 
         //获取所有直播间缓存数据并写入数据库后并清理缓存
-        insertAndCleanLiveData(roomUid, speakerId);
+        CompletableFuture.runAsync(() -> insertAndCleanLiveData(roomUid, speakerId));
         log.info("roomDestroy>>>> insertAndCleanLiveData {}", JSONObject.toJSONString(room));
 
         //将房间状态改为已销毁
@@ -440,6 +439,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
 
     //获取该直播间所有数据写入数据库-并清理缓存
     private void insertAndCleanLiveData(String roomUid, Integer speakerId) {
+        Date now = new Date();
         //总观看人数
         List<ImLiveBroadcastRoomMember> memberList = new ArrayList<>();
         //获取直播间所有人数据写入 im_live_broadcast_room_member
@@ -452,7 +452,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 member.setRoomUid(roomUid);
                 member.setUserId(v.getUserId());
                 member.setJoinTime(v.getFirstJoinTime());
-                member.setTotalTime(getLookMinutes(v.getDynamicLookTime(), v.getTotalViewTime()));
+                member.setTotalTime(getLookMinutes(v.getDynamicLookTime(), now, v.getTotalViewTime()));
                 memberList.add(member);
             }
         }
@@ -475,8 +475,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             liveData.setRoomUid(roomUid);
             liveData.setLikeNum(like);
             liveData.setTotalUserNum(CollectionUtils.isNotEmpty(memberList) ? memberList.size() : 0);
-            liveData.setUpdatedTime(new Date());
-            liveData.setLiveTime(getLookMinutes(speakerInfo.getStartLiveTime(), speakerInfo.getTotalLiveTime()));
+            liveData.setUpdatedTime(now);
+            liveData.setLiveTime(getLookMinutes(speakerInfo.getStartLiveTime(), now, speakerInfo.getTotalLiveTime()));
             liveBroadcastRoomDataService.save(liveData);
             //删除房间主讲人数据
             speakerCache.delete();
@@ -491,7 +491,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                     member.setTotalTime(speakerLiveTime);
                 }
             }
-            liveBroadcastRoomMemberService.getDao().insertBatch(memberList);
+            Lists.partition(memberList, 500)
+                    .forEach(list -> liveBroadcastRoomMemberService.getDao().insertBatch(list));
             //删除用户对应的直播间关系缓存
             memberList.stream()
                     .map(ImLiveBroadcastRoomMember::getUserId)
@@ -499,7 +500,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                     .forEach(id -> redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, id.toString())).delete());
         }
         //删除直播间所有用户数据
-        roomTotalUserCache.clear();
+        roomTotalUserCache.delete();
+        //删除在线用户数据
+        getOnlineUserCache(roomUid).delete();
     }
 
     /**
@@ -651,7 +654,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             return;
         }
         //记录用户当前房间uid
-        redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid);
+        redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid, 12L, TimeUnit.HOURS);
         //在线人员列表
         RMap<Integer, BaseRoomUserVo> onlineUserInfo = getOnlineUserCache(roomUid);
         //房间累计用户信息-指只要进入到该房间的用户都要记录