会长转移初版
parent
47c4bd6818
commit
ef472bdbd2
|
@ -0,0 +1,8 @@
|
|||
package com.ljsd.jieling.thread.task;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface GeneralTask {
|
||||
|
||||
void run();
|
||||
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue