From 825a5cb3cabe70245e2fc29f6c4a402385958aa9 Mon Sep 17 00:00:00 2001 From: "PC-202302260912\\Administrator" <1769111741@qq.com> Date: Tue, 28 Nov 2023 15:58:48 +0800 Subject: [PATCH] =?UTF-8?q?redis=E5=AD=98=E5=82=A8=E9=98=9F=E4=BC=8D?= =?UTF-8?q?=E8=8B=B1=E9=9B=84=E6=A8=A1=E6=9D=BFid=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=83=A8=E5=88=86=E5=9C=B0=E6=96=B9=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=80=BB=E8=BE=91=EF=BC=8C=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E8=AF=BB=E5=8F=96=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../crossService/CrossServiceLogic.java | 10 +- .../ljsd/jieling/logic/arena/ArenaLogic.java | 39 +++--- .../jieling/logic/dao/cross/CSPlayer.java | 117 ++++++------------ .../ljsd/jieling/logic/hero/HeroLogic.java | 22 +++- .../ljsd/jieling/logic/rank/RankLogic.java | 32 ++--- .../logic/rank/rankImpl/CrossArenaRank.java | 4 +- 6 files changed, 96 insertions(+), 128 deletions(-) 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 1a04b0c47..cd2198244 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 @@ -113,6 +113,7 @@ public class CrossServiceLogic { csPlayer.setLoginTime(p.getLoginTime()); csPlayer.setOffLineTime(p.getOffLineTime()); csPlayer.setMaxFore(p.getMaxForce()); + //玉虚三个队伍总战力 long force1 = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_YU_XU_LUN_DAO_ONE.getTeamId()); long force2 = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.CROSS_YU_XU_LUN_DAO_TWO.getTeamId()); @@ -122,8 +123,15 @@ public class CrossServiceLogic { long mainLine = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.MIAN_LINE_TEAM.getTeamId()); csPlayer.setMainLineForce(mainLine); // 罗浮编队战力 - long luoFu = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.MIAN_LINE_TEAM.getTeamId()); + long luoFu = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.WORLD_TEAM_ARENA_DEFENSE.getTeamId()); csPlayer.setLuoFuForce(luoFu); + + // 编队英雄记录 + List mianLineTeam = HeroLogic.getInstance().getTeamByUid(user, TeamEnum.MIAN_LINE_TEAM.getTeamId()); + csPlayer.putTeamHeroIds(TeamEnum.MIAN_LINE_TEAM.getTeamId(), mianLineTeam); + List arenaDefenseTeam = HeroLogic.getInstance().getTeamByUid(user, TeamEnum.TEAM_ARENA_DEFENSE.getTeamId()); + csPlayer.putTeamHeroIds(TeamEnum.TEAM_ARENA_DEFENSE.getTeamId(), arenaDefenseTeam); + return csPlayer; } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index 0e250c965..036aa2837 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -412,13 +412,12 @@ public class ArenaLogic { } - public void getWorldRankByPage(ISession session, int page) throws Exception { + public void getWorldRankByPage(ISession session, int page) { if (page == 0) { page = 1; } int start = (page - 1) * 20, end = page * 20 - 1; List arenaRankMemberInfo = new ArrayList<>(20); - // todo 这里会批量请求其他玩家缓存,需要处理 int rankEndLine = SSpecialConfig.getIntegerValue(SSpecialConfig.ARENA_RANKINGSHOWNUM); if (end < rankEndLine) { Set> arenaRankInfo = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.ARENA_RANK, Integer.toString(viewSeason), start, end); @@ -426,34 +425,26 @@ public class ArenaLogic { String value = item.getValue(); int score = item.getScore().intValue(); int uid = Integer.parseInt(value); - User user = UserManager.getUser(uid, true); - if (null == user) { + CSPlayer csPlayer = CrossServiceLogic.getPlayerByRedis(uid); + if (null == csPlayer) { continue; } - long totalForce = HeroLogic.getInstance().calTeamTotalForce(user, TeamEnum.TEAM_ARENA_DEFENSE.getTeamId()); -// LOGGER.info("获取世界排行榜信息===========玩家id:{}", uid); - List teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(TeamEnum.TEAM_ARENA_DEFENSE.getTeamId()); - Map heroMap = user.getHeroManager().getHeroMap(); - List heroTids = new ArrayList<>(teamPosHeroInfoList.size()); - for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList) { - heroTids.add(heroMap.get(teamPosHeroInfo.getHeroId()).getTemplateId()); - } + List heroTids = csPlayer.getTeamHeroId(TeamEnum.TEAM_ARENA_DEFENSE.getTeamId()); CommonProto.Team teamBuild = CommonProto.Team.newBuilder().addAllHeroTid(heroTids).build(); - PlayerManager playerInfoManager = user.getPlayerInfoManager(); CommonProto.ArenaPersonInfo personInfoBuild = CommonProto.ArenaPersonInfo.newBuilder() .setUid(uid) - .setLevel(playerInfoManager.getLevel()) - .setName(playerInfoManager.getNickName()) + .setLevel(csPlayer.getLevel()) + .setName(csPlayer.getName()) .setScore(score) - .setHead(playerInfoManager.getHead()) + .setHead(csPlayer.getHead()) .setRank(++start) - .setTotalForce(totalForce) - .setHeadFrame(playerInfoManager.getHeadFrame()) - .setUserMount(playerInfoManager.getUserMount()) - .setUserSkin(playerInfoManager.getUserSkin()) - .setUserTitle(playerInfoManager.getUserTitle()) - .setGender(playerInfoManager.getSex()) - .setPracticeLevel(user.getHeroManager().getPracticeLevel()) + .setTotalForce(csPlayer.getMainLineForce()) + .setHeadFrame(csPlayer.getHeadFrame()) + .setUserMount(csPlayer.getUserMount()) + .setUserSkin(csPlayer.getSkin()) + .setUserTitle(csPlayer.getUserTitle()) + .setGender(csPlayer.getSex()) + .setPracticeLevel(csPlayer.getPracticeLevel()) .build(); arenaRankMemberInfo.add(CommonProto.ArenaEnemy.newBuilder() .setPersonInfo(personInfoBuild) @@ -1035,7 +1026,7 @@ public class ArenaLogic { .setLevel(csPlayer.getLevel()) .setName(csPlayer.getName()) .setServername(serverName) - .setTotalForce(csPlayer.getLuoFuForce()) + .setTotalForce(csPlayer.getMainLineForce()) .setUserTitle(csPlayer.getUserTitle()) .setUserMount(csPlayer.getUserMount()) .setGender(csPlayer.getSex()) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java index 3f4311b22..9fcba16c9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/cross/CSPlayer.java @@ -2,6 +2,11 @@ package com.ljsd.jieling.logic.dao.cross; import com.ljsd.jieling.db.mongo.AreaManager; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * @Author hj * @Date 2021/8/31 15:30:04 @@ -9,87 +14,31 @@ import com.ljsd.jieling.db.mongo.AreaManager; * @Version 1.0 */ public class CSPlayer { - /** - * 角色id - */ - private int userId; - /** - * 等级 - */ - private int level; - /** - * 名字 - */ - private String name; - /** - * 头像 - */ - private int head; - /** - * 头像框 - */ - private int headFrame; - - /** - * 皮肤 - */ - private int skin; - /** - * 称号 - */ - private int userTitle; - /** - * 修行等级 - */ - private int practiceLevel; - /** - * 服务器id - */ - private int serverId; - /** - * 性别 - */ - private int sex; - /** - * 坐骑 - */ - private int userMount; - - /** - * 公会id - */ - private int guildId; - - /** - * 最高战力 - */ - private long maxFore; - - /** - * 玉虚论道旧分数 - */ - private int crossYuxulundaoOldScore = 0; - /** - * 玉虚论道最新分数 - */ - private int crossYuxulundaoNewScore = 0; - /** - * 玉虚论道历史达到的最高等级 - */ - private int crossYxldMaxLevel = 0 ; - - private long mainLineForce = 0; - - private long luoFuForce = 0; - - private long yuxuForce = 0; - + private int userId;//角色id + private int level;//等级 + private String name;//名字 + private int head;//头像 + private int headFrame;//头像框 + private int skin;//皮肤 + private int userTitle;//称号 + private int practiceLevel;//修行等级 + private int serverId;//服务器id + private int sex;//性别 + private int userMount;//坐骑 + private int guildId;//公会id + private long maxFore;//最高战力 + private int crossYuxulundaoOldScore;//玉虚论道旧分数 + private int crossYuxulundaoNewScore;//玉虚论道最新分数 + private int crossYxldMaxLevel;//玉虚论道历史达到的最高等级 + private long mainLineForce; + private long luoFuForce; + private long yuxuForce; private long loginTime;// 登陆时间 private long offLineTime;// 离线时间 - // 数字小游戏 private int compareNumLevelId; private int compareNumLevelTime; + private Map> teamHeroIdMap = new HashMap<>();// 队伍内的英雄模板id public CSPlayer() { } @@ -277,4 +226,20 @@ public class CSPlayer { public void setYuxuForce(long yuxuForce) { this.yuxuForce = yuxuForce; } + + public Map> getTeamHeroIdMap() { + return teamHeroIdMap; + } + + public List getTeamHeroId(int teamId) { + return teamHeroIdMap.getOrDefault(teamId, new ArrayList<>(0)); + } + + public void setTeamHeroIdMap(Map> teamHeroIdMap) { + this.teamHeroIdMap = teamHeroIdMap; + } + + public void putTeamHeroIds(int teamId, List heroTIds) { + this.teamHeroIdMap.put(teamId, heroTIds); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java index 43e2452ec..26042ce58 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java @@ -3561,7 +3561,7 @@ public class HeroLogic { // 更新战力 Poster.getPoster().dispatchEvent(new SaveHeroForceEvent(user.getId(),heroId)); // 鸿蒙阵,穿装备 - addOrUpdateHongmeng(session); +// addOrUpdateHongmeng(session); //发送成功消息 MessageUtil.sendMessage(session, 1, MessageTypeProto.MessageType.EQUIP_WEAR_RESPONSE_VALUE, null, true); @@ -7040,4 +7040,24 @@ public class HeroLogic { return potentialNew.getAttribute(); } + /** + * 根据用户id获取队伍 + */ + public List getTeamByUid(User user, int teamId){ + ArrayList result = new ArrayList<>(); + if (user == null){ + return result; + } + List heroInfos = user.getTeamPosManager().getTeamPosForHero().get(teamId); + if (heroInfos == null || heroInfos.isEmpty()){ + return result; + } + for (TeamPosHeroInfo heroInfo : heroInfos) { + // 获取英雄模板id + Hero hero = user.getHeroManager().getHero(heroInfo.getHeroId()); + result.add(hero.getTemplateId()); + } + return result; + } + } 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 4800c71f4..838f4d8f2 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 @@ -6,7 +6,9 @@ import com.ljsd.jieling.globals.BIReason; import com.ljsd.jieling.ktbeans.ReportEventEnum; import com.ljsd.jieling.ktbeans.ReportUtil; import com.ljsd.jieling.logic.GlobleSystemLogic; +import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; import com.ljsd.jieling.logic.dao.*; +import com.ljsd.jieling.logic.dao.cross.CSPlayer; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.rank.rankImpl.AbstractRank; import com.ljsd.jieling.network.session.ISession; @@ -105,7 +107,6 @@ public class RankLogic { /** * 获取随机排名的用户id - * todo 耗时很久,推荐修改为配表多类,随机读取 */ public List> getRandomUserByRank(User user,int counts) throws Exception { List> result = new ArrayList<>(); @@ -128,14 +129,14 @@ public class RankLogic { // 随机排名 int random = MathUtils.randomInt(rankSize); // 获取随机玩家的主线队伍阵容 - User other1 = getRankUid(rankResponse, random); - List heroInfos = getTeamByUid(other1); + CSPlayer player = getRankUid(rankResponse, random); + List heroInfos = player.getTeamHeroId(TeamEnum.MIAN_LINE_TEAM.getTeamId()); // 队伍长度不足六人 if (heroInfos.size() < 6){ if (count == 5){ // 最多循环五次,五次之后直接取第一名得id - User other2 = getRankUid(rankResponse, 0); - result.add(getTeamByUid(other2)); + CSPlayer player2 = getRankUid(rankResponse, 0); + result.add(player2.getTeamHeroId(TeamEnum.MIAN_LINE_TEAM.getTeamId())); } count++; }else { @@ -147,29 +148,12 @@ public class RankLogic { return result; } - /** - * 根据用户id获取队伍 - */ - private List getTeamByUid(User user){ - ArrayList integers = new ArrayList<>(); - if (user == null){ - return integers; - } - List heroInfos = user.getTeamPosManager().getTeamPosForHero().get(TeamEnum.MIAN_LINE_TEAM.getTeamId()); - heroInfos.forEach(v->{ - // 获取英雄模板id - Hero hero = user.getHeroManager().getHero(v.getHeroId()); - integers.add(hero.getTemplateId()); - }); - return integers; - } - /** * 根据排行获取排行榜玩家id */ - private User getRankUid(PlayerInfoProto.RankResponse rankResponse, int ranking){ + private CSPlayer getRankUid(PlayerInfoProto.RankResponse rankResponse, int ranking){ CommonProto.UserRank ranks = rankResponse.getRanks(ranking); - return UserManager.getUserNotCache(ranks.getUid()); + return CrossServiceLogic.getPlayerByRedis(ranks.getUid()); } /** diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java index a222036e7..b12afc5b7 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java @@ -78,7 +78,7 @@ public class CrossArenaRank extends AbstractRank { } CommonProto.RankInfo.Builder everyRankInfo = CommonProto.RankInfo.newBuilder() .setRank(index) - .setParam1(query.getLuoFuForce()) + .setParam1(query.getMainLineForce()) .setParam2(getParam2(data.getScore())) .setParam3(getParam3(data.getScore())); CommonProto.UserRank.Builder everyRank = getCrossOneUserRank(query,everyRankInfo); @@ -89,7 +89,7 @@ public class CrossArenaRank extends AbstractRank { @Override public CommonProto.UserRank.Builder getCrossOneUserRank(CSPlayer csPlayer, CommonProto.RankInfo.Builder everyRankInfo){ CommonProto.UserRank.Builder oneUserRank = super.getCrossOneUserRank(csPlayer, everyRankInfo); - oneUserRank.setForce(csPlayer.getLuoFuForce()); + oneUserRank.setForce(csPlayer.getMainLineForce()); return oneUserRank; }