会长转移初版

back_recharge
lvxinran 2021-01-27 15:22:10 +08:00
parent 47c4bd6818
commit ef472bdbd2
3 changed files with 217 additions and 0 deletions

View File

@ -0,0 +1,8 @@
package com.ljsd.jieling.thread.task;
@FunctionalInterface
public interface GeneralTask {
void run();
}

View File

@ -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<Integer, GuildInfo> guildInfoMap = GuilidManager.guildInfoMap;
Set<Integer> chairmanChangeGuilds = new HashSet<>();
Set<Integer> releaseGuilds = new HashSet<>();
for(Map.Entry<Integer, GuildInfo> entry:guildInfoMap.entrySet()){
LOGGER.info("{}公会已完成离线检测",entry.getKey());
GuildInfo value = entry.getValue();
Map<Integer, Set<Integer>> members = value.getMembers();
//判断会长
Set<Integer> 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<TimeUnit.DAYS.toMillis(15)){
continue;
}
}else{
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
//看官员职位
Set<Integer> 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<TimeUnit.DAYS.toMillis(15)){
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Set<Integer> 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<TimeUnit.DAYS.toMillis(15)){
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
releaseGuilds.add(entry.getKey());
}
}
}

View File

@ -0,0 +1,111 @@
package com.ljsd.jieling.thread.task;
import com.ljsd.jieling.core.GlobalsDef;
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 util.TimeUtils;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @author lvxinran
* @date 2021/1/27
* @discribe
*/
public class GuildchangeTask implements GeneralTask{
private Set<Integer> chairmanChangeGuilds;
private Set<Integer> releaseGuilds;
public GuildchangeTask(Set<Integer> chairmanChangeGuilds, Set<Integer> releaseGuilds) {
this.chairmanChangeGuilds = chairmanChangeGuilds;
this.releaseGuilds = releaseGuilds;
}
@Override
public void run() {
long now = TimeUtils.now();
Map<Integer, GuildInfo> guildInfoMap = GuilidManager.guildInfoMap;
if(chairmanChangeGuilds!=null&&chairmanChangeGuilds.size()>0){
Iterator<Integer> iterator = chairmanChangeGuilds.iterator();
while(iterator.hasNext()){
int guildId = iterator.next();
GuildInfo guildInfo = guildInfoMap.get(guildId);
Map<Integer, Set<Integer>> members = guildInfo.getMembers();
Set<Integer> chairman= members.get(GlobalsDef.CHAIRMAN);
Set<Integer> 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<Integer> 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<Integer> 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;
}
}
}