Browse Source

修改直播间缓存序列化的方式,改为本地json序列话和反序列化

hgw 3 years ago
parent
commit
01d3458c46

+ 59 - 35
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -134,10 +134,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         if (room.getLiveState() == 2) {
             //如果直播结束了还是推广状态则将推广修改为取消
             if (room.getPopularize() == 1) {
-                ImLiveBroadcastRoom imLiveBroadcastRoom = new ImLiveBroadcastRoom();
-                imLiveBroadcastRoom.setId(room.getId());
-                imLiveBroadcastRoom.setPopularize(0);
-                this.updateById(imLiveBroadcastRoom);
+                this.update(Wrappers.<ImLiveBroadcastRoom>lambdaUpdate()
+                        .set(ImLiveBroadcastRoom::getPopularize, 0)
+                        .eq(ImLiveBroadcastRoom::getId, room.getId()));
             }
             throw new BizException("直播已结束!");
         }
@@ -302,6 +301,16 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     @Override
     public ImLiveBroadcastRoomVo queryPopularizeRoom() {
+        //查询该学生信息-获取分部
+        SysUser user = getSysUser();
+        //查询哪些分部无法推广直播间
+        String popularizeOrgan = sysConfigDao.findConfigValue("live_popularize_organ");
+        if (StringUtils.isNotBlank(popularizeOrgan)) {
+            List<String> organList = WrapperUtil.toList(popularizeOrgan);
+            if (organList.contains(user.getOrganId().toString())) {
+                return null;
+            }
+        }
         Map<String, Object> param = new HashMap<>();
         param.put("tenantId", TenantContextHolder.getTenantId());
         param.put("popularize", 1);
@@ -450,9 +459,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         //总观看人数
         List<ImLiveBroadcastRoomMember> memberList = new ArrayList<>();
         //获取直播间所有人数据写入 im_live_broadcast_room_member
-        RMap<Integer, RoomUserInfoVo> roomTotalUserCache = getTotalUserCache(roomUid);
+        RMap<Integer, String> roomTotalUserCache = getTotalUserCache(roomUid);
         if (roomTotalUserCache.isExists()) {
-            List<RoomUserInfoVo> roomTotalUser = new ArrayList<>(roomTotalUserCache.values());
+            List<RoomUserInfoVo> roomTotalUser = roomTotalUserCache.values().parallelStream()
+                    .map(a -> JSONObject.toJavaObject(JSONObject.parseObject(a), RoomUserInfoVo.class))
+                    .collect(Collectors.toList());
             for (RoomUserInfoVo v : roomTotalUser) {
                 ImLiveBroadcastRoomMember member = new ImLiveBroadcastRoomMember();
                 member.setTenantId(v.getTenantId());
@@ -570,22 +581,21 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             Integer userId = Integer.valueOf(userid);
 
             //从房间累计用户信息中查询该用户的信息
-            RMap<Integer, RoomUserInfoVo> roomTotalUser = getTotalUserCache(roomUid);
+            RMap<Integer, String> roomTotalUser = getTotalUserCache(roomUid);
             //该房间未查询到用户数据则不处理
             if (!roomTotalUser.isExists() && !roomTotalUser.containsKey(userId)) {
                 return;
             }
             //查询用户数据
-            RoomUserInfoVo userInfo = roomTotalUser.get(userId);
+            RoomUserInfoVo userInfo = JSONObject.toJavaObject(JSONObject.parseObject(roomTotalUser.get(userId)), RoomUserInfoVo.class);
             //如果有动态观看时间则证明主播开播过,需要计算当前用户观看时长
             if (Objects.nonNull(userInfo.getDynamicLookTime())) {
                 userInfo.setTotalViewTime(getLookMinutes(userInfo.getDynamicLookTime(), userInfo.getTotalViewTime()));
                 userInfo.setDynamicLookTime(null);
             }
-            roomTotalUser.fastPut(userId, userInfo);
-
+            roomTotalUser.fastPut(userId, JSONObject.toJSONString(userInfo));
             //查询在线人员列表
-            RMap<Integer, BaseRoomUserVo> onlineUserInfo = getOnlineUserCache(roomUid);
+            RMap<Integer, String> onlineUserInfo = getOnlineUserCache(roomUid);
             if (!onlineUserInfo.isExists()) {
                 return;
             }
@@ -701,16 +711,14 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         }
         //记录用户当前房间uid
         redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, userId.toString())).set(roomUid, 12L, TimeUnit.HOURS);
-        //在线人员列表
-        RMap<Integer, BaseRoomUserVo> onlineUserInfo = getOnlineUserCache(roomUid);
         //房间累计用户信息-指只要进入到该房间的用户都要记录
-        RMap<Integer, RoomUserInfoVo> roomTotalUser = getTotalUserCache(roomUid);
+        RMap<Integer, String> roomTotalUser = getTotalUserCache(roomUid);
         //判断是否第一次进房间
         RoomUserInfoVo userInfo;
         Date now = new Date();
         if (roomTotalUser.containsKey(userId)) {
             //多次进入更新动态进入时间
-            userInfo = roomTotalUser.get(userId);
+            userInfo = JSONObject.toJavaObject(JSONObject.parseObject(roomTotalUser.get(userId)), RoomUserInfoVo.class);
         } else {
             //第一次进该房间 写入用户首次进入时间
             userInfo = getUserInfo(userId);
@@ -726,9 +734,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 userInfo.setDynamicLookTime(now);
             }
         }
-        roomTotalUser.fastPut(userId, userInfo);
+        roomTotalUser.fastPut(userId, JSONObject.toJSONString(userInfo));
+        //在线人员列表
+        RMap<Integer, String> onlineUserInfo = getOnlineUserCache(roomUid);
         //进入房间写如在线人员列表
-        onlineUserInfo.fastPut(userId, userInfo);
+        onlineUserInfo.fastPut(userId, JSONObject.toJSONString(userInfo));
         //向直播间发送当前在线人数消息
 //        this.sendOnlineUserCount(roomUid, userId, count);
         log.info("joinRoom>>>> userInfo: {}", JSONObject.toJSONString(userInfo));
@@ -835,15 +845,17 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         //加锁-避免快速点击开启直播和关闭直后异步执行后直播数据错误
         boolean b = this.runIfLockCanGet(LIVE_LOOK_LOCK.replace(ROOM_UID, roomUid), () -> {
             //查询所有在直播间的用户并计算观看时长
-            RMap<Integer, RoomUserInfoVo> roomTotalUser = getTotalUserCache(roomUid);
+            RMap<Integer, String> roomTotalUser = getTotalUserCache(roomUid);
             if (!roomTotalUser.isExists()) {
                 return;
             }
             //查询在线人员列表
-            RMap<Integer, BaseRoomUserVo> onlineUserInfo = getOnlineUserCache(roomUid);
-            roomTotalUser.forEach((id, userInfo) -> {
+            RMap<Integer, String> onlineUserInfo = getOnlineUserCache(roomUid);
+            boolean onlineUserInfoExists = onlineUserInfo.isExists();
+            roomTotalUser.forEach((id, userInfoStr) -> {
+                RoomUserInfoVo userInfo = JSONObject.toJavaObject(JSONObject.parseObject(userInfoStr), RoomUserInfoVo.class);
                 //获取当前用户是否在房间状态 true在 false不在
-                if (onlineUserInfo.isExists() && onlineUserInfo.containsKey(id)) {
+                if (onlineUserInfoExists && onlineUserInfo.containsKey(id)) {
                     if (type.equals(1)) {
                         //开启直播后对当前在房间的用户写入观看时间
                         userInfo.setDynamicLookTime(new Date());
@@ -853,7 +865,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                     } else {
                         return;
                     }
-                    roomTotalUser.fastPut(id, userInfo);
+                    roomTotalUser.fastPut(id, JSONObject.toJSONString(userInfo));
                 }
             });
         }, 2, 1, TimeUnit.MINUTES);
@@ -1048,11 +1060,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     @Override
     public List<BaseRoomUserVo> queryRoomLimitOnlineUserInfo(String roomUid) {
-        RMap<Integer, BaseRoomUserVo> onlineUserCache = getOnlineUserCache(roomUid);
-        return onlineUserCache.values().stream()
-                .filter(Objects::nonNull)
-                .limit(200)
-                .collect(Collectors.toList());
+        RMap<Integer, String> onlineUserCache = getOnlineUserCache(roomUid);
+        return onlineUserCache.values().parallelStream()
+                        .map(a -> JSONObject.toJavaObject(JSONObject.parseObject(a), BaseRoomUserVo.class))
+                        .limit(200)
+                        .collect(Collectors.toList());
     }
 
     /**
@@ -1062,9 +1074,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     @Override
     public List<BaseRoomUserVo> queryRoomOnlineUserInfo(String roomUid) {
-        RMap<Integer, BaseRoomUserVo> onlineUserInfo = getOnlineUserCache(roomUid);
-        return onlineUserInfo.values().stream()
-                .filter(Objects::nonNull)
+        RMap<Integer, String> onlineUserInfo = getOnlineUserCache(roomUid);
+        return onlineUserInfo.values().parallelStream()
+                .map(a -> JSONObject.toJavaObject(JSONObject.parseObject(a), BaseRoomUserVo.class))
                 .collect(Collectors.toList());
     }
 
@@ -1074,17 +1086,29 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      * @param roomUid 直播间uid
      */
     private List<RoomUserInfoVo> queryTotalRoomUserInfo(String roomUid) {
-        RMap<Integer, RoomUserInfoVo> roomTotalUser = getTotalUserCache(roomUid);
-        return roomTotalUser.values().stream()
-                .filter(Objects::nonNull)
+        RMap<Integer, String> roomTotalUser = getTotalUserCache(roomUid);
+        return roomTotalUser.values().parallelStream()
+                .map(a -> JSONObject.toJavaObject(JSONObject.parseObject(a), RoomUserInfoVo.class))
                 .collect(Collectors.toList());
     }
 
-    private RMap<Integer, BaseRoomUserVo> getOnlineUserCache(String roomUid) {
+    /**
+     * 获取直播间在线用户信息缓存
+     *
+     * @param roomUid 直播间uid
+     * @return RMap key:userId value:BaseRoomUserVo -> jsonToString
+     */
+    private RMap<Integer, String> getOnlineUserCache(String roomUid) {
         return redissonClient.getMap(LIVE_ROOM_ONLINE_USER_LIST.replace(ROOM_UID, roomUid));
     }
 
-    private RMap<Integer, RoomUserInfoVo> getTotalUserCache(String roomUid) {
+    /**
+     * 获取直播间所有用户信息缓存
+     *
+     * @param roomUid 直播间uid
+     * @return RMap key:userId value:RoomUserInfoVo -> jsonToString
+     */
+    private RMap<Integer, String> getTotalUserCache(String roomUid) {
         return redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid));
     }
 

+ 5 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampServiceImpl.java

@@ -28,6 +28,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -58,6 +59,7 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
     /**
      * 新建训练营
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(TempLittleArtistTrainingCampDto dto) {
         SysUser user = getUser();
@@ -81,6 +83,7 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
     /**
      * 修改训练营
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void update(TempLittleArtistTrainingCampDto dto) {
         SysUser user = getUser();
@@ -101,12 +104,13 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
     /**
      * 删除训练营
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void delete(Integer id) {
         TempLittleArtistTrainingCamp entity = Optional.ofNullable(id)
                 .map(this::getById)
                 .orElseThrow(() -> new BizException("训练营不存在"));
-        entity.setDelFlag(0);
+        entity.setDelFlag(1);
         this.updateById(entity);
     }
 

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempLittleArtistTrainingCampUserRelationServiceImpl.java

@@ -8,7 +8,6 @@ import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampUserRelationDao;
 import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation;
 import com.ym.mec.biz.dal.vo.TempCampUserQualificationsVo;
 import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.TempLittleArtistTrainingCampService;
 import com.ym.mec.biz.service.TempLittleArtistTrainingCampUserRelationService;
 import com.ym.mec.common.exception.BizException;
 import org.apache.commons.lang3.StringUtils;