跨服十绝阵修改

back_recharge
duhui 2021-07-30 15:03:17 +08:00
parent 66c2617d7f
commit 931db8e069
12 changed files with 110 additions and 66 deletions

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.db.redis; package com.ljsd.jieling.db.redis;
import com.ljsd.jieling.db.mongo.AreaManager; import com.ljsd.jieling.db.mongo.AreaManager;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@ -434,7 +435,4 @@ public class RedisKey {
// } // }
} }
} }

View File

@ -984,10 +984,12 @@ public class RedisUtil {
return null; return null;
} }
public Long getZSetreverseRank(String type,String key, String value){ public Long getZSetreverseRank(String type,String key, String value){
String rkey = getKey(type,key); return getZSetreverseRank(type,key,value,true);
}
public Long getZSetreverseRank(String type,String key, String value, boolean choice){
String rkey = getKey(type,key,choice);
for (int i = 0; i < MAX_TRY_TIMES; i++) { for (int i = 0; i < MAX_TRY_TIMES; i++) {
try { try {
Long rank = redisTemplate.opsForZSet().reverseRank(rkey, value); Long rank = redisTemplate.opsForZSet().reverseRank(rkey, value);
@ -1003,9 +1005,12 @@ public class RedisUtil {
return -1L; return -1L;
} }
public Double getZSetScore(String type,String key, String value){ public Double getZSetScore(String type,String key, String value){
String rkey = getKey(type, key); return getZSetScore(type,key,value,true);
}
public Double getZSetScore(String type,String key, String value, boolean choice){
String rkey = getKey(type, key, choice);
for (int i = 0; i < MAX_TRY_TIMES; i++) { for (int i = 0; i < MAX_TRY_TIMES; i++) {
try { try {
Double score = redisTemplate.opsForZSet().score(rkey, value); Double score = redisTemplate.opsForZSet().score(rkey, value);
@ -1034,12 +1039,20 @@ public class RedisUtil {
} }
public void incrementZsetScore(String type,String key, String value, int changeScore){ public void incrementZsetScore(String type,String key, String value, int changeScore){
incrementZsetScore(type,key,value,(double)(changeScore)); incrementZsetScore(type,key,value,(double)(changeScore), true);
} }
public void incrementZsetScore(String type,String key, String value, double changeScore){ public void incrementZsetScore(String type,String key, String value, int changeScore, boolean choice){
String rkey = getKey(type, key); incrementZsetScore(type,key,value,(double)(changeScore), choice);
}
public void incrementZsetScore(String type,String key, String value, double changeScore){
incrementZsetScore(type,key,value,changeScore, true);
}
public void incrementZsetScore(String type,String key, String value, double changeScore, boolean choice){
String rkey = getKey(type, key,choice);
for (int i = 0; i < MAX_TRY_TIMES; i++) { for (int i = 0; i < MAX_TRY_TIMES; i++) {
try { try {
redisTemplate.opsForZSet().incrementScore(rkey,value,changeScore); redisTemplate.opsForZSet().incrementScore(rkey,value,changeScore);

View File

@ -252,6 +252,10 @@ public class GlobleSystemLogic implements IEventHandler {
index++; index++;
} }
// 跨服排行榜处理
CrossRankManager.getInstance().cleanCrossRank();
CrossRankManager.getInstance().crossRankHandle(true);
redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split); redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split);
//发分组邮件 //发分组邮件
split.keySet().forEach(server->redisUtil.putMapEntry(RedisKey.SERVER_SPLIT_MAIL_INFO,"",server,0)); split.keySet().forEach(server->redisUtil.putMapEntry(RedisKey.SERVER_SPLIT_MAIL_INFO,"",server,0));

View File

@ -6,6 +6,9 @@ import com.ljsd.jieling.db.mongo.core.CServerInfo;
import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.dao.GuildInfoCache; import com.ljsd.jieling.logic.dao.GuildInfoCache;
import com.ljsd.jieling.logic.rank.RankContext;
import com.ljsd.jieling.logic.rank.RankEnum;
import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank;
import com.ljsd.jieling.tools.Utils; import com.ljsd.jieling.tools.Utils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -90,26 +93,30 @@ public class CrossDeathPathLogic {
//操作每个关的公会、个人数据 //操作每个关的公会、个人数据
BigDecimal decimal = new BigDecimal(String.valueOf(damage)).divide(new BigDecimal(String.valueOf(Math.pow(10,15)))); BigDecimal decimal = new BigDecimal(String.valueOf(damage)).divide(new BigDecimal(String.valueOf(Math.pow(10,15))));
long everyGuildChangeScore = (long)damage*1000; long everyGuildChangeScore = (long)damage*1000;
if(redisUtil.getZSetScore(groupId+":"+RedisKey.DEATH_PATH_EVERY_PERSON_RANK,String.valueOf(pathId), String.valueOf(uid))==-1){ AbstractRank everyPerson = RankContext.getRankEnum(RankEnum.DEATH_PATH_EVERY_PERSON_RANK.getType());
if(redisUtil.getZSetScore(everyPerson.getCrossRedisKey(),String.valueOf(pathId), String.valueOf(uid), false)==-1){
//记录人数操作 //记录人数操作
everyGuildChangeScore = everyGuildChangeScore+1; everyGuildChangeScore = everyGuildChangeScore+1;
} }
String before = firstGuild(redisUtil, groupId, pathId); String before = firstGuild(redisUtil, groupId, pathId);
redisUtil.incrementZsetScore(groupId+":"+RedisKey.DEATH_PATH_EVERY_GUILD_RANK,String.valueOf(pathId),String.valueOf(guildId), everyGuildChangeScore); AbstractRank everyGuild = RankContext.getRankEnum(RankEnum.DEATH_PATH_EVERY_GUILD_RANK.getType());
redisUtil.incrementZsetScore(everyGuild.getCrossRedisKey(),String.valueOf(pathId),String.valueOf(guildId), everyGuildChangeScore, false);
String after = firstGuild(redisUtil, groupId, pathId); String after = firstGuild(redisUtil, groupId, pathId);
AbstractRank totalGuild = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_GUILD_RANK.getType());
if(!before.equals(after)){ if(!before.equals(after)){
decimal = decimal.add(new BigDecimal(1)); decimal = decimal.add(new BigDecimal(1));
if(!"".equals(before)){ if(!"".equals(before)){
redisUtil.incrementZsetScore(groupId+":"+RedisKey.DEATH_PATH_TOTAL_GUILD_RANK,"",before, -1); redisUtil.incrementZsetScore(totalGuild.getCrossRedisKey(),"",before, -1,false);
} }
} }
AbstractRank totalPerson = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_PERSON_RANK.getType());
// 个人单个排行 // 个人单个排行
redisUtil.incrementZsetScore(groupId+":"+RedisKey.DEATH_PATH_EVERY_PERSON_RANK,String.valueOf(pathId),String.valueOf(uid), damage); redisUtil.incrementZsetScore(everyPerson.getCrossRedisKey(),String.valueOf(pathId),String.valueOf(uid), damage,false);
//操作总的个人伤害 //操作总的个人伤害
redisUtil.incrementZsetScore(groupId+":"+RedisKey.DEATH_PATH_TOTAL_PERSON_RANK,"",String.valueOf(uid), damage); redisUtil.incrementZsetScore(totalPerson.getCrossRedisKey(),"",String.valueOf(uid), damage,false);
//操作总的工会伤害 //操作总的工会伤害
redisUtil.incrementZsetScore(groupId+":"+RedisKey.DEATH_PATH_TOTAL_GUILD_RANK,"",String.valueOf(guildId), decimal.doubleValue()); redisUtil.incrementZsetScore(totalGuild.getCrossRedisKey(),"",String.valueOf(guildId), decimal.doubleValue(),false);
// 结算标识设置 // 结算标识设置
redisUtil.hset(RedisKey.DEATH_PATH_EVERY_OVER_HASH,String.valueOf(GameApplication.serverId),1); redisUtil.hset(RedisKey.DEATH_PATH_EVERY_OVER_HASH,String.valueOf(GameApplication.serverId),1);
} }
@ -157,9 +164,10 @@ public class CrossDeathPathLogic {
*/ */
public Map<Integer,Integer> crossDeathPathReward(int groupId,int serverId){ public Map<Integer,Integer> crossDeathPathReward(int groupId,int serverId){
if(TimeUtils.getHourOfDay()!=0){ if(TimeUtils.getHourOfDay()!=0){
return new HashMap<>(); return new HashMap<>(1);
} }
Set<ZSetOperations.TypedTuple<String>> values = RedisUtil.getInstence().getZsetreverseRangeWithScores(groupId+":" + RedisKey.DEATH_PATH_TOTAL_GUILD_RANK, "", 0, -1); AbstractRank totalGuild = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_GUILD_RANK.getType());
Set<ZSetOperations.TypedTuple<String>> values = RedisUtil.getInstence().getZsetreverseRangeWithScores(totalGuild.getCrossRedisKey(), "", 0, -1, false);
HashMap<Integer, Integer> hashMap = new HashMap<>(); HashMap<Integer, Integer> hashMap = new HashMap<>();
int rank =0; int rank =0;
for(ZSetOperations.TypedTuple<String> value:values){ for(ZSetOperations.TypedTuple<String> value:values){
@ -175,7 +183,7 @@ public class CrossDeathPathLogic {
Map<Object, Object> hmget = RedisUtil.getInstence().hmget(RedisKey.DEATH_PATH_EVERY_OVER_HASH); Map<Object, Object> hmget = RedisUtil.getInstence().hmget(RedisKey.DEATH_PATH_EVERY_OVER_HASH);
if (hmget == null || hmget.size() < 1) { if (hmget == null || hmget.size() < 1) {
Cursor<String> cursor = RedisUtil.getInstence().scan(groupId + ":DEATH_PATH*", -1); Cursor<String> cursor = RedisUtil.getInstence().scan("DEATH_PATH*"+groupId+":*", -1);
while (cursor.hasNext()) { while (cursor.hasNext()) {
//找到一次就添加一次 //找到一次就添加一次
String next = cursor.next(); String next = cursor.next();

View File

@ -305,14 +305,16 @@ public class DeathPathLogic {
for (int i = 1; i <= 10; i++) { for (int i = 1; i <= 10; i++) {
String key; String key;
// 是否是跨服 // 是否是跨服
Set<ZSetOperations.TypedTuple<String>> zSetReverseRangeWithScores;
if (groupId > 0) { if (groupId > 0) {
key = groupId + ":" + guildRank.getRedisKey(); key = guildRank.getCrossRedisKey();
zSetReverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(key, String.valueOf(i), 0, 0,false);
LOGGER.info("========================获取十绝阵内部信息,跨服:{}",uid); LOGGER.info("========================获取十绝阵内部信息,跨服:{}",uid);
} else { } else {
key = guildRank.getRedisKey(); key = guildRank.getRedisKey();
zSetReverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(key, String.valueOf(i), 0, 0,true);
LOGGER.info("========================获取十绝阵内部信息,本地:{}",uid); LOGGER.info("========================获取十绝阵内部信息,本地:{}",uid);
} }
Set<ZSetOperations.TypedTuple<String>> zSetReverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(key, String.valueOf(i), 0, 0);
Iterator<ZSetOperations.TypedTuple<String>> iterator = zSetReverseRangeWithScores.iterator(); Iterator<ZSetOperations.TypedTuple<String>> iterator = zSetReverseRangeWithScores.iterator();
if (!iterator.hasNext()) { if (!iterator.hasNext()) {
continue; continue;
@ -425,7 +427,6 @@ public class DeathPathLogic {
LOGGER.info("==================跨服十绝阵上榜处理:{}",task.toString()); LOGGER.info("==================跨服十绝阵上榜处理:{}",task.toString());
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("==================跨服十绝阵上榜异常:{}",e.getMessage()); LOGGER.error("==================跨服十绝阵上榜异常:{}",e.getMessage());
e.printStackTrace();
} }
return; return;
} }
@ -551,15 +552,16 @@ public class DeathPathLogic {
} }
//根据排名进行随机奖励 //根据排名进行随机奖励
int rank; int rank;
String key; AbstractRank rankEnum = RankContext.getRankEnum(RankEnum.DEATH_PATH_TOTAL_GUILD_RANK.getType());
if(groupId>0){ if(groupId>0){
key = groupId + ":" + RedisKey.DEATH_PATH_TOTAL_GUILD_RANK; String key = rankEnum.getCrossRedisKey();
rank = RedisUtil.getInstence().getZSetreverseRank(key, "", String.valueOf(user.getPlayerInfoManager().getGuildId()),false).intValue();
LOGGER.info("==================获取十绝阵奖励,跨服,分组:{},玩家:{}",groupId,uid); LOGGER.info("==================获取十绝阵奖励,跨服,分组:{},玩家:{}",groupId,uid);
}else { }else {
key = RedisKey.DEATH_PATH_TOTAL_GUILD_RANK; String key = rankEnum.getRedisKey();
rank = RedisUtil.getInstence().getZSetreverseRank(key, "", String.valueOf(user.getPlayerInfoManager().getGuildId()),true).intValue();
LOGGER.info("==================获取十绝阵奖励,本地,分组:{},玩家:{}",groupId,uid); LOGGER.info("==================获取十绝阵奖励,本地,分组:{},玩家:{}",groupId,uid);
} }
rank = RedisUtil.getInstence().getZSetreverseRank(key, "", String.valueOf(user.getPlayerInfoManager().getGuildId())).intValue();
if(rank==-1||rank==0){ if(rank==-1||rank==0){
throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE); throw new ErrorCodeException(ErrorCode.SERVER_SELF_DEFINE);
} }

View File

@ -11,6 +11,7 @@ import com.ljsd.jieling.globals.BIReason;
import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.ktbeans.ReportEventEnum; import com.ljsd.jieling.ktbeans.ReportEventEnum;
import com.ljsd.jieling.ktbeans.ReportUtil; import com.ljsd.jieling.ktbeans.ReportUtil;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.MailingSystem; import com.ljsd.jieling.logic.dao.root.MailingSystem;
@ -424,6 +425,19 @@ public class MailLogic {
MongoUtil.getInstence().getMyMongoTemplate().saveWithoutMongoRoot(serverConfigTmp); MongoUtil.getInstence().getMyMongoTemplate().saveWithoutMongoRoot(serverConfigTmp);
MailLogic.getInstance().sendSystemMail(title,new ArrayList<>(),content,nowTime,"",30*24*60*60,"system",TimeUtils.now(),"0"); MailLogic.getInstance().sendSystemMail(title,new ArrayList<>(),content,nowTime,"",30*24*60*60,"system",TimeUtils.now(),"0");
sendCrossServerIndication();
}
/**
* 线
*/
public void sendCrossServerIndication(){
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
int result = crossGroup == -1 ? 0 : 1;
PlayerInfoProto.IsCrossResponse build = PlayerInfoProto.IsCrossResponse.newBuilder().setIsCross(result).build();
for(ISession session:OnlineUserManager.sessionMap.values()){
MessageUtil.sendIndicationMessage(session.getUid(),build);
}
} }
/** /**

View File

@ -43,35 +43,11 @@ public class CrossRankManager {
*/ */
private long time = 0L; private long time = 0L;
/**
*
*/
// public void isDataHandle(){
// LOGGER.info("==========================开始验证是否需要进行跨服数据处理");
// // 获取全部服务器分组信息
// Map<Integer, Integer> groupValues = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO, "", Integer.class, Integer.class);
// if (groupValues == null || groupValues.isEmpty()){
// return;
// }
// // 获取本服id和本服的分组信息
// int serverId = GameApplication.serverId;
// Integer groupId = groupValues.get(serverId);
// if (groupId == null || groupId <= 0){
// return;
// }
// // stream聚合 筛选条件value==groupId, 正序返回
// List<Integer> list = groupValues.entrySet().stream().filter(v -> v.getValue().equals(groupId)).map(Map.Entry::getKey).sorted().collect(Collectors.toList());
// // 缓存服务器列表,其他地方会用
// serverListByGroup.clear();
// serverListByGroup.addAll(list);
// LOGGER.info("==========================验证是否需要进行跨服数据处理结果");
// }
/** /**
* *
*/ */
public void crossRankHandle(){ public void crossRankHandle(boolean choice){
if (!isTime()){ if (choice || !isTime()){
// 不是处理数据的服务器 // 不是处理数据的服务器
return; return;
} }
@ -85,7 +61,7 @@ public class CrossRankManager {
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if(crossGroup != -1){ if(crossGroup != -1){
AbstractRank rank = RankContext.getRankEnum(type); AbstractRank rank = RankContext.getRankEnum(type);
String key = RedisUtil.getInstence().getKey(rank.getRedisKey(),String.valueOf(crossGroup),false); String key = RedisUtil.getInstence().getKey(rank.getCrossRedisKey(),"",false);
Set<ZSetOperations.TypedTuple<String>> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(rank.getRedisKey(), "", 0, 100, true); Set<ZSetOperations.TypedTuple<String>> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(rank.getRedisKey(), "", 0, 100, true);
for (ZSetOperations.TypedTuple<String> tuple : range) { for (ZSetOperations.TypedTuple<String> tuple : range) {
if (tuple.getValue().length() == 8){ if (tuple.getValue().length() == 8){
@ -126,4 +102,26 @@ public class CrossRankManager {
LOGGER.info("==================工会缓存处理============="); LOGGER.info("==================工会缓存处理=============");
} }
/**
*
*/
public void cleanCrossRank(){
for (RankEnum value : RankEnum.values()) {
int type = value.getType();
if (RankContext.isCrossRank2(type)) {
//跨服
if (RankContext.isCrossRank(type)) {
// 获取分组id是否跨服
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if (crossGroup != -1) {
AbstractRank rank = RankContext.getRankEnum(type);
String key = RedisUtil.getInstence().getKey(rank.getCrossRedisKey(),"",false);
RedisUtil.getInstence().del(key);
LOGGER.info("=====================跨服排行榜清理========,key:{}", key);
}
}
}
}
}
} }

View File

@ -76,9 +76,8 @@ public class RankLogic {
AbstractRank rank = RankContext.getRankEnum(type); AbstractRank rank = RankContext.getRankEnum(type);
if(RankContext.isCrossRank(type) && isCross == 1){ if(RankContext.isCrossRank(type) && isCross == 1){
//跨服 //跨服
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); if(GlobleSystemLogic.getInstence().getCrossGroup() > 0){
if(crossGroup>0){ rankResponse = rank.getCrossRank(session.getUid(),rkey,index/20+1, 20);
rankResponse = rank.getCrossRank(session.getUid(),String.valueOf(crossGroup),index/20+1, 20);
} }
}else{ }else{
rankResponse = rank.getRank(session.getUid(),rkey,index/20+1, 20); rankResponse = rank.getRank(session.getUid(),rkey,index/20+1, 20);

View File

@ -75,8 +75,9 @@ public abstract class AbstractRank implements IRank {
page = 1; page = 1;
} }
int start = (page - 1) * rankEndLine, end = page * rankEndLine - 1; int start = (page - 1) * rankEndLine, end = page * rankEndLine - 1;
Set<ZSetOperations.TypedTuple<String>> scores = RedisUtil.getInstence().getZsetreverseRangeWithScores(redisKey, rkey, start, end, false); Set<ZSetOperations.TypedTuple<String>> scores =
if(start%rankEndLine == 0){ RedisUtil.getInstence().getZsetreverseRangeWithScores(getCrossRedisKey(), rkey, start, end, false);
if(start % rankEndLine == 0){
start++; start++;
} }
PlayerInfoProto.RankResponse.Builder allUserResponse = getAllUserResponse(scores,start); PlayerInfoProto.RankResponse.Builder allUserResponse = getAllUserResponse(scores,start);
@ -98,7 +99,7 @@ public abstract class AbstractRank implements IRank {
} }
CrossServiceLogic.getInstance().dispose(user); CrossServiceLogic.getInstance().dispose(user);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); LOGGER.error("================跨服排行榜缓存玩家数据报错=========,uid:{},error:{}",uid,e.getMessage());
} }
} }
@ -134,6 +135,11 @@ public abstract class AbstractRank implements IRank {
return redisKey; return redisKey;
} }
public String getCrossRedisKey() {
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
return RedisUtil.getInstence().getKey(redisKey,String.valueOf(crossGroup),false);
}
public int getType() { public int getType() {
return type; return type;
} }

View File

@ -2,12 +2,11 @@ package com.ljsd.jieling.logic.rank.rankImpl;
import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.dao.GuilidManager; import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.GuildInfo; import com.ljsd.jieling.logic.dao.root.GuildInfo;
import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.dao.root.User;
import org.springframework.data.redis.core.ZSetOperations;
import rpc.protocols.CommonProto; import rpc.protocols.CommonProto;
import rpc.protocols.PlayerInfoProto; import rpc.protocols.PlayerInfoProto;
import org.springframework.data.redis.core.ZSetOperations;
/** /**
@ -20,6 +19,7 @@ public class DeathPathEveryGuildRank extends AbstractRank {
super(type, redisKey); super(type, redisKey);
} }
@Override
protected void getOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) { protected void getOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) {
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(data.getValue())); GuildInfo guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(data.getValue()));
CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder() CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder()
@ -39,6 +39,7 @@ public class DeathPathEveryGuildRank extends AbstractRank {
return new long[]{(long)(score/1000),(int)(score%1000)}; return new long[]{(long)(score/1000),(int)(score%1000)};
} }
@Override
public double getScore(double... data) { public double getScore(double... data) {
long result = (long) (data[0]*1000); long result = (long) (data[0]*1000);
if(data.length>1){ if(data.length>1){

View File

@ -2,6 +2,7 @@ package com.ljsd.jieling.logic.rank.rankImpl;
import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.dao.GuilidManager; import com.ljsd.jieling.logic.dao.GuilidManager;
import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.GuildInfo; import com.ljsd.jieling.logic.dao.root.GuildInfo;
@ -31,14 +32,14 @@ public class DeathPathTotalGuildRank extends AbstractRank{
@Override @Override
public double getScore(double... data) { public double getScore(double... data) {
BigDecimal decimal = null; BigDecimal decimal = new BigDecimal(String.valueOf(data[0])).divide(new BigDecimal(String.valueOf(Math.pow(10,15))));
decimal = new BigDecimal(String.valueOf(data[0])).divide(new BigDecimal(String.valueOf(Math.pow(10,15))));
if(data.length>1){ if(data.length>1){
decimal = decimal.add(new BigDecimal(data[1])); decimal = decimal.add(new BigDecimal(data[1]));
} }
return decimal.doubleValue(); return decimal.doubleValue();
} }
@Override
protected void getOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) throws Exception { protected void getOptional(int index, ZSetOperations.TypedTuple<String> data, PlayerInfoProto.RankResponse.Builder builder) throws Exception {
GuildInfo guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(data.getValue())); GuildInfo guildInfo = GuilidManager.guildInfoMap.get(Integer.parseInt(data.getValue()));
DeathChallengeCount countInfo = RedisUtil.getInstence().get(RedisKey.DEATH_PATH_TOTAL_CHALLENGE_COUNT, String.valueOf(guildInfo.getId()), DeathChallengeCount.class); DeathChallengeCount countInfo = RedisUtil.getInstence().get(RedisKey.DEATH_PATH_TOTAL_CHALLENGE_COUNT, String.valueOf(guildInfo.getId()), DeathChallengeCount.class);

View File

@ -146,7 +146,7 @@ public class MinuteTask extends Thread {
} }
try { try {
CrossRankManager.getInstance().crossRankHandle(); CrossRankManager.getInstance().crossRankHandle(false);
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
LOGGER.error("跨服排行榜初始化一次Exception::=>{}",e.toString()); LOGGER.error("跨服排行榜初始化一次Exception::=>{}",e.toString());