From bb552471805229c1d1858294de3b6e794fd6ad0d Mon Sep 17 00:00:00 2001 From: grimm <1769111741@qq.com> Date: Sun, 27 Jul 2025 06:32:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E9=99=A4=E5=86=97=E4=BD=99=E5=85=AC?= =?UTF-8?q?=E4=BC=9A=E6=88=90=E5=91=98=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/dao/GuilidManager.java | 10 +++++++--- .../jieling/logic/dao/root/GuildInfo.java | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java index 2ce34d7..3431180 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java @@ -124,8 +124,8 @@ public class GuilidManager { for(GuildInfo guildInfo : guildInfoMap.values()){ clearGuildMember(guildInfo,now); } - LOGGER.info("清理冗余公会成员信息耗时:{}ms", System.currentTimeMillis() - now); MongoUtil.getInstence().lastUpdate(); + LOGGER.info("清理冗余公会成员信息耗时:{}ms", System.currentTimeMillis() - now); } /** @@ -147,6 +147,7 @@ public class GuilidManager { */ public static void clearGuildMember(GuildInfo guildInfo,long now){ Map> members = guildInfo.getMembers(); + boolean remove = false; for (Map.Entry> memberEntry : members.entrySet()) { Integer position = memberEntry.getKey(); //会长不处理 @@ -161,15 +162,18 @@ public class GuilidManager { long lastLoginTime = userTmp.getOffLineTime(); //离线超过一周,踢出公会,并清除内存 if((now - lastLoginTime) >= TimeUtils.WEEK){ - guildInfo.removeMember(guildInfo.getMemberType(userTmp.getId()), userTmp.getId()); + remove = guildInfo.removeMemberWithoutDb(guildInfo.getMemberType(userTmp.getId()), userTmp.getId()); continue; } } else { - guildInfo.removeMember(guildInfo.getMemberType(uidTmp), uidTmp); + remove = guildInfo.removeMemberWithoutDb(guildInfo.getMemberType(uidTmp), uidTmp); } } } } + if(remove){ + guildInfo.resetMembers(); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java index ffb3170..e4afdca 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java @@ -110,6 +110,25 @@ public class GuildInfo extends MongoBase { return remove; } + public boolean removeMemberWithoutDb(int type,int uid){ + boolean remove = members.get(type).remove(uid); + return remove; + } + + public void resetMembers(){ + int total = 0; + if(this.members != null){ + for (Map.Entry> memberEntry : members.entrySet()) { + Integer position = memberEntry.getKey(); + Set value = memberEntry.getValue(); + total += value.size(); + updateString("members." + position,value); + } + } + this.totalMembers = total; + updateString("totalMembers",totalMembers); + } + public int getMemberType(int targetUid) { for (Map.Entry> memberEntry : members.entrySet()) { Integer position = memberEntry.getKey();