diff --git a/game-server/app/servers/role/handler/rankHandler.ts b/game-server/app/servers/role/handler/rankHandler.ts index 8b716801a..198caa323 100644 --- a/game-server/app/servers/role/handler/rankHandler.ts +++ b/game-server/app/servers/role/handler/rankHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, HandlerService, pinus, } from "pinus"; import { resResult } from "../../../pubUtils/util"; import { STATUS, getRedisKeyByRankType, ROLE_SELECT, RANK_TYPE, HERO_SELECT, GUILD_SELECT, RANK_FIRST_REWARD_STATUS, ITEM_CHANGE_REASON, REDIS_KEY } from "../../../consts"; -import Role,{RoleModel} from "../../../db/Role"; +import {RoleModel} from "../../../db/Role"; import { UserGuildModel } from "../../../db/UserGuild"; import { GuildModel } from "../../../db/Guild"; import { Rank, getGeneralRank, getRankFirstReward, getRankInHandler } from "../../../services/rankService"; @@ -9,8 +9,6 @@ import { gameData } from "../../../pubUtils/data"; import { addItems } from "../../../services/role/rewardService"; import { RewardInter } from "../../../pubUtils/interface"; import { RankFirstType } from "../../../db/RankFirst"; -import Hero from "../../../db/Hero"; -import { LineupParam, RoleAndGuildRankInfo, RoleRankInfo } from "../../../domain/rank"; export default function (app: Application) { new HandlerService(app, {}); @@ -51,52 +49,13 @@ export class RoleHandler { async getRank(msg: { type: number }, session: BackendSession) { let roleId = session.get('roleId'); let serverId = session.get('serverId'); + let guildCode = session.get('guildCode'); let { type } = msg; let redisKey = getRedisKeyByRankType(type); if (!redisKey) return resResult(STATUS.WRONG_PARMS); - - if(redisKey == REDIS_KEY.TOP_HERO_RANK) { - let heroRanks = await Hero.findByServerIdAndSortByCe(serverId); - - let r = new Rank(REDIS_KEY.TOP_HERO_RANK, { serverId }); - let ranks: RoleAndGuildRankInfo[] = [], myRank: RoleAndGuildRankInfo; - for(let rank = 1; rank <= heroRanks.length; rank++) { - let hero = heroRanks[rank - 1]; - let result = new RoleAndGuildRankInfo(rank, hero.ce); - let param = await r.getParam(rank, hero.roleId, [hero.ce]); - if(!param) { - let role = await Role.findByRoleId(hero.roleId, ROLE_SELECT.RANK); - await r.generParamAndSet(REDIS_KEY.USER_INFO, { roleId: hero.roleId }, { role }); - param = await r.getParam(rank, hero.roleId, [hero.ce]); - } - - param.setTopLine([new LineupParam(hero)]); - result.setUserInfo(param); - ranks.push(result); - if(!myRank && param.roleId == roleId) myRank = result; - } - if(!myRank) { - let myHeroes = await Hero.findAndSortByCe(roleId); - let myHero = myHeroes[0]; - let result = new RoleAndGuildRankInfo(0, myHero.ce); - let param = await r.getParam(0, roleId, [myHero.ce]); - if(!param) { - let role = await Role.findByRoleId(roleId, ROLE_SELECT.RANK); - await r.generParamAndSet(REDIS_KEY.USER_INFO, { roleId }, { role }); - param = await r.getParam(0, roleId, [myHero.ce]); - } - - param.setTopLine([new LineupParam(myHero)]); - result.setUserInfo(param); - myRank = result; - } - return resResult(STATUS.SUCCESS, { type, myRank, ranks }); - } else { - let result = await getRankInHandler(redisKey, type, { serverId }, session); - return resResult(STATUS.SUCCESS, { type, ...result }); - } - + let result = await getRankInHandler(redisKey, type, { serverId }, session); + return resResult(STATUS.SUCCESS, { type, ...result }); } // 查看活跃排行榜 @@ -128,45 +87,18 @@ export class RoleHandler { // 查看单个武将排行榜 async getHeroRank(msg: { type: number, hid: number }, session: BackendSession) { - let serverId = session.get('serverId'); - let roleId = session.get('roleId'); + let serverId = session.get('serverId') let { type, hid } = msg; let redisKey = getRedisKeyByRankType(type); if (!redisKey) return resResult(STATUS.WRONG_PARMS); - let heroRanks = await Hero.findByServerIdAndHidAndSortByCe(serverId, hid); + let r = new Rank(redisKey, { serverId, hid }); + let ranks = await r.getRankByRange(200, 0); - let r = new Rank(redisKey, { serverId }); - let ranks: RoleRankInfo[] = [], myRank: RoleRankInfo; - for(let rank = 1; rank <= heroRanks.length; rank++) { - let hero = heroRanks[rank - 1]; - let param = await r.getParam(rank, hero.roleId, [hero.ce]); - if(!param) { - let role = await Role.findByRoleId(hero.roleId, ROLE_SELECT.RANK); - await r.generParamAndSet(REDIS_KEY.USER_INFO, { roleId: hero.roleId }, { role }); - param = await r.getParam(rank, hero.roleId, [hero.ce]); - } - - param.setSingleHero([new LineupParam(hero)]); - ranks.push(param); - if(!myRank && param.roleId == roleId) myRank = param; - } - if(!myRank) { - let myHero = await Hero.findByHidAndRole(hid, roleId); - let param = await r.getParam(0, roleId, [myHero?.ce||0]); - if(!param) { - let role = await Role.findByRoleId(roleId, ROLE_SELECT.RANK); - await r.generParamAndSet(REDIS_KEY.USER_INFO, { roleId }, { role }); - param = await r.getParam(0, roleId, [myHero?.ce||0]); - } - - if(myHero) { - param.setSingleHero([new LineupParam(myHero)]); - } - myRank = param; - } - return resResult(STATUS.SUCCESS, { type, hid, myRank, ranks }); + return resResult(STATUS.SUCCESS, { + type, hid, ranks + }); } async receiveReward(msg: { type: number, id: number }, session: BackendSession) { diff --git a/game-server/app/services/playerCeService.ts b/game-server/app/services/playerCeService.ts index 62ba54570..c3130edbf 100644 --- a/game-server/app/services/playerCeService.ts +++ b/game-server/app/services/playerCeService.ts @@ -495,13 +495,13 @@ async function updateRank(roleId: string, serverId: number, topLineupCe: number, await r.setRankWithRoleInfo(roleId, topLineupCe, 0, role); // 最强武将 - // for(let { hid, ce } of pushHeros) { - // let r2 = new Rank(REDIS_KEY.TOP_HERO_RANK, { serverId }); - // await r2.setRankWithHeroInfo(roleId, hid, ce, 0); + for(let { hid, ce } of pushHeros) { + let r2 = new Rank(REDIS_KEY.TOP_HERO_RANK, { serverId }); + await r2.setRankWithHeroInfo(roleId, hid, ce, 0); - // let r4 = new Rank(REDIS_KEY.HERO_RANK, { serverId, hid }); - // await r4.setRankWithHeroInfo(roleId, hid, ce, 0); - // } + let r4 = new Rank(REDIS_KEY.HERO_RANK, { serverId, hid }); + await r4.setRankWithHeroInfo(roleId, hid, ce, 0); + } // 总战力 let r3 = new Rank(REDIS_KEY.SUM_CE_RANK, { serverId }); diff --git a/game-server/app/services/rankService.ts b/game-server/app/services/rankService.ts index 08325cb31..506c72123 100644 --- a/game-server/app/services/rankService.ts +++ b/game-server/app/services/rankService.ts @@ -1119,14 +1119,14 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe // console.log(roleId); await r.setRankWithRoleInfo(role.roleId, role.topLineupCe, role.updatedAt.getTime(), role); } - // } else if (type == REDIS_KEY.TOP_HERO_RANK) { - // let serverId = args.serverId; - // let ranks = await Hero.getAllRank(serverId, HERO_SELECT.RANK_LINEUP); - // let r = new Rank(type, { serverId }); - // r.setIsInit(true); - // for (let hero of ranks) { - // await r.setRankWithHeroInfo(hero.roleId, hero.hid, hero.ce, hero.updatedAt.getTime(), hero); - // } + } else if (type == REDIS_KEY.TOP_HERO_RANK) { + let serverId = args.serverId; + let ranks = await Hero.getAllRank(serverId, HERO_SELECT.RANK_LINEUP); + let r = new Rank(type, { serverId }); + r.setIsInit(true); + for (let hero of ranks) { + await r.setRankWithHeroInfo(hero.roleId, hero.hid, hero.ce, hero.updatedAt.getTime(), hero); + } } else if (type == REDIS_KEY.HERO_NUM_RANK) { let serverId = args.serverId; let ranks = await RoleModel.getRank('heroNum', serverId, ROLE_SELECT.RANK); @@ -1175,7 +1175,6 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe for (let role of ranks) { await r.setRankWithRoleInfo(role.roleId, role.mainEliteWarId, role.mainEliteUpdatedAt, role); } -<<<<<<< HEAD // } else if (type == REDIS_KEY.HERO_RANK) { // let serverId = args.serverId; @@ -1187,7 +1186,6 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe // await r.setRankWithHeroInfo(hero.roleId, hid, hero.ce, hero.updatedAt.getTime(), hero); // } // } -======= } else if (type == REDIS_KEY.HERO_RANK) { let serverId = args.serverId; @@ -1199,7 +1197,6 @@ export async function setRankRedisFromDb(type: string, args?: { serverId?: numbe await r.setRankWithHeroInfo(hero.roleId, hid, hero.ce, hero.updatedAt.getTime(), hero); } } ->>>>>>> parent of 9051e72e9 (✨ feat(db): 修改hero表数据库操作方式) } else if (type == REDIS_KEY.LADDER) { let serverId = args.serverId; let ranks = await LadderMatchModel.findAll(serverId); diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 6b29dc829..52b42a4c5 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -285,10 +285,8 @@ export function getInfoKeyByRedisKey(redisKey: REDIS_KEY) { return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] }; case REDIS_KEY.TOP_LINEUP_RANK: // 最强阵容排行 return { infoKey: REDIS_KEY.USER_INFO, extraKey: [REDIS_KEY.TOP_LINEUP_INFO] }; - // case REDIS_KEY.TOP_HERO_RANK: // 最强武将排行 - // return { infoKey: REDIS_KEY.USER_INFO, extraKey: [REDIS_KEY.HERO_INFO] }; case REDIS_KEY.TOP_HERO_RANK: // 最强武将排行 - return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] }; + return { infoKey: REDIS_KEY.USER_INFO, extraKey: [REDIS_KEY.HERO_INFO] }; case REDIS_KEY.HERO_NUM_RANK: // 武将数量排行 return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] }; case REDIS_KEY.USER_LV: // 主公等级排行榜 @@ -301,10 +299,8 @@ export function getInfoKeyByRedisKey(redisKey: REDIS_KEY) { return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] }; case REDIS_KEY.MAIN_ELITE_RANK: // 精英通关排名 return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] }; - // case REDIS_KEY.HERO_RANK: // 武将排行榜 - // return { infoKey: REDIS_KEY.USER_INFO, extraKey: [REDIS_KEY.HERO_INFO] }; case REDIS_KEY.HERO_RANK: // 武将排行榜 - return { infoKey: REDIS_KEY.USER_INFO, extraKey: [] }; + return { infoKey: REDIS_KEY.USER_INFO, extraKey: [REDIS_KEY.HERO_INFO] }; case REDIS_KEY.GUILD_ACTIVE_RANK: // 公会周活跃排行榜 return { infoKey: REDIS_KEY.GUILD_INFO, extraKey: [] }; diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index 0ab5da1cc..1072bca9b 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -101,8 +101,6 @@ export class EPlace { @index({ seqId: 1 }) @index({ roleId: 1, hid: 1 }) @index({ roleId: 1, ce: -1 }) -@index({ serverId: 1, ce: -1 }) -@index({ serverId: 1, hid: 1, ce: -1 }) export default class Hero extends BaseModel { @prop({ required: true }) @@ -190,16 +188,6 @@ export default class Hero extends BaseModel { return heroes } - public static async findByServerIdAndSortByCe(serverId: number) { - const heroes: HeroType[] = await HeroROModel.find({ serverId }).sort({ ce: -1 }).select('hid skinId star colorStar lv quality job roleId ce').limit(200).lean(); - return heroes - } - - public static async findByServerIdAndHidAndSortByCe(serverId: number, hid: number) { - const heroes: HeroType[] = await HeroROModel.find({ serverId, hid }).sort({ ce: -1 }).select('hid skinId star colorStar lv quality job roleId ce').limit(200).lean(); - return heroes - } - public static async findBySeqIdRange(seqIds: Array, roleId: string, lean = true) { const hero: HeroType[] = await HeroModel.find({ seqId: { $in: seqIds }, roleId }).lean(lean); return hero;