From ef472bdbd2ab9e330239812c6b654d31cfe21382 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Wed, 27 Jan 2021 15:22:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=9A=E9=95=BF=E8=BD=AC=E7=A7=BB=E5=88=9D?= =?UTF-8?q?=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/thread/task/GeneralTask.java | 8 ++ .../thread/task/GuildCheckOfflineTask.java | 98 ++++++++++++++++ .../jieling/thread/task/GuildchangeTask.java | 111 ++++++++++++++++++ 3 files changed, 217 insertions(+) create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/thread/task/GeneralTask.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/thread/task/GuildCheckOfflineTask.java create mode 100644 serverlogic/src/main/java/com/ljsd/jieling/thread/task/GuildchangeTask.java diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/GeneralTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/GeneralTask.java new file mode 100644 index 000000000..5dd5907fe --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/GeneralTask.java @@ -0,0 +1,8 @@ +package com.ljsd.jieling.thread.task; + +@FunctionalInterface +public interface GeneralTask { + + void run(); + +} diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/task/GuildCheckOfflineTask.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/GuildCheckOfflineTask.java new file mode 100644 index 000000000..f4e918a6c --- /dev/null +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/task/GuildCheckOfflineTask.java @@ -0,0 +1,98 @@ +package com.ljsd.jieling.thread.task; + +import com.ljsd.jieling.core.GlobalsDef; +import com.ljsd.jieling.globals.Global; +import com.ljsd.jieling.logic.dao.GuilidManager; +import com.ljsd.jieling.logic.dao.UserManager; +import com.ljsd.jieling.logic.dao.root.GuildInfo; +import com.ljsd.jieling.logic.dao.root.User; +import com.ljsd.jieling.thread.ThreadManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import util.TimeUtils; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +/** + * @author lvxinran + * @date 2021/1/25 + * @discribe + */ +public class GuildCheckOfflineTask implements GeneralTask { + private static final Logger LOGGER = LoggerFactory.getLogger(GuildCheckOfflineTask.class); + @Override + public void run() { + long now = TimeUtils.now(); + Map guildInfoMap = GuilidManager.guildInfoMap; + Set chairmanChangeGuilds = new HashSet<>(); + Set releaseGuilds = new HashSet<>(); + for(Map.Entry entry:guildInfoMap.entrySet()){ + LOGGER.info("{}公会已完成离线检测",entry.getKey()); + GuildInfo value = entry.getValue(); + Map> members = value.getMembers(); + //判断会长 + Set chairman = members.get(GlobalsDef.CHAIRMAN); + if(chairman==null||chairman.size()!=1){ + LOGGER.error("{}公会会长数据需要修理",entry.getKey()); + }else{ + int chairmanId= chairman.iterator().next(); + try { + User user = UserManager.getUser(chairmanId); + if(user==null||user.getPlayerInfoManager()==null){ + LOGGER.error("{}公会会长数据为空id=>{}",entry.getKey(),chairmanId); + }else{ + long offLineTime = user.getPlayerInfoManager().getOffLineTime(); + if(now-offLineTime> TimeUnit.DAYS.toMillis(7)){ + LOGGER.error("{}公会会长{}需要替换",entry.getKey(),chairmanId); + chairmanChangeGuilds.add(entry.getKey()); + if(now-offLineTime admins = members.get(GlobalsDef.ADMINISTRATORS); + for(int uid:admins){ + try { + User user = UserManager.getUser(uid); + if(user==null||user.getPlayerInfoManager()==null){ + LOGGER.error("{}公会官员数据需要修理==>{}",entry.getKey(),uid); + }else{ + long offLineTime = user.getPlayerInfoManager().getOffLineTime(); + if(now-offLineTime member = members.get(GlobalsDef.ADMINISTRATORS); + for(int uid:member) { + try { + User user = UserManager.getUser(uid); + if(user==null||user.getPlayerInfoManager()==null){ + LOGGER.error("{}公会会员数据需要修理==>{}",entry.getKey(),uid); + }else{ + long offLineTime = user.getPlayerInfoManager().getOffLineTime(); + if(now-offLineTime chairmanChangeGuilds; + + private Set releaseGuilds; + + public GuildchangeTask(Set chairmanChangeGuilds, Set releaseGuilds) { + this.chairmanChangeGuilds = chairmanChangeGuilds; + this.releaseGuilds = releaseGuilds; + } + + @Override + public void run() { + long now = TimeUtils.now(); + Map guildInfoMap = GuilidManager.guildInfoMap; + if(chairmanChangeGuilds!=null&&chairmanChangeGuilds.size()>0){ + Iterator iterator = chairmanChangeGuilds.iterator(); + while(iterator.hasNext()){ + int guildId = iterator.next(); + GuildInfo guildInfo = guildInfoMap.get(guildId); + Map> members = guildInfo.getMembers(); + Set chairman= members.get(GlobalsDef.CHAIRMAN); + Set admin = members.get(GlobalsDef.ADMINISTRATORS); + CompareValue compareValue = new CompareValue(); + int type = 0; + if(admin!=null&&admin.size()>0){ + getChangeUid(now,admin,compareValue); + type = GlobalsDef.ADMINISTRATORS; + } + + if(compareValue.getUid()==0){ + Set member = members.get(GlobalsDef.MEMBER); + getChangeUid(now,member,compareValue); + type = GlobalsDef.MEMBER; + } + if(compareValue.getUid()!=0){ + //会长转移 + int chairMan = chairman.iterator().next(); + guildInfo.removeMember(GlobalsDef.CHAIRMAN,chairMan); + guildInfo.addMembers(GlobalsDef.CHAIRMAN,compareValue.getUid()); + guildInfo.removeMember(type,compareValue.getUid()); + guildInfo.addMembers(GlobalsDef.MEMBER,chairMan); + } + } + } + } + + private void getChangeUid(long now,Set member,CompareValue value){ + for(int oneAdmin:member){ + try { + User user = UserManager.getUser(oneAdmin); + long offLineTime = user.getPlayerInfoManager().getOffLineTime(); + if(now-offLineTime> TimeUnit.DAYS.toMillis(7)){ + continue; + } + if(value.getUid()==0){ + value.setUid(oneAdmin); + value.setForce(user.getPlayerInfoManager().getMaxForce()); + }else{ + if(user.getPlayerInfoManager().getMaxForce()>value.getForce()){ + value.setUid(oneAdmin); + value.setForce(user.getPlayerInfoManager().getMaxForce()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + class CompareValue{ + private int uid; + + private int force; + + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public int getForce() { + return force; + } + + public void setForce(int force) { + this.force = force; + } + } +}