From 94bffe4947976c55bb369f7dc8aa38f3b455390b Mon Sep 17 00:00:00 2001 From: duhui Date: Wed, 28 Jul 2021 16:05:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=A8=E6=9C=8D=E6=8E=92=E8=A1=8C=EF=BC=8C?= =?UTF-8?q?=E5=88=9D=E6=AD=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisUtil.java | 10 ++++++- .../crossService/CrossServiceLogic.java | 16 ++++++++--- .../jieling/logic/dao/TeamPosHeroInfo.java | 14 ++++++++++ .../ljsd/jieling/logic/rank/RankLogic.java | 1 - .../logic/rank/rankImpl/AbstractRank.java | 28 +++++++++++++++++++ 5 files changed, 63 insertions(+), 6 deletions(-) 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 a19d96b3f..da80ecfd5 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 @@ -1288,8 +1288,16 @@ public class RedisUtil { return getKey(type,key,true); } + /** + * 获取key + * @param type + * @param key + * @param judge + * 本服: true 跨服: false + * @return + */ public String getKey(String type,String key,boolean judge){ - if (judge){ + if (!judge){ return type + RedisKey.Delimiter_colon + key; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java index 486e57369..9aa37b788 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/activity/crossService/CrossServiceLogic.java @@ -151,14 +151,22 @@ public class CrossServiceLogic { return arenaOfPlayerManager; } private ArenaOfHeroManager buildArenaOfHeroManager(User user){ + // 编队列表 Map> teams = new HashMap<>(); - List infos = - user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,new ArrayList<>()); - teams.put(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,infos); + // 需要存储的英雄列表 + HashSet set = new HashSet<>(); + // 跨服世界阵编队 + List worldTeam = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,new ArrayList<>()); + teams.put(GlobalsDef.WORLD_TEAM_ARENA_DEFENSE,worldTeam); + set.addAll(worldTeam); + // 主线阵容编队 + List firstTeam = user.getTeamPosManager().getTeamPosForHero().getOrDefault(GlobalsDef.FORMATION_NORMAL,new ArrayList<>()); + teams.put(GlobalsDef.FORMATION_NORMAL,firstTeam); + set.addAll(firstTeam); // 英雄 Map heroes = new HashMap<>(); Map heroMap = user.getHeroManager().getHeroMap(); - infos.forEach(v->{ + set.forEach(v->{ Hero hero = heroMap.get(v.getHeroId()); heroes.put(v.getHeroId(),buildArenaOfHero(user,hero)); }); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/TeamPosHeroInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/TeamPosHeroInfo.java index 540977509..11b066b14 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/TeamPosHeroInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/TeamPosHeroInfo.java @@ -1,6 +1,8 @@ package com.ljsd.jieling.logic.dao; +import java.util.Objects; + public class TeamPosHeroInfo implements Comparable { private String heroId; private int position; @@ -30,6 +32,18 @@ public class TeamPosHeroInfo implements Comparable { this.position = position; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TeamPosHeroInfo that = (TeamPosHeroInfo) o; + return Objects.equals(heroId, that.heroId); + } + + @Override + public int hashCode() { + return Objects.hash(heroId, position); + } @Override public int compareTo(TeamPosHeroInfo o) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankLogic.java index 13372829a..9a9caeea0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/RankLogic.java @@ -68,7 +68,6 @@ public class RankLogic { } public void getRank(ISession session, int type, int activityId,int index,MessageTypeProto.MessageType messageType) throws Exception { LOGGER.info("获取排行榜信息type={},activityId={}",type,activityId); - int page = 1; String rkey = ""; if(activityId != 0){ rkey = String.valueOf(activityId); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java index 35ed53fce..060e86a15 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java @@ -55,6 +55,34 @@ public abstract class AbstractRank implements IRank { return allUserResponse.build(); } + /** + * 获取跨服排行 + * @param uid + * @param rkey + * @param page + * @param rankEndLine + * @return + * @throws Exception + */ + public PlayerInfoProto.RankResponse getCrossRank(int uid, String rkey, int page, int rankEndLine) throws Exception { + if(rankEndLine==-1){ + rankEndLine = 100; + } + User user = UserManager.getUser(uid); + if (page == 0) { + page = 1; + } + int start = (page - 1) * rankEndLine, end = page * rankEndLine - 1; + Set> zsetreverseRangeWithScores = getRankByKey(rkey,start,end); + if(start%rankEndLine == 0){ + start++; + } + PlayerInfoProto.RankResponse.Builder allUserResponse = getAllUserResponse(zsetreverseRangeWithScores,start); + //当前用户信息 + getMyInfo(user,rkey,allUserResponse); + return allUserResponse.build(); + } + /** * 向排行榜添加或修改某条数据 * @param uid 修改用户id