diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/UserInOutRoomRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/UserInOutRoomRecordService.java index c3255662e..c8b3195b1 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/UserInOutRoomRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/room/UserInOutRoomRecordService.java @@ -4,6 +4,8 @@ import com.accompany.business.event.room.UserOutRoomAfterRecordEvent; import com.accompany.business.event.room.UserOutRoomEvent; import com.accompany.business.message.room.UserOutRoomMessage; import com.accompany.business.param.LeftChatRoomParam; +import com.accompany.business.service.user.UserInRoomService; +import com.accompany.business.vo.RoomVo; import com.accompany.common.redis.RedisKey; import com.accompany.core.model.Room; import com.accompany.sharding.mapper.UserInOutRoomRecordMapper; @@ -41,7 +43,10 @@ public class UserInOutRoomRecordService extends ServiceImpl userInRoomCurrentMap; - public Long getUserRoomRemainMillsTime(Long uid, Long roomUid, Date startTime, Date endTime){ + @Autowired + private UserInRoomService userInRoomService; + + public Long getUserRoomRemainMillsTime(Long uid, Long roomUid, Date startTime, Date endTime) { return baseMapper.getUserRoomRemainMillsTime(uid, roomUid, startTime, endTime); } @@ -49,68 +54,56 @@ public class UserInOutRoomRecordService extends ServiceImpl roomSet = redissonClient.getSet(RedisKey.user_in_out_room_record.getKey(uidStr, roomIdStr)); - - if (isEntreRoomAction(event)){ + if (isEntreRoomAction(event)) { if (null != roomUid) { userInRoomCurrentMap.fastPut(uid, roomUid); + userInRoomService.saveUserInRoomCache(uid, roomService.getRoomVoByUid(roomUid)); } - roomSet.add(timestamp); roomSet.expire(12, TimeUnit.HOURS); log.info("[进房间开始计算时间] {} {} {}", uid, roomId, timestamp); - roomService.ownerInRoom(leftChatRoomParam); - } else if (isLeaveRoomAction(event)){ + } else if (isLeaveRoomAction(event)) { Long entreTimestamp = null; - RLock lock = redissonClient.getLock(RedisKey.user_in_out_room_lock.getKey(uidStr, roomIdStr)); boolean locked = false; try { locked = lock.tryLock(3, TimeUnit.SECONDS); - Optional lastInRoom = roomSet.stream().filter(inTime -> timestamp.compareTo(inTime) > 0).max(Comparator.comparingLong(Long::longValue)); - if (!lastInRoom.isPresent()){ + if (!lastInRoom.isPresent()) { log.error("[出房间结束计算时间] 获取进房时间异常 {} {} {}", uid, roomId, timestamp); return; } - entreTimestamp = lastInRoom.get(); roomSet.remove(entreTimestamp); - - } catch (InterruptedException e){ + } catch (InterruptedException e) { log.error("[出房间结束计算时间] 获取进房时间锁超时 {} {} {}", uid, roomId, timestamp, e); } finally { - if (locked){ + if (locked) { lock.unlock(); } } - - if (null == entreTimestamp){ + if (null == entreTimestamp) { return; } - long remainMillisecond = timestamp - entreTimestamp; log.info("[出房间结束计算时间] {} {} {} {} {}", uid, roomId, entreTimestamp, timestamp, remainMillisecond); - userInRoomCurrentMap.fastRemove(uid); + userInRoomService.removeUserInRoomCache(uid); roomService.ownerOrSeqUserLeftRoom(leftChatRoomParam); - UserOutRoomMessage userOutRoomMessage = new UserOutRoomMessage(uid, roomUid, entreTimestamp, timestamp, remainMillisecond); applicationContext.publishEvent(new UserOutRoomEvent(userOutRoomMessage)); - //save UserInOutRoomRecord record = new UserInOutRoomRecord(); record.setUid(uid); @@ -120,20 +113,19 @@ public class UserInOutRoomRecordService extends ServiceImpl