redis存储队伍英雄模板id,优化部分地方读取用户逻辑,避免批量读取数据库
parent
7d52ab08a1
commit
825a5cb3ca
|
@ -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<Integer> mianLineTeam = HeroLogic.getInstance().getTeamByUid(user, TeamEnum.MIAN_LINE_TEAM.getTeamId());
|
||||
csPlayer.putTeamHeroIds(TeamEnum.MIAN_LINE_TEAM.getTeamId(), mianLineTeam);
|
||||
List<Integer> arenaDefenseTeam = HeroLogic.getInstance().getTeamByUid(user, TeamEnum.TEAM_ARENA_DEFENSE.getTeamId());
|
||||
csPlayer.putTeamHeroIds(TeamEnum.TEAM_ARENA_DEFENSE.getTeamId(), arenaDefenseTeam);
|
||||
|
||||
return csPlayer;
|
||||
}
|
||||
|
||||
|
|
|
@ -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<CommonProto.ArenaEnemy> arenaRankMemberInfo = new ArrayList<>(20);
|
||||
// todo 这里会批量请求其他玩家缓存,需要处理
|
||||
int rankEndLine = SSpecialConfig.getIntegerValue(SSpecialConfig.ARENA_RANKINGSHOWNUM);
|
||||
if (end < rankEndLine) {
|
||||
Set<ZSetOperations.TypedTuple<String>> 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<TeamPosHeroInfo> teamPosHeroInfoList = user.getTeamPosManager().getTeamPosForHero().get(TeamEnum.TEAM_ARENA_DEFENSE.getTeamId());
|
||||
Map<String, Hero> heroMap = user.getHeroManager().getHeroMap();
|
||||
List<Integer> heroTids = new ArrayList<>(teamPosHeroInfoList.size());
|
||||
for (TeamPosHeroInfo teamPosHeroInfo : teamPosHeroInfoList) {
|
||||
heroTids.add(heroMap.get(teamPosHeroInfo.getHeroId()).getTemplateId());
|
||||
}
|
||||
List<Integer> 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())
|
||||
|
|
|
@ -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<Integer, List<Integer>> teamHeroIdMap = new HashMap<>();// 队伍内的英雄模板id
|
||||
|
||||
public CSPlayer() {
|
||||
}
|
||||
|
@ -277,4 +226,20 @@ public class CSPlayer {
|
|||
public void setYuxuForce(long yuxuForce) {
|
||||
this.yuxuForce = yuxuForce;
|
||||
}
|
||||
|
||||
public Map<Integer, List<Integer>> getTeamHeroIdMap() {
|
||||
return teamHeroIdMap;
|
||||
}
|
||||
|
||||
public List<Integer> getTeamHeroId(int teamId) {
|
||||
return teamHeroIdMap.getOrDefault(teamId, new ArrayList<>(0));
|
||||
}
|
||||
|
||||
public void setTeamHeroIdMap(Map<Integer, List<Integer>> teamHeroIdMap) {
|
||||
this.teamHeroIdMap = teamHeroIdMap;
|
||||
}
|
||||
|
||||
public void putTeamHeroIds(int teamId, List<Integer> heroTIds) {
|
||||
this.teamHeroIdMap.put(teamId, heroTIds);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Integer> getTeamByUid(User user, int teamId){
|
||||
ArrayList<Integer> result = new ArrayList<>();
|
||||
if (user == null){
|
||||
return result;
|
||||
}
|
||||
List<TeamPosHeroInfo> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<List<Integer>> getRandomUserByRank(User user,int counts) throws Exception {
|
||||
List<List<Integer>> result = new ArrayList<>();
|
||||
|
@ -128,14 +129,14 @@ public class RankLogic {
|
|||
// 随机排名
|
||||
int random = MathUtils.randomInt(rankSize);
|
||||
// 获取随机玩家的主线队伍阵容
|
||||
User other1 = getRankUid(rankResponse, random);
|
||||
List<Integer> heroInfos = getTeamByUid(other1);
|
||||
CSPlayer player = getRankUid(rankResponse, random);
|
||||
List<Integer> 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<Integer> getTeamByUid(User user){
|
||||
ArrayList<Integer> integers = new ArrayList<>();
|
||||
if (user == null){
|
||||
return integers;
|
||||
}
|
||||
List<TeamPosHeroInfo> 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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue