开服冲榜活动,单个排行榜结束保存数据

back_recharge
duhui 2022-11-10 17:11:50 +08:00
parent fce4cfe8c6
commit 998ab5ce14
4 changed files with 95 additions and 18 deletions

View File

@ -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;
}

View File

@ -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<ZSetOperations.TypedTuple<String>> 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<ZSetOperations.TypedTuple<String>> 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<String> item : rankInfo) {
int uid = Integer.parseInt(item.getValue());

View File

@ -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:无

View File

@ -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;
}