diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index 2549f4628..e0b70f067 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -1464,34 +1464,30 @@ public class RedisUtil { */ public String getKey(String type,String key,boolean judge) { String result = null; - if (!judge) { - result = type + RedisKey.Delimiter_colon + key; - } else if ( - RedisKey.PLAYER_INFO_CACHE.equals(type) || RedisKey.FAMILY_INFO.equals(type) || + if (!judge || RedisKey.PLAYER_INFO_CACHE.equals(type) || RedisKey.FAMILY_INFO.equals(type) || RedisKey.PIDGIDTEMP.equals(type) || RedisKey.SERVER_WORLDLEVE_INFO.equals(type) || RedisKey.FAMILY_RED_PACKAGE.equals(type) || "red_remain_list".equals(type) || - RedisKey.FAMILY_RED_PACKAGE_INCRE_ID.equals(type) || /*RedisKey.GUILD_FORCE_RANK.equals(type) ||*/ + RedisKey.FAMILY_RED_PACKAGE_INCRE_ID.equals(type) || RedisKey.CROSS_SERVER_GROUP.equals(type) || "red_already_list".equals(type) || RedisKey.CAR_DEALY_GUILD_FIGHT_PEOPLE_NUM.equals(type) || RedisKey.SERVER_SPLIT_INFO.equals(type) || RedisKey.FAMILY_LOGS.equals(type) || RedisKey.SERVER_SPLIT_MAIL_INFO.equals(type) || 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.TOKEN.equals(type) || RedisKey.USER_SERVER_INFO.equals(type) || - RedisKey.CDKEY.equals(type) || RedisKey.ServerArenaJob.equals(type) || - RedisKey.CROSS_SERVER_GROUP.equals(type) - ) { + RedisKey.CDKEY.equals(type) || RedisKey.ServerArenaJob.equals(type)) + { result = type + RedisKey.Delimiter_colon + key; - } else if (!RedisKey.newAreaCacChe.contains(type) && !RedisKey.rankCacChe.contains(type)) { + } + else if (!RedisKey.newAreaCacChe.contains(type) && !RedisKey.rankCacChe.contains(type)) + { if (key.length() == 8) { Integer serverId = RedisUtil.getInstence().getObject(RedisKey.CUser_ServerId_Key, key, Integer.class, GlobalsDef.REDIS_OVER_TIME_DAY * 10); - if (serverId != null && !AreaManager.getInstance().checkServerIdAllowPermit(serverId)) { - result = serverId + RedisKey.Delimiter_colon + type + RedisKey.Delimiter_colon + key; - } else if (serverId != null) { + boolean bol = !AreaManager.getInstance().checkServerIdAllowPermit(serverId); + if (serverId != null || bol) { result = serverId + RedisKey.Delimiter_colon + type + RedisKey.Delimiter_colon + key; } } } - if (RedisKey.PLAYER_INFO_CACHE.equals(type) || RedisKey.FAMILY_INFO.equals(type) || RedisKey.PIDGIDTEMP.equals(type) || RedisKey.SERVER_WORLDLEVE_INFO.equals(type) || RedisKey.SERVER_SPLIT_INFO.equals(type) || RedisKey.GUILD_RED_PACKAGE_RANK.equals(type) || @@ -1501,10 +1497,11 @@ public class RedisUtil { RedisKey.CROSS_YUXULUNDAO_RANK.equals(type) || RedisKey.CROSS_YUXULUNDAO_ROBOT_INFO.equals(type) || RedisKey.CROSS_YUXULUNDAO_RECORD.equals(type) || RedisKey.CROSS_YUXULUNDAO_RANK_PERSON.equals(type) || RedisKey.CROSS_LINGMAISECRET_INFO.equals(type) || RedisKey.CROSS_LINGMAISECRET_RECORD.equals(type) - || RedisKey.CROSS_LINGMAI_RANK_PERSON.equals(type) - ) { - return type + RedisKey.Delimiter_colon + key; + || RedisKey.CROSS_LINGMAI_RANK_PERSON.equals(type)) + { + result = type + RedisKey.Delimiter_colon + key; } + if (result == null) { result = AreaManager.areaId + RedisKey.Delimiter_colon + type + RedisKey.Delimiter_colon + key; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/OpenServerCompeteRankActivity.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/OpenServerCompeteRankActivity.java index 48ddf28b8..3f8de8f48 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/OpenServerCompeteRankActivity.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/OpenServerCompeteRankActivity.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.activity; +import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.jbean.ActivityMission; import com.ljsd.jieling.jbean.ActivityProgressInfo; @@ -15,6 +16,7 @@ import config.SChongRank; import config.SChongRankInfo; import config.SErrorCodeEerverConfig; import config.SGlobalActivity; +import org.luaj.vm2.ast.Str; import org.springframework.data.redis.core.ZSetOperations; import util.TimeUtils; @@ -75,6 +77,64 @@ public class OpenServerCompeteRankActivity extends AbstractActivity { return rankEndTime-TimeUtils.now(); } + /** + * 判断活动是否开启 + * @param rankType 排行榜类型 + * @return + */ + public boolean isOpen(int rankType){ + SChongRankInfo info = SChongRankInfo.getMap().getOrDefault(id,new HashMap<>()).get(rankType); + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); + if (info == null || activity == null){ + return false; + } + long startTime = ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0, 1); + long rankStartTime = startTime + info.getOpenTime()*1000L; + long rankEndTime = startTime + info.getCloseTime()*1000L; + long now = TimeUtils.now(); + + return now >= rankStartTime && now < rankEndTime; + } + + + /** + * 获取发送时间: 单位/秒 + * @param rankType 排行榜类型 + * @return + */ + public int getCleanRankTime(int rankType){ + SChongRankInfo info = SChongRankInfo.getMap().getOrDefault(id,new HashMap<>()).get(rankType); + SGlobalActivity activity = SGlobalActivity.getsGlobalActivityMap().get(id); + if (info == null || activity == null){ + return 0; + } + int endTime = (int)(ToolsUtil.getTimeLong(activity.getStartTimeLong(),activity.getEndTimeLong(),activity.getTime(),0, 2)/1000); + return endTime-TimeUtils.nowInt(); + } + + /** + * 备份排行榜 + * @param rankType + * @param rankInfo + */ + private boolean backRank(int rankType,Set> rankInfo){ + try { + SChongRankInfo chongRankInfo = SChongRankInfo.getMap().get(id).get(rankType); + if (chongRankInfo == null){ + return false; + } + AbstractRank backRank = RankContext.getRankEnum(chongRankInfo.getBackRankType()); + + String key = RedisUtil.getInstence().getKey(backRank.getRedisKey(),""); + RedisUtil.getInstence().zsetAddAall(key,rankInfo); + int time = getCleanRankTime(rankType); + RedisUtil.getInstence().expire(key,time); + }catch (Exception e){ + LOGGER.error("===========================冲榜发奖备份排行榜报错:{}-{}-{}",id,rankType,e.getMessage()); + } + return true; + } + /** * 发奖 * @param rankType @@ -85,9 +145,15 @@ public class OpenServerCompeteRankActivity extends AbstractActivity { AbstractRank abstractRank = RankContext.getRankEnum(rankType); Set> rankInfo = abstractRank.getRankByKey("", 0, -1); if (rankInfo == null){ - LOGGER.info("===========================冲榜发奖提前结束,排行榜为null:{}-{}",id,rankType); + LOGGER.error("===========================冲榜发奖提前结束,排行榜数据为null:{}-{}",id,rankType); return; } + // 备份排行榜 + boolean backRankBol = backRank(rankType, rankInfo); + if (!backRankBol){ + LOGGER.error("===========================冲榜发奖提前结束,备份排行榜失败:{}-{}",id,rankType); + } + // 遍历发奖 int rank = 1; for (ZSetOperations.TypedTuple item : rankInfo) { int uid = Integer.parseInt(item.getValue()); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java index 29e4f9aca..102025a72 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankEnum.java @@ -40,6 +40,14 @@ public enum RankEnum { SOUL_SEAL_RANK(103, RedisKey.SOUL_SEAL_RANK,MainLevelRank::new,false),//魂印排行榜 + //***************************************** 以下开服冲榜活动保留数据排行榜 *****************************************// + BACK_HERO_STAR_RANK(100101,"BACK_HERO_STAR_RANK",MainLevelRank::new,false),//英雄星级排行榜 + BACK_MAIN_LEVEL_RANK(1003,"BACK_MAIN_LEVEL_RANK", MainLevelRank::new,false),//关卡排行榜 + BACK_FORCE_CURR_RANK(10022,"BACK_FORCE_CURR_RANK",ForceCurrRank::new,false),//战力排行榜 + BACK_EQUIP_SCORE_RANK(100102, "BACK_EQUIP_SCORE_RANK",MainLevelRank::new,false),//装备排行榜 + BACK_SOUL_SEAL_RANK(100103, "BACK_SOUL_SEAL_RANK",MainLevelRank::new,false),//魂印排行榜 + BACK_MONSTER_ATTACK_RANK(1004,"BACK_MONSTER_ATTACK_RANK",MonsterAttackRank::new,false),//心魔排行榜 + BACK_SHAN_HE_SHE_JI_STAR_RANK(10030,"BACK_SHAN_HE_SHE_JI_STAR_RANK",ShanHeSheJiTuStarRank::new,false),//山河社稷星星排行榜 //***************************************** 以下为跨服排行榜 *****************************************// GUILD_RED_PACKAGE_RANK(13,RedisKey.GUILD_RED_PACKAGE_RANK,GuildRedPackageRank::new,true),//param1:红包总价格 param2:无 param3:无 diff --git a/tablemanager/src/main/java/config/SChongRankInfo.java b/tablemanager/src/main/java/config/SChongRankInfo.java index 68c49f245..85f568cb5 100644 --- a/tablemanager/src/main/java/config/SChongRankInfo.java +++ b/tablemanager/src/main/java/config/SChongRankInfo.java @@ -13,6 +13,8 @@ public class SChongRankInfo implements BaseConfig { private int rankType; + private int backRankType; + private int globalActivity; private int openTime; @@ -51,7 +53,11 @@ public class SChongRankInfo implements BaseConfig { return rankType; } - public int getOpenTime() { + public int getBackRankType() { + return backRankType; + } + + public int getOpenTime() { return openTime; }