修改跨服相关逻辑

main
grimm 2025-06-21 19:04:02 +08:00
parent c0e8e00d0e
commit 1580d2adff
22 changed files with 335 additions and 121 deletions

View File

@ -2103,4 +2103,5 @@ public class TimeUtils {
return startOfWeek1.equals(startOfWeek2);
}
}

View File

@ -13,6 +13,7 @@ import com.ljsd.jieling.db.mongo.MongoUtil;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.ktbeans.ReportUtil;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.dao.ServerConfig;
import com.ljsd.jieling.logic.dao.root.GlobalSystemControl;
import com.ljsd.jieling.logic.rankReward.RankRewardLogic;
@ -95,6 +96,8 @@ public class GameApplication {
new WorldServerListListener().start();
new ReportUtil().start();
NetManager.getInstance().init();
//设置开服分组
GlobleSystemLogic.getInstence().getCrossGroup();
//控制台gm
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {

View File

@ -476,7 +476,9 @@ public class RedisKey {
public static final String USER_SIMPLE_INFO = "USER_SIMPLE_INFO";
public static final String DEFTRAINING_RANK_MARK = "DEFTRAINING_RANK_MARK";
public static final String F5_PRE_REWARD = "F5_PRE_REWARD";//F5谷歌预注册奖励
public static final String RANK_REWARD_SLAVE_SERVERS = "RANK_REWARD_SLAVE_SERVERS";//主服对应的从服服务器id集合,合并离线奖励用
public static final String RANK_REWARD_SLAVE_SERVERS = "RANK_REWARD_SLAVE_SERVERS";
public static final String CROSS_SERVER_GROUP = "CROSS_SERVER_GROUP";//
public static final String MAIL_REWARD_MARK = "MAIL_REWARD_MARK";// 邮件奖励
//public static Set<String> worldDeathPathCacChe = new HashSet<>();

View File

@ -1573,7 +1573,8 @@ public class RedisUtil {
||RedisKey.CROSS_ARENA_ROBOT_INFO.equals(type)||RedisKey.CROSS_SERVICE_ARENA.equals(type)
||RedisKey.WORLD_ARENA_RANK_MY_MATH.equals(type)||RedisKey.WORLD_ARENA_MY_PRON.equals(type)
||RedisKey.WORLD_ARENA_RRECORD.equals(type)||RedisKey.GLOBAL_DEATH_PATH_WORLD.equals(type)
||RedisKey.CUser_ServerId_Key.equals(type) || RedisKey.DEATH_PATH_STATUS.equals(type)) {
||RedisKey.CUser_ServerId_Key.equals(type) || RedisKey.DEATH_PATH_STATUS.equals(type)
||RedisKey.CROSS_SERVER_GROUP.equals(type)) {
return type + RedisKey.Delimiter_colon + key;
}
// if(RedisKey.familyKey.contains(type)){
@ -1715,4 +1716,42 @@ public class RedisUtil {
}
return results;
}
public <K,T> Map<K,T> getmapvaluekeyclass(String key, Class<K> keyClazz, Class<T> valueClazz){
Map<K,T> result = new HashMap<>();
Map<Object, Object> entries = redisTemplate.opsForHash().entries(key);
for(Map.Entry<Object,Object> item : entries.entrySet()){
Object key1 = item.getKey();
Object value = item.getValue();
result.put(gson.fromJson(gson.toJson(key1),keyClazz),gson.fromJson(value.toString(),valueClazz));
}
return result;
}
public <T> void putmap(String key, String mapKey, T value){
for (int i = 0; i < MAX_TRY_TIMES; i++) {
try {
redisTemplate.opsForHash().put(key,mapKey,gson.toJson(value));
return;
} catch (Exception e) {
TimeUtils.sleep(FAILED_SLEEP);
}
}
}
/**
*
*
* @param key
* @param time ()
*/
public void expireMills(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.MILLISECONDS);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -112,8 +112,17 @@ public class GetWorldArenaChallengeResponseHandler extends gtGBaseHandler<WorldP
}
public int getSplitInfo(int serverId) {
Map<String, Integer> splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO, String.class, Integer.class);
return splitInfo.getOrDefault(String.valueOf(serverId), -1);
Integer group = RedisUtil.getInstence().getMapValue(RedisKey.SERVER_SPLIT_INFO,"", String.valueOf(serverId), Integer.class);
// 当本地无跨服id时读取gm的跨服分组开服用
if (group == null){
Integer entry = RedisUtil.getInstence().getMapValue(RedisKey.CROSS_SERVER_GROUP, "", String.valueOf(serverId), Integer.class);
if (entry != null){
RedisUtil.getInstence().putMapEntry(RedisKey.SERVER_SPLIT_INFO, "", String.valueOf(serverId),entry);
group = entry;
}else {
group = -1;
}
}
return group;
}
}

View File

@ -179,61 +179,52 @@ public class GlobleSystemLogic implements IEventHandler {
}
//跨服竞技场服务器分组,跨服分组
public void doSplit() {
if (!GameApplication.serverProperties.isArenaCross()) {
public void doSplit(){
LOGGER.info("跨服分组验证处理");
if(!GameApplication.serverProperties.isArenaCross()){
LOGGER.error("跨服分组,测试服不做分组");
return;
}
RedisUtil redisUtil = RedisUtil.getInstence();
Object matched = redisUtil.get(RedisKey.MATCHED_SPLIT_KEY);
if (matched != null) {
if(matched!=null){
LOGGER.error("跨服分组获取key【MATCHED_SPLIT_KEY】失败, info{}", matched);
return;
}
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
//使用分布式锁,保证只有一个服来分组
boolean lock = redisUtil.lock("SERVER_SPLIT_REDIS_LOCK", TimeUtils.ONE_MINUTE * 2);
if (!lock) {
if(!lock){
//没有拿到锁直接返回
LOGGER.error("跨服分组,未获取到锁");
return;
}
//这里为所有服务器的世界等级
Map<String, Integer> worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO, "", String.class, Integer.class);
LOGGER.info("跨服开始分组");
// 周一零点时间戳,毫秒
long lastHour = TimeUtils.getLastOrUnderHour(TimeUtils.now(), 1, 0, 0, true);
lastHour += TimeUtils.WEEK;
int expireTime = (int) ((lastHour - TimeUtils.now()) / 1000);
redisUtil.set(RedisKey.MATCHED_SPLIT_KEY, String.valueOf(1), expireTime - 60);
// 加上七天,秒
lastHour = (lastHour + TimeUtils.WEEK)/1000;
// 当前时间
long expireTime = lastHour-TimeUtils.nowInt();
redisUtil.set(RedisKey.MATCHED_SPLIT_KEY,String.valueOf(1),expireTime-60);
//提前两分钟结算
redisUtil.set(RedisKey.MATCHED_VERSION, TimeUtils.getTimeStampYMD(System.currentTimeMillis()), expireTime - 120);
worldLevelMap.forEach((k, v) -> {
if (v > setting.getWorldLevel()) {
redisUtil.zsetAddOne(RedisKey.SERVER_LEVEL_RANK, k, v);
redisUtil.set(RedisKey.MATCHED_VERSION,TimeUtils.getTimeStampYMD(System.currentTimeMillis()),expireTime-120);
// 分组逻辑
Map<String, Integer> cross = redisUtil.getMapValues(RedisKey.CROSS_SERVER_GROUP, "", String.class, Integer.class);
Map<String, Integer> split = new HashMap<>();
// 遍历gm分组剔除所有分组id小于等于0的分组这些默认不跨服
for (Map.Entry<String, Integer> entry : cross.entrySet()) {
if (entry.getValue()<=0){
continue;
}
});
Set<ZSetOperations.TypedTuple<String>> zsetRevRangeWithScore = redisUtil.getZsetreverseRangeByRangeWithScores(RedisKey.SERVER_LEVEL_RANK, setting.getWorldLevel(), 999);
int index = 0;
int areaId = 1;
Map<String, Integer> split = new HashMap<>(zsetRevRangeWithScore.size());
for (ZSetOperations.TypedTuple<String> data : zsetRevRangeWithScore) {
if (index >= setting.getServerNum()) {
if ((zsetRevRangeWithScore.size() - areaId * setting.getServerNum()) > setting.getServerNum() / 2) {
areaId++;
}
index = 0;
}
split.put(data.getValue(), areaId);
index++;
split.put(entry.getKey(),entry.getValue());
}
redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO, "", split);
//发分组邮件
split.keySet().forEach(server -> redisUtil.putMapEntry(RedisKey.SERVER_SPLIT_MAIL_INFO, "", server, 0));
// 删除上期分组数据,并赋值新分组数据
redisUtil.remove(RedisKey.SERVER_SPLIT_INFO+RedisKey.Delimiter_colon);
redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split);
//释放分布式锁
redisUtil.del("SERVER_SPLIT_REDIS_LOCK");
LOGGER.info("跨服分组结束");
// splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO,"",String.class,Integer.class);
}
//获取当前区服的跨服区组 -1为未在分组内
@ -244,9 +235,16 @@ public class GlobleSystemLogic implements IEventHandler {
return -1;
}
Integer group = RedisUtil.getInstence().getMapValue(RedisKey.SERVER_SPLIT_INFO,"", String.valueOf(GameApplication.serverId), Integer.class);
// Map<String,Integer> groups = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO, String.class, Integer.class);
// Integer group = groups.get(String.valueOf(GameApplication.serverId));
// Integer group = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO, String.class, Integer.class).get(String.valueOf(GameApplication.serverId));
// 当本地无跨服id时读取gm的跨服分组开服用
if (group == null){
Integer entry = RedisUtil.getInstence().getMapValue(RedisKey.CROSS_SERVER_GROUP, "", String.valueOf(GameApplication.serverId), Integer.class);
if (entry != null){
RedisUtil.getInstence().putMapEntry(RedisKey.SERVER_SPLIT_INFO, "", String.valueOf(GameApplication.serverId),entry);
group = entry;
}else {
group = -1;
}
}
LOGGER.info("GameApplication.serverId={},group={}",GameApplication.serverId,group);
crossGroup = group == null ? -1 : group;
@ -264,7 +262,6 @@ public class GlobleSystemLogic implements IEventHandler {
Integer group = RedisUtil.getInstence().getMapValues(RedisKey.DeathPath_SERVER_SPLIT_INFO, String.class, Integer.class).get(String.valueOf(GameApplication.serverId));
LOGGER.info("GameApplication.serverId={},group={}",GameApplication.serverId,group);
crossGroup = group == null ? -1 : group;
return crossGroup;
}

View File

@ -15,6 +15,7 @@ import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
import com.ljsd.jieling.logic.GlobalDataManaager;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.GuildInfo;
@ -802,6 +803,48 @@ public class ArenaLogic {
//跨服竞技场结算 (跨服竞技场活动结束排行结算)(跨服竞技场邮件)
public void worldSendReward() {
// TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.World_Arena);
//
// if (null == timeControllerOfFunction) {
// return;
// }
// long diff = (System.currentTimeMillis() - timeControllerOfFunction.getStartTime()) / 1000;
//
// SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
//
// TreeMap<Integer, SSkyLadderReward> rewardMapByRank = SSkyLadderReward.rewardMapByRank;
// if (setting == null) {
// return;
// }
// if (diff >= setting.getBattleTime()[1] && diff < setting.getBattleTime()[1] + 50) {
// int myGroup = GlobleSystemLogic.getInstence().getCrossGroup();
// if (myGroup == 0) {
// return;
// }
// try {
// WorldProto.GetArenaRankRewardResponse response = WorldHelper.sendMessageToWorldWithResult(0, WorldProto.GetArenaRankRewardRequest.newBuilder().setGroupId(myGroup).build(), WorldProto.GetArenaRankRewardResponse.class);
// if (response == null || response.getRankInfoList().size() == 0) {
// return;
// }
// for (WorldProto.ArenaRank rank : response.getRankInfoList()) {
// int myRank = rank.getRank();
// //sendmail
// String title = SErrorCodeEerverConfig.getI18NMessage("SkyLadder_title");
// List<String> content = SErrorCodeEerverConfig.getI18NMessageNew("SkyLadder_txt", new Object[]{myRank});
//
// Map.Entry<Integer, SSkyLadderReward> entry = rewardMapByRank.floorEntry(myRank);
// String mailReward = ItemUtil.getMailReward(entry.getValue().getRankAwards());
// MailLogic.getInstance().sendMail(rank.getUid(), title, content, mailReward, TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
// //MailLogic.getInstance().sendMail(rank.getUid(), "跨服竞技场奖励", "跨服竞技场奖励", StringUtil.parseArrayToString(entry.getValue().getRankAwards()), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
// }
// } catch (Exception e) {
// LOGGER.error("world arena reward error", e);
// }
// }
}
public void worldSendRewardNew() {
TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.World_Arena);
if (null == timeControllerOfFunction) {
@ -816,10 +859,19 @@ public class ArenaLogic {
return;
}
if (diff >= setting.getBattleTime()[1] && diff < setting.getBattleTime()[1] + 50) {
int myGroup = WorldHelper.getGroupByServerId();
if (myGroup == 0) {
int myGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (myGroup <= 0) {
return;
}
long start = TimeUtils.now();
//分布式锁,保证一个组只有一个服进行初始化
String lockKey = "CROSS_ARENA_SEND_REWARD_LOCK:" + myGroup;
boolean lock = RedisUtil.getInstence().lock(lockKey, TimeUtils.ONE_HOUR);
if (!lock) {
LOGGER.error("跨服天梯发奖退出, 未获取到锁!耗时:{} ms, 当前时间:{}", TimeUtils.now() - start, TimeUtils.getTimeStamp(TimeUtils.now()));
return;
}
LOGGER.info("跨服天梯,开始发奖。。。");
try {
WorldProto.GetArenaRankRewardResponse response = WorldHelper.sendMessageToWorldWithResult(0, WorldProto.GetArenaRankRewardRequest.newBuilder().setGroupId(myGroup).build(), WorldProto.GetArenaRankRewardResponse.class);
if (response == null || response.getRankInfoList().size() == 0) {
@ -833,7 +885,7 @@ public class ArenaLogic {
Map.Entry<Integer, SSkyLadderReward> entry = rewardMapByRank.floorEntry(myRank);
String mailReward = ItemUtil.getMailReward(entry.getValue().getRankAwards());
MailLogic.getInstance().sendMail(rank.getUid(), title, content, mailReward, TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
MailLogic.getInstance().sendMailToRedis(rank.getUid(), title, content.get(0), mailReward, TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
//MailLogic.getInstance().sendMail(rank.getUid(), "跨服竞技场奖励", "跨服竞技场奖励", StringUtil.parseArrayToString(entry.getValue().getRankAwards()), TimeUtils.nowInt(), Global.MAIL_EFFECTIVE_TIME);
}
} catch (Exception e) {

View File

@ -56,7 +56,7 @@ public class ArenaWorldLogic {
}
public static void close() throws Exception {
int myGroup = WorldHelper.getGroupByServerId();
int myGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if(myGroup==0){
return;
}
@ -124,7 +124,7 @@ public class ArenaWorldLogic {
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
SGlobalSystemConfig globalSystemConfig = STableManager.getConfig(SGlobalSystemConfig.class).get(84);
int worldLevel = GlobleSystemLogic.getGloableWorldLeveCache(); //世界等级
int worldLevel = 0; //取消世界等级限制,这里设置999肯定大于配置的世界等级需求
boolean unLock = false; //true解锁false未解锁
int level = user.getPlayerInfoManager().getLevel(); //玩家等级

View File

@ -19,7 +19,7 @@ public class MailManager extends MongoBase {
return mailMap;
}
public void addMail(Mail mail) throws Exception {
public void addMail(Mail mail){
mail.init(mail.getRoleUid(), getMongoKey() + ".mailMap." + mail.getId());
updateString("mailMap." + mail.getId(), mail);
mailMap.put(mail.getId(), mail);

View File

@ -69,6 +69,8 @@ public class DeathPathLogic {
//跨服公会战 是否解锁 true解锁false未解锁
private boolean isUnlock = false;
//上次请求跨服公会战是否解锁的时间
private long isUnlockTime = 0;
//private BlockingQueue<DeathPathTask> tasks = new BlockingUniqueQueue<>();
private LinkedBlockingQueue<DeathPathTask> tasks = new LinkedBlockingQueue<>();
@ -106,6 +108,11 @@ public class DeathPathLogic {
}
public boolean isUnlock() {
long now = TimeUtils.now();
//1秒内多次请求取内存缓存
if( now - isUnlockTime < 1000 * 2) {
return this.isUnlock;
}
String redisKey = RedisKey.getKey(RedisKey.GLOBAL_DEATH_PATH_WORLD, RedisKey.DEATH_PATH_WORLD_UNLOCK, true);
String unlock = (String) RedisUtil.getInstence().get(redisKey);
boolean curIsReached;
@ -115,9 +122,13 @@ public class DeathPathLogic {
throw new RuntimeException(e);
}
if (unlock != null && unlock.equals("true") && curIsReached) {
return true;
this.isUnlock = true;
this.isUnlockTime = now;
return this.isUnlock;
}
return false;
this.isUnlock =false;
this.isUnlockTime = now;
return this.isUnlock;
}
/**
@ -525,7 +536,8 @@ public class DeathPathLogic {
//当前阵公会伤害 挑战之前 第一的guildId
Set<ZSetOperations.TypedTuple<String>> zSetReverseRangeWithScoresBefore;
if(isUnlock()) { //跨服
boolean isUnlock = isUnlock();
if(isUnlock) { //跨服
zSetReverseRangeWithScoresBefore = RedisUtil.getInstence().getZsetreverseRangeWithScoresWorld(RedisKey.GLOBAL_DEATH_PATH_WORLD + ":" + groupId() + ":" + RedisKey.DEATH_PATH_EVERY_GUILD_RANK, String.valueOf(pathId), 0, -1);
}else { //单服
AbstractRank guildRankBefore = RankContext.getRankEnum(RankEnum.DEATH_PATH_EVERY_GUILD_RANK.getType());
@ -565,7 +577,7 @@ public class DeathPathLogic {
FightRecordLogic.getInstance().addRecordMap(user,fightData);
//更新排行榜数据
tasks.offer(new DeathPathTask(uid, guildId, damage, pathId,groupId(),isUnlock()));
tasks.offer(new DeathPathTask(uid, guildId, damage, pathId,groupId(),isUnlock));
//挑战次数记录
RedisUtil.getInstence().increment(RedisKey.getKey(RedisKey.DEATH_PATH_CHALLENGE_COUNT,String.valueOf(uid),false)); //挑战次数
@ -852,7 +864,8 @@ public class DeathPathLogic {
AbstractRank guildTotalRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_GUILD_RANK.getType());
Set<ZSetOperations.TypedTuple<String>> zSetReverseRangeWithScores;
if(isUnlock()){
boolean isUnlock = isUnlock();
if(isUnlock){
zSetReverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScoresWorld(guildRank.getRedisKey(), String.valueOf(task.getPathId()), 0, 0);
}else{
zSetReverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(guildRank.getRedisKey(), String.valueOf(task.getPathId()), 0, 0);
@ -872,7 +885,7 @@ public class DeathPathLogic {
firstGuildId = Integer.valueOf(next.getValue());
doRankAdd(personRank,guildRank,task);
Set<ZSetOperations.TypedTuple<String>> currScores;
if(isUnlock()){
if(isUnlock){
currScores = RedisUtil.getInstence().getZsetreverseRangeWithScoresWorld(guildRank.getRedisKey(), String.valueOf(task.getPathId()), 0, 0);
}else{
currScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(guildRank.getRedisKey(), String.valueOf(task.getPathId()), 0, 0);
@ -941,7 +954,8 @@ public class DeathPathLogic {
int guildRank = getGuildRankByGuildId(guildId);
List<SGuildWarRewardBOX> list = null;
if (isUnlock()) { //跨服
boolean isUnlock = isUnlock();
if (isUnlock) { //跨服
list = SGuildWarRewardBOX.worldGuildWarRewardBoxMap.get(guildRank);
} else { //单服
list = SGuildWarRewardBOX.guildWarRewardBoxMap.get(guildRank);
@ -950,7 +964,7 @@ public class DeathPathLogic {
//SGuildWarRewardBOX表里有当前排行数据
if (list != null && list.size() > 0) {
Map<String, DeathReward> rewardBoxMap;
if (isUnlock()) { //跨服
if (isUnlock) { //跨服
rewardBoxMap = RedisUtil.getInstence().getMapValuesWorld(RedisKey.GLOBAL_DEATH_PATH_WORLD,groupId() + ":" + RedisKey.DEATH_PATH_REWARD_BOX + ":" + String.valueOf(guildRank), String.class, DeathReward.class); //kei= 公会排名 DEATH_PATH_REWARD_BOX=战果宝箱记录
} else { //单服
rewardBoxMap = RedisUtil.getInstence().getMapValues(RedisKey.DEATH_PATH_REWARD_BOX, String.valueOf(guildRank), String.class, DeathReward.class); //kei= 公会排名 DEATH_PATH_REWARD_BOX=战果宝箱记录
@ -1000,7 +1014,7 @@ public class DeathPathLogic {
position++;
}
if (isUnlock()) { //跨服
if (isUnlock) { //跨服
RedisUtil.getInstence().putMapEntrys(RedisKey.GLOBAL_DEATH_PATH_WORLD, groupId() + ":" + RedisKey.DEATH_PATH_REWARD_BOX + ":" + String.valueOf(guildRank), rewardBoxMap);
} else { //单服
RedisUtil.getInstence().putMapEntrys(RedisKey.DEATH_PATH_REWARD_BOX, String.valueOf(guildRank), rewardBoxMap);
@ -1044,8 +1058,9 @@ public class DeathPathLogic {
int itemId = 0;
int itemCount = 0;
int[][] itemArray;
boolean isUnlock = isUnlock();
try {
if (isUnlock()) { //跨服
if (isUnlock) { //跨服
rewardBoxMap = RedisUtil.getInstence().getMapValuesWorld(RedisKey.GLOBAL_DEATH_PATH_WORLD,groupId() + ":" + RedisKey.DEATH_PATH_REWARD_BOX + ":" + String.valueOf(guildRank), String.class, DeathReward.class); //kei= 公会排名
} else { //单服
rewardBoxMap = RedisUtil.getInstence().getMapValues(RedisKey.DEATH_PATH_REWARD_BOX, String.valueOf(guildRank), String.class, DeathReward.class); //kei= 公会排名
@ -1092,8 +1107,7 @@ public class DeathPathLogic {
deathReward.setItemCount(itemCount);
rewardBoxMap.put(String.valueOf(position), deathReward);
if(isUnlock()){ //跨服
if(isUnlock){ //跨服
RedisUtil.getInstence().putMapEntrys(RedisKey.GLOBAL_DEATH_PATH_WORLD,groupId() + ":" + RedisKey.DEATH_PATH_REWARD_BOX + ":" + String.valueOf(guildRank), rewardBoxMap);
}else { //单服
RedisUtil.getInstence().putMapEntrys(RedisKey.DEATH_PATH_REWARD_BOX, String.valueOf(guildRank), rewardBoxMap);
@ -1264,12 +1278,12 @@ public class DeathPathLogic {
//公会战活动结束,结算发邮件
public void activityEndEmailReward() throws Exception {
RedisUtil redisUtil = RedisUtil.getInstence();
boolean isUnlock = isUnlock();
boolean haveGuildRank = false;
for (int i = 1; i <= 10; i++) {
AbstractRank everyGuildRank = null;
Set<ZSetOperations.TypedTuple<String>> guildRankSet = null;
if (isUnlock()) {
if (isUnlock) {
guildRankSet = redisUtil.getZsetreverseRangeWithScoresWorld(RedisKey.GLOBAL_DEATH_PATH_WORLD + ":" + groupId() + ":" + RedisKey.DEATH_PATH_EVERY_GUILD_RANK, String.valueOf(i), 0, -1);
} else {
everyGuildRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_EVERY_GUILD_RANK.getType());
@ -1310,7 +1324,7 @@ public class DeathPathLogic {
AbstractRank personRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_PERSON_RANK.getType()); //玩家总伤害 排行
Set<ZSetOperations.TypedTuple<String>> guildTotalRankSet;
Set<ZSetOperations.TypedTuple<String>> personRankSet;
if(isUnlock()){
if(isUnlock){
guildTotalRankSet = guildTotalRank.getRankByKeyWorld("", 0, -1);
personRankSet = personRank.getRankByKeyWorld("", 0, -1);
}else {
@ -1492,12 +1506,12 @@ public class DeathPathLogic {
*/
public List<Map.Entry<Integer, Integer>> getDeathPathFirstRank(){
Map<Integer, Integer> guildFirstNumMap = new TreeMap<>(); //十绝阵: Map<公会ID,占领公会个数> 占领:当前阵公会伤害排行第一
boolean isUnlock = isUnlock();
AbstractRank everyGuildRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_EVERY_GUILD_RANK.getType()); //当前阵公会伤害 排行
for(int i=1;i<=10;i++) {
String redisKey = null;
Set<ZSetOperations.TypedTuple<String>> zSetReverseRangeWithScores;
if(isUnlock()){ //跨服
if(isUnlock){ //跨服
redisKey = RedisKey.GLOBAL_DEATH_PATH_WORLD + ":" + groupId() + ":" + everyGuildRank.getRedisKey();
zSetReverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScoresWorld(redisKey, String.valueOf(i), 0, -1);
}else { //单服
@ -1534,7 +1548,7 @@ public class DeathPathLogic {
AbstractRank guildTotalRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_GUILD_RANK.getType()); //公会总伤害 排行
//Set<ZSetOperations.TypedTuple<String>> guildTotalRankSet = guildTotalRank.getRankByKey("", 0, -1); //获取 公会总伤害排行
Set<ZSetOperations.TypedTuple<String>> guildTotalRankSet; //获取 公会总伤害排行
if(isUnlock()){
if(isUnlock){
guildTotalRankSet = guildTotalRank.getRankByKeyWorld("", 0, -1); //获取 公会总伤害排行
}else{
guildTotalRankSet = guildTotalRank.getRankByKey("", 0, -1); //获取 公会总伤害排行
@ -1869,7 +1883,8 @@ public class DeathPathLogic {
public static void getDeathPathTotalPersonRank(ISession session, MessageTypeProto.MessageType messageType) throws Exception {
AbstractRank personRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_PERSON_RANK.getType()); //玩家总伤害 排行
Set<ZSetOperations.TypedTuple<String>> personRankSet = null;
if(DeathPathLogic.getInstance().isUnlock()){
boolean isUnlock = getInstance().isUnlock();
if(isUnlock){
int groupId = DeathPathLogic.getInstance().groupId();
personRankSet = personRank.getRankByKeyWorld("", 0, -1);
}else {
@ -1885,7 +1900,7 @@ public class DeathPathLogic {
int uid = Integer.parseInt(value);
long score = item.getScore().longValue();
if(getInstance().isUnlock()){ //跨服
if(isUnlock){ //跨服
String userName = null;
int head = 0;
int headFrame = 0;
@ -1989,12 +2004,12 @@ public class DeathPathLogic {
int rank = 1;
List<Family.DeathPathCurGuildCountRankInfo> rankInfoList = new ArrayList<>();
List<Map.Entry<Integer, Integer>> deathPathFirstNumRank = getDeathPathFirstRank();
boolean isUnlock = getInstance().isUnlock();
//获取公会总伤害 排行
AbstractRank guildTotalRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_GUILD_RANK.getType()); //公会总伤害 排行
//Set<ZSetOperations.TypedTuple<String>> guildTotalRankSet = guildTotalRank.getRankByKey("", 0, -1); //获取 公会总伤害排行
Set<ZSetOperations.TypedTuple<String>> guildTotalRankSet; //获取 公会总伤害排行
if(getInstance().isUnlock()){
if(isUnlock){
guildTotalRankSet = guildTotalRank.getRankByKeyWorld("", 0, -1); //获取 公会总伤害排行
}else {
guildTotalRankSet = guildTotalRank.getRankByKey("", 0, -1); //获取 公会总伤害排行
@ -2016,7 +2031,7 @@ public class DeathPathLogic {
}
}
if(getInstance().isUnlock()){ //跨服
if(isUnlock){ //跨服
//GuildInfo guildInfo = GuilidManager.guildInfoMap.get(guildId);
//获取会长名
//Set<Integer> chairMan = guildInfo.getMembers().get(GlobalsDef.CHAIRMAN);
@ -2128,12 +2143,12 @@ public class DeathPathLogic {
//公会战当前阵玩家伤害排行
public static void getDeathPathCurPersonRank(ISession session,int pathId,int type, MessageTypeProto.MessageType messageType) throws Exception {
boolean isUnlock = getInstance().isUnlock();
//当前阵1=个人排行2=公会排行3=本会排行
if(type == 1){ //当前阵1=个人排行
// AbstractRank personRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_EVERY_PERSON_RANK.getType()); //当前阵玩家伤害排行
AbstractRank personRank;
if(getInstance().isUnlock()){
if(isUnlock){
personRank = RankContext.getRankEnum(RankEnum.WORLD_DEATH_PATH_EVERY_PERSON_RANK.getType()); //当前阵玩家伤害排行
// personRank = RankContext.getRankEnum(RankEnum.DEATH_PATH_EVERY_PERSON_RANK.getType()); //当前阵玩家伤害排行
}else {
@ -2145,7 +2160,7 @@ public class DeathPathLogic {
}
//String redisKey = null;
Set<ZSetOperations.TypedTuple<String>> zSetReverseRangeWithScores = null;
if(getInstance().isUnlock()){ //跨服
if(isUnlock){ //跨服
String keyType = RedisKey.GLOBAL_DEATH_PATH_WORLD + ":"+ getInstance().groupId() +":"+ personRank.getRedisKey();
//redisKey = RedisKey.getKey(keyType,String.valueOf(i),true);
//redisKey = RedisKey.getKey(keyType,"",true);
@ -2167,7 +2182,7 @@ public class DeathPathLogic {
int uid = Integer.parseInt(value);
long score = item.getScore().longValue();
if (getInstance().isUnlock()) { //跨服
if (isUnlock) { //跨服
String userName = "";
int head = 0;
int headFrame = 0;
@ -2235,7 +2250,7 @@ public class DeathPathLogic {
String redisKey = null;
Set<ZSetOperations.TypedTuple<String>> zSetReverseRangeWithScores;
if (getInstance().isUnlock()) { //跨服
if (isUnlock) { //跨服
// redisKey = getInstance().groupId +":"+ guildRank.getRedisKey();
redisKey = RedisKey.GLOBAL_DEATH_PATH_WORLD + ":" + getInstance().groupId() + ":" + guildRank.getRedisKey();
zSetReverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScoresWorld(redisKey, String.valueOf(i), 0, -1);
@ -2253,7 +2268,7 @@ public class DeathPathLogic {
int guildId = Integer.parseInt(item.getValue());
long score = item.getScore().longValue();
if (getInstance().isUnlock()) { //跨服
if (isUnlock) { //跨服
GuildInfoCache guildInfoCache = getCrossGuild(guildId);
if (guildInfoCache != null) {
int chairmanUserId = guildInfoCache.getChairmanUserId();

View File

@ -428,6 +428,46 @@ public class MailLogic {
sendSystemMail(title, new ArrayList<>(), content, sendTime, reward, mailEffectiveTime, "system", TimeUtils.now(), "0");
}
/**
*
*/
public void sendMail(Mail mail){
int roleUid = mail.getRoleUid();
User user = UserManager.getUser(roleUid);
if (user != null){
user.getMailManager().addMail(mail);
LOGGER.info("领取redis标记的邮件==>uid={},mail={}",roleUid, mail);
MessageUtil.sendRedIndication(roleUid, GlobalsDef.MAIL_RED_TYPE);
}else {
LOGGER.error("用户为空error sendMail==>uid={},mail={}",roleUid,mail);
}
}
private void getMailToRedis(int uid){
String key = RedisKey.MAIL_REWARD_MARK + RedisKey.Delimiter_colon + uid;
Map<String, Mail> mailMap = RedisUtil.getInstence().getmapvaluekeyclass(key, String.class, Mail.class);
if (mailMap == null || mailMap.isEmpty()){
return;
}
for (Mail mail : mailMap.values()) {
sendMail(mail);
}
RedisUtil.getInstence().del(key);
}
/**
* redis
*/
public void sendMailToRedis(int uid, String title, String content, String reward, int sendTime, int mailEffectiveTime){
Mail mail = new Mail(uid,title,content,reward,sendTime, mailEffectiveTime,"system",Global.MAIL_TYPE_SYS);
String key = RedisKey.MAIL_REWARD_MARK + RedisKey.Delimiter_colon + uid;
String timeKey = String.valueOf(TimeUtils.now());
RedisUtil.getInstence().putmap(key,timeKey,mail);
// 有新邮件就增加10天的有效时间
RedisUtil.getInstence().expireMills(key, TimeUtils.ONE_DAY * 10);
LOGGER.info("redis邮件标记key:{}, time:{}, mail{}",key,timeKey,mail);
}
/**
*
*/

View File

@ -8,6 +8,7 @@ import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.exception.ErrorCode;
import com.ljsd.jieling.exception.ErrorCodeException;
import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.dao.PlayerInfoCache;
import com.ljsd.jieling.logic.dao.PlayerManager;
import com.ljsd.jieling.logic.dao.UserManager;
@ -86,7 +87,7 @@ public class RankLogic {
AbstractRank rank = RankContext.getRankEnum(type);
if (RankContext.isCrossRank(type)) {
//跨服
int myGroup = WorldHelper.getGroupByServerId();
int myGroup = GlobleSystemLogic.getInstence().getCrossGroup();
int protoId = session.getUid();

View File

@ -36,13 +36,13 @@ public class WorldHelper extends GlobalProtocolsManager {
/**
*
* redis
* redis
*
* @return
*/
public static int getGroupByServerId() {
long now = System.currentTimeMillis();
if(splitInfo == null || !TimeUtils.isSameWeek222(System.currentTimeMillis(), lastGetTime)) {
if(splitInfo == null || !TimeUtils.isSameDay(System.currentTimeMillis(), lastGetTime)) {
splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO, String.class,Integer.class);
lastGetTime = now;
}

View File

@ -11,6 +11,7 @@ import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.handler.map.MapLogic;
import com.ljsd.jieling.logic.DefTraining.DefTrainingLogic;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.SituationLogic;
import com.ljsd.jieling.logic.activity.ActivityLogic;
@ -35,6 +36,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import util.TimeUtils;
import java.util.Calendar;
/**
*
*/
@ -86,6 +89,8 @@ public class MinuteTask extends Thread {
try {
//计算世界等级
ActivityLogic.getInstance().checkSecretBoxSeason();
//跨服分组
everyMondayZeroClockTask();
} catch (Exception e) {
LOGGER.error("Exception::5=>{}", e.toString());
}
@ -112,6 +117,7 @@ public class MinuteTask extends Thread {
GuildFightLogic.familyFightStatus(); //修改公会战状态分钟定时器
QuestionLogic.getInstence().checkQuestion();
MailLogic.getInstance().checkReadyToMail();
everySundaySpecialClockTask();
} catch (Exception e) {
e.printStackTrace();
LOGGER.error("Exception::13=>{}", e.toString());
@ -169,6 +175,33 @@ public class MinuteTask extends Thread {
}
}
//每周一凌晨0点执行
public void everyMondayZeroClockTask() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (w == 1 && hour == 0 && minute == 0) {
LOGGER.info("everyMondayZeroClockTask start ...");
GlobleSystemLogic.getInstence().doSplit();
LOGGER.info("everyMondayZeroClockTask end ...");
}
}
public void everySundaySpecialClockTask() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (w == 0 && hour == 23 && minute == 0) {
LOGGER.info("everySundaySpecialClockTask worldArena send reward start ...");
//九州每周日23.00分执行
ArenaLogic.getInstance().worldSendRewardNew();
LOGGER.info("everySundaySpecialClockTask worldArena send reward end ...");
}
}
/**
* 线
*/

View File

@ -113,7 +113,7 @@ public class MessageUtil {
}
public static void sendRedIndication(int sendUid, int redType) throws Exception {
public static void sendRedIndication(int sendUid, int redType) {
ISession session = OnlineUserManager.sessionMap.get(sendUid);
if (session != null) {
PlayerInfoProto.RedPointInfo redPointInfo = PlayerInfoProto.RedPointInfo.newBuilder().setType(redType).build();

View File

@ -24,8 +24,8 @@ public class WorldArenaRewardJobHandler {
public void arenaDailyRewardJobHandler() throws Exception {
XxlJobHelper.log("worldArenaRewardJob start....");
ArenaLogic.getInstance().worldSendReward();
MongoUtil.getInstence().lastUpdate();
// ArenaLogic.getInstance().worldSendReward();
// MongoUtil.getInstence().lastUpdate();
XxlJobHelper.log("worldArenaRewardJob end....");
}
}

View File

@ -26,9 +26,9 @@ public class GetArenaRankRewardRequestHandler extends gtGBaseHandler<WorldProto
}
Map<Integer, ArenaEnemy> rankMap = ArenaLogic.ranInfo.get(proto.getGroupId());
for(Map.Entry<Integer, ArenaEnemy> entry:rankMap.entrySet()){
if(entry.getValue().getServerID()!=serverId){
continue;
}
// if(entry.getValue().getServerID()!=serverId){
// continue;
// }
response.addRankInfo(WorldProto.ArenaRank.newBuilder().setRank(entry.getKey()).setUid(entry.getValue().getEnemyId()).build());
}
return response.build();

View File

@ -1,6 +1,7 @@
package com.world.logic;
import com.ljsd.GameApplication;
import com.ljsd.jieling.db.redis.RedisKey;
import com.world.redis.RedisUtil;
import config.SGuildWarSetting;
@ -47,38 +48,51 @@ public class GlobalLogic {
*
*/
public void doSplit() {
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
RedisUtil redisUtil = RedisUtil.getInstence();
//这里为所有服务器的世界等级
Map<String,Integer> worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO+":",String.class,Integer.class);
LOGGER.info("跨服分组验证处理");
if(!GameApplication.serverProperties.isArenaCross()){
LOGGER.error("跨服分组,测试服不做分组");
return;
}
com.ljsd.jieling.db.redis.RedisUtil redisUtil = com.ljsd.jieling.db.redis.RedisUtil.getInstence();
Object matched = redisUtil.get(RedisKey.MATCHED_SPLIT_KEY);
if(matched!=null){
LOGGER.error("跨服分组获取key【MATCHED_SPLIT_KEY】失败, info{}", matched);
return;
}
//使用分布式锁,保证只有一个服来分组
boolean lock = redisUtil.lock("SERVER_SPLIT_REDIS_LOCK", TimeUtils.ONE_MINUTE * 2);
if(!lock){
//没有拿到锁直接返回
LOGGER.error("跨服分组,未获取到锁");
return;
}
LOGGER.info("Global跨服竞技场 开始分组");
LOGGER.info("跨服开始分组");
// 周一零点时间戳,毫秒
long lastHour = TimeUtils.getLastOrUnderHour(TimeUtils.now(), 1, 0, 0, true);
lastHour+=(1*TimeUtils.WEEK);
int expireTime =(int)((lastHour-TimeUtils.now())/1000);
// 加上七天,秒
lastHour = (lastHour + TimeUtils.WEEK)/1000;
// 当前时间
long expireTime = lastHour-TimeUtils.nowInt();
redisUtil.set(RedisKey.MATCHED_SPLIT_KEY,String.valueOf(1),expireTime-60);
//提前两分钟结算
redisUtil.set(RedisKey.MATCHED_VERSION,TimeUtils.getTimeStampYMD(System.currentTimeMillis()),expireTime-120);
worldLevelMap.forEach((k,v)->redisUtil.zsetAddOne(RedisKey.SERVER_LEVEL_RANK,k,v));
Set<ZSetOperations.TypedTuple<String>> zsetRevRangeWithScore = redisUtil.getZsetRevRangeWithScore(RedisKey.SERVER_LEVEL_RANK, setting.getWorldLevel(), 999);
int index = 0;
int areaId = 1;
Map<String,Integer> split = new HashMap<>(zsetRevRangeWithScore.size());
for(ZSetOperations.TypedTuple<String> data:zsetRevRangeWithScore){
if(index>=setting.getServerNum()){
if((zsetRevRangeWithScore.size()-areaId*setting.getServerNum())>setting.getServerNum()/2){
areaId++;
}
index=0;
// 分组逻辑
Map<String, Integer> cross = redisUtil.getMapValues(RedisKey.CROSS_SERVER_GROUP, "", String.class, Integer.class);
Map<String, Integer> split = new HashMap<>();
// 遍历gm分组剔除所有分组id小于等于0的分组这些默认不跨服
for (Map.Entry<String, Integer> entry : cross.entrySet()) {
if (entry.getValue()<=0){
continue;
}
split.put(data.getValue(),areaId);
index++;
split.put(entry.getKey(),entry.getValue());
}
redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,split);
LOGGER.info("Global跨服竞技场 分组结束");
splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO,String.class,Integer.class);
// 删除上期分组数据,并赋值新分组数据
redisUtil.remove(RedisKey.SERVER_SPLIT_INFO+RedisKey.Delimiter_colon);
redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split);
//释放分布式锁
redisUtil.del("SERVER_SPLIT_REDIS_LOCK");
LOGGER.info("跨服分组结束");
}
public int getSplitInfo(int serverId) {

View File

@ -16,6 +16,7 @@ import manager.STableManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.Cursor;
import util.TimeUtils;
import java.io.IOException;
import java.util.*;
@ -61,7 +62,7 @@ public class ArenaLogic {
}
public List<Integer> getAndUpdateAllServerGroup(){
Map<String, Integer> newServerSplit = RedisUtil.getInstence().getMapValues(com.world.redis.RedisKey.SERVER_SPLIT_INFO, String.class, Integer.class);
Map<String, Integer> newServerSplit = RedisUtil.getInstence().getMapValues(com.world.redis.RedisKey.SERVER_SPLIT_INFO+RedisKey.Delimiter_colon, String.class, Integer.class);
ArenaLogic.serverSplit = newServerSplit;
return new ArrayList<>(serverSplit.values().stream().distinct().collect(Collectors.toList()));
}
@ -95,7 +96,7 @@ public class ArenaLogic {
public static void initRank() throws Exception {
Map<String, Integer> serverSplit = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO, String.class, Integer.class);
Map<String, Integer> serverSplit = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO+RedisKey.Delimiter_colon, String.class, Integer.class);
serverSplit.forEach((s, integer) -> {
HashSet<String> strings = map.getOrDefault(integer, new HashSet<>());
strings.add(s);
@ -126,7 +127,6 @@ public class ArenaLogic {
//跨服竞技场开启调用:初始化数据
public void arenaWorldOpen() {
// if (TimeUtils.getDayOfWeek(time) == 5 && TimeUtils.getHourOfDay(time) == 23 && TimeUtils.getMiunte(time) == 30) {
LOGGER.info("跨服竞技场 进入新的一期");
onfinish();
LOGGER.info("-------onfinish---------");
@ -136,7 +136,7 @@ public class ArenaLogic {
//重新获取分组信息
// redisUtil.set(RedisKey.MATCHED_MY_VERSION, matched);
Map<String, Integer> serverSplit = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO, String.class, Integer.class);
Map<String, Integer> serverSplit = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO+RedisKey.Delimiter_colon, String.class, Integer.class);
serverSplit.forEach((s, integer) -> {
HashSet<String> strings = map.getOrDefault(integer, new HashSet<>());
strings.add(s);

View File

@ -5,6 +5,7 @@ import com.world.logic.arean.ArenaLogic;
import org.apache.dubbo.common.utils.NetUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import util.TimeUtils;
/**
* Author: zsx
@ -27,6 +28,12 @@ public class MinuteTask extends Thread {
ArenaLogic.getInstance().minCheckSave();
//每分钟检测服务器是否注册
serverRegister2ZkCheck();
long time = System.currentTimeMillis();
int w = TimeUtils.getWeekOfYear(time) - 1;
//每周五23:30开启跨服竞技场
if (w == 5 && TimeUtils.getHourOfDay(time) == 23 && TimeUtils.getMiunte(time) == 30) {
ArenaLogic.getInstance().arenaWorldOpen();
}
} catch (Exception e) {
LOGGER.error("e",e);
}

View File

@ -17,7 +17,7 @@ public class ArenaLogicCrossServerFightJobHandler {
public void arenaLogicCrossServerFightJob() throws Exception {
XxlJobHelper.log("arenaLogicCrossServerFightJob start....");
ArenaLogic.getInstance().arenaWorldOpen();
// ArenaLogic.getInstance().arenaWorldOpen();
XxlJobHelper.log("arenaLogicCrossServerFightJob end....");
}
}

View File

@ -9,8 +9,9 @@ import org.springframework.stereotype.Component;
public class EveryMondayZeroDoSplitHandler {
@XxlJob("globalArenaDoSplitJobHandler")
public void serverSplitJob() throws Exception {
//弃用xxljob的方法全部弃用
XxlJobHelper.log("serverSplitJob start....");
GlobalLogic.getInstance().doSplit();
// GlobalLogic.getInstance().doSplit();
XxlJobHelper.log("serverSplitJob end....");
}
}