From aade43b553e5523fae648b9a24cc9830d0e12d77 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Mon, 12 Jul 2021 11:46:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=BB=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/GlobleSystemLogic.java | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java index 3855cbaef..1bbf965d5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java @@ -236,39 +236,37 @@ public class GlobleSystemLogic implements IEventHandler { } //这里为所有服务器的世界等级 Map worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO,"",String.class,Integer.class); - LOGGER.info("Global开始分组"); + LOGGER.info("跨服开始分组"); long lastHour = TimeUtils.getLastOrUnderHour(TimeUtils.now(), 1, 0, 0, true); - lastHour+=(2*TimeUtils.WEEK); + lastHour+=TimeUtils.WEEK; int expireTime =(int)((lastHour-TimeUtils.now())/1000); 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> zsetRevRangeWithScore = redisUtil.getZsetreverseRangeByRangeWithScores(RedisKey.SERVER_LEVEL_RANK, setting.getWorldLevel(), 999); -// int remain = zsetRevRangeWithScore.size() % 8; - //如果只有一个服到达条件,则不进行分组 - if(zsetRevRangeWithScore.size()>1){ - int index = 0; - int areaId = 1; - Map split = new HashMap<>(zsetRevRangeWithScore.size()); - for(ZSetOperations.TypedTuple data:zsetRevRangeWithScore){ - if(index>=setting.getServerNum()){ - if((zsetRevRangeWithScore.size()-areaId*setting.getServerNum())>setting.getServerNum()/2){ - areaId++; - } - index=0; - } - split.put(data.getValue(),areaId); - index++; + int index = 0; + int areaId = 1; + Map split = new HashMap<>(zsetRevRangeWithScore.size()); + for(ZSetOperations.TypedTuple data:zsetRevRangeWithScore){ + if(index>=setting.getServerNum()){ + if((zsetRevRangeWithScore.size()-areaId*setting.getServerNum())>setting.getServerNum()/2){ + areaId++; + } + index=0; } - redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split); - //发分组邮件 - split.keySet().forEach(server->redisUtil.putMapEntry(RedisKey.SERVER_SPLIT_MAIL_INFO,"",server,0)); + split.put(data.getValue(),areaId); + + index++; } + redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split); + //发分组邮件 + split.keySet().forEach(server->redisUtil.putMapEntry(RedisKey.SERVER_SPLIT_MAIL_INFO,"",server,0)); + //释放分布式锁 redisUtil.del("SERVER_SPLIT_REDIS_LOCK"); - LOGGER.info("Global分组结束"); + LOGGER.info("跨服分组结束"); // splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO,"",String.class,Integer.class); } //获取当前区服的跨服区组 -1为未在分组内