增加合服后离线榜单信息的处理

main
grimm 2025-05-20 13:59:57 +08:00
parent 27befe257c
commit 344d7d0803
2 changed files with 104 additions and 1 deletions

View File

@ -476,6 +476,7 @@ 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 Set<String> worldDeathPathCacChe = new HashSet<>();

View File

@ -65,10 +65,57 @@ public class RankRewardLogic {
//重置榜单结算时间顺序表,用于结算奖励时使用
this.resetTimeList(e.getType());
}
}
//处理合服数据
this.composeServerRankReward(diff);
}
/**
* 线,,
*/
public void composeServerRankReward(int diff){
String key = RedisKey.RANK_REWARD_SLAVE_SERVERS + RedisKey.Delimiter_colon + GameApplication.serverId;
String slaveServers = (String)RedisUtil.getInstence().get(key);
if(slaveServers == null || slaveServers.isEmpty()){
return;
}
String[] servers = slaveServers.split(",");
if(servers.length <=0){
return;
}
for(String server:servers){
//是主服,不处理
String serverId = String.valueOf(GameApplication.serverId);
if(server.equals(serverId)){
continue;
}
for(RankRewardEunm e : RankRewardEunm.values()){
String slaveKey = server + RedisKey.Delimiter_colon + e.getRedisKey();
String masterKey = GameApplication.serverId + RedisKey.Delimiter_colon + e.getRedisKey();
Map<Integer, Map<Integer,Integer>> map = RedisUtil.getInstence().getMapValues(slaveKey);
if(map != null && map.size() > 0){
for(int time : map.keySet()){
//失效了,不添加并清除redis信息
if(time < diff){
RedisUtil.getInstence().hdel(slaveKey, String.valueOf(time));
continue;
}
Map<Integer,Integer> users = map.get(time);
if(users != null && users.size() > 0){
//添加榜单备份信息,并保存新数据到redis,但是不重置榜单结算信息,最后统重置
this.composeAddRankMark(e.getType(),time,masterKey,users,true,false);
}
}
}
}
}
//重置时间排行榜
for(RankRewardEunm e : RankRewardEunm.values()){
this.resetTimeList(e.getType());
}
//清除要合并的从服信息,防止下次再合并
RedisUtil.getInstence().del(key);
}
/**
*
* @param type
@ -113,6 +160,60 @@ public class RankRewardLogic {
}
}
/**
*
* @param type
* @param time
* @param users
* @param save
* @param reset
*/
public void composeAddRankMark(int type, int time, String key,Map<Integer,Integer> users,boolean save,boolean reset) {
if(!rankMarks.containsKey(type)) {
Map<Integer,Map<Integer,Integer>> map = new HashMap<Integer, Map<Integer, Integer>>();
map.put(time, users);
rankMarks.put(type, map);
if(save){
RedisUtil.getInstence().putMap(key, String.valueOf(time),users);
}
if(reset){
this.resetTimeList(type);
}
return;
}
Map<Integer, Map<Integer, Integer>> map = rankMarks.get(type);
if(map == null) {
map = new HashMap<Integer, Map<Integer, Integer>>();
map.put(time, users);
rankMarks.put(type, map);
if(save){
RedisUtil.getInstence().putMap(key, String.valueOf(time),users);
}
if(reset){
this.resetTimeList(type);
}
return;
}
if(map.containsKey(time)){//同一个时间key,合并数据,并保存合并后的users
Map<Integer,Integer> masterUsers = map.get(time);
if(masterUsers == null){
masterUsers = new HashMap<Integer,Integer>();
}
masterUsers.putAll(users);
if(save){
RedisUtil.getInstence().putMap(key, String.valueOf(time),masterUsers);
}
}else{
map.put(time, users);
if(save){
RedisUtil.getInstence().putMap(key, String.valueOf(time),users);
}
}
if(reset){
this.resetTimeList(type);
}
}
/**
* ,
*/
@ -200,6 +301,7 @@ public class RankRewardLogic {
return null;
}
/**
*
* @param user