|
@@ -0,0 +1,97 @@
|
|
|
+package com.zhentao.information.cache;
|
|
|
+
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 群成员缓存管理类
|
|
|
+ * 用于缓存群ID和群成员ID的映射关系
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+public class GroupMemberCache {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 群ID和群成员ID列表的映射关系
|
|
|
+ * key: 群ID
|
|
|
+ * value: 群成员ID列表
|
|
|
+ */
|
|
|
+ private final Map<Long, List<Long>> groupMemberMap = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新群成员缓存
|
|
|
+ * @param groupId 群ID
|
|
|
+ * @param memberIds 群成员ID列表
|
|
|
+ */
|
|
|
+ public void updateGroupMembers(Long groupId, List<Long> memberIds) {
|
|
|
+ groupMemberMap.put(groupId, memberIds);
|
|
|
+ log.info("群 {} 的成员缓存已更新,成员数:{}", groupId, memberIds.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取群成员列表
|
|
|
+ * @param groupId 群ID
|
|
|
+ * @return 群成员ID列表
|
|
|
+ */
|
|
|
+ public List<Long> getGroupMembers(Long groupId) {
|
|
|
+ return groupMemberMap.get(groupId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加群成员
|
|
|
+ * @param groupId 群ID
|
|
|
+ * @param userId 用户ID
|
|
|
+ */
|
|
|
+ public void addGroupMember(Long groupId, Long userId) {
|
|
|
+ List<Long> members = groupMemberMap.get(groupId);
|
|
|
+ if (members != null && !members.contains(userId)) {
|
|
|
+ members.add(userId);
|
|
|
+ log.info("用户 {} 已添加到群 {} 的成员缓存", userId, groupId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 移除群成员
|
|
|
+ * @param groupId 群ID
|
|
|
+ * @param userId 用户ID
|
|
|
+ */
|
|
|
+ public void removeGroupMember(Long groupId, Long userId) {
|
|
|
+ List<Long> members = groupMemberMap.get(groupId);
|
|
|
+ if (members != null) {
|
|
|
+ members.remove(userId);
|
|
|
+ log.info("用户 {} 已从群 {} 的成员缓存移除", userId, groupId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断用户是否在群中
|
|
|
+ * @param groupId 群ID
|
|
|
+ * @param userId 用户ID
|
|
|
+ * @return 是否在群中
|
|
|
+ */
|
|
|
+ public boolean isUserInGroup(Long groupId, Long userId) {
|
|
|
+ List<Long> members = groupMemberMap.get(groupId);
|
|
|
+ return members != null && members.contains(userId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有群成员映射
|
|
|
+ * @return 群成员映射Map
|
|
|
+ */
|
|
|
+ public Map<Long, List<Long>> getAllGroupMembers() {
|
|
|
+ return groupMemberMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 清除群成员缓存
|
|
|
+ * @param groupId 群ID
|
|
|
+ */
|
|
|
+ public void clearGroupMembers(Long groupId) {
|
|
|
+ groupMemberMap.remove(groupId);
|
|
|
+ log.info("群 {} 的成员缓存已清除", groupId);
|
|
|
+ }
|
|
|
+}
|