🐞 fix(gvg): 排行榜添加

This commit is contained in:
luying
2023-03-01 21:12:43 +08:00
parent 61de7b1c68
commit 1bb47dd958
3 changed files with 32 additions and 17 deletions

View File

@@ -7,7 +7,7 @@ import { Application, BackendSession, ChannelService, HandlerService, pinus } fr
import { resResult, genCode } from "../../../pubUtils/util"; import { resResult, genCode } from "../../../pubUtils/util";
import { GVGLeagueModel } from '../../../db/GVGLeague'; import { GVGLeagueModel } from '../../../db/GVGLeague';
import { getGroupKey, getGVGConfig, getGVGPeriodData, getGVGServerType } from '../../../services/gvg/gvgService'; import { getGroupKey, getGVGConfig, getGVGPeriodData, getGVGServerType } from '../../../services/gvg/gvgService';
import { redisAddBattleScore, battleEndSendMessage, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanksByCity, getBirthAreaOfCity, getGVGWarId, getOppHeroes, getTechKnifeHurt, getTechReviveMinus, initRobots, pushTeamMoveMessage, getGVGCitiesInfo, leaveCity, refreshTeams, checkEnterCityTime, generNewLineup } from '../../../services/gvg/gvgBattleService'; import { redisAddBattleScore, battleEndSendMessage, calBattleScoreByCe, checkAreaIsInCity, checkGVGBattleStart, checkMoveStatus, getBattleRanksByCity, getBirthAreaOfCity, getGVGWarId, getOppHeroes, getTechKnifeHurt, getTechReviveMinus, initRobots, pushTeamMoveMessage, getGVGCitiesInfo, leaveCity, refreshTeams, checkEnterCityTime, generNewLineup, getBattleRank } from '../../../services/gvg/gvgBattleService';
import { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory'; import { getGVGBattleData } from '../../../services/gvg/gvgBattleMemory';
import { GVGBattleRecModel } from '../../../db/GVGBattleRec'; import { GVGBattleRecModel } from '../../../db/GVGBattleRec';
import { getFightTimeByPeriod } from '../../../services/gvg/gvgFightService'; import { getFightTimeByPeriod } from '../../../services/gvg/gvgFightService';
@@ -662,25 +662,21 @@ export class GVGBattleHandler {
// 排行榜 // 排行榜
async getRanks(msg: {}, session: BackendSession) { async getRanks(msg: {}, session: BackendSession) {
const serverId = session.get('serverId'); const serverId = session.get('serverId');
const guildCode = session.get('guildCode');
const roleId = session.get('roleId');
let { configId } = getGVGPeriodData(); let { configId } = getGVGPeriodData();
let groupKey = await getGroupKey(serverId); let groupKey = await getGroupKey(serverId);
let cities = await getGVGCitiesInfo(configId, groupKey); let cities = await getGVGCitiesInfo(configId, groupKey);
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupKey }); let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
let leagueRanksRaw = await r.getRankByRange(); if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
let leagueRanks = leagueRanksRaw.map(obj => {
if(obj instanceof LeagueRankInfo) return { rank: obj.rank, name: obj.name, score: obj.num }
});
let r2 = new Rank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupKey }); let { myRank: myLeagueRank, ranks: leagueRanks } = await getBattleRank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupKey }, { leagueCode: myLeague.leagueCode });
let memberRanksRaw = await r2.getRankByRange(); let { myRank: myMemberRank, ranks: memberRanks } = await getBattleRank(REDIS_KEY.GVG_BATTLE_RANK, { configId, groupKey }, { roleId });
let memberRanks = memberRanksRaw.map(obj => {
if(obj instanceof RoleRankInfo) return { rank: obj.rank, name: obj.roleName, score: obj.num }
})
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
cities, leagueRanks, memberRanks cities, leagueRanks, myLeagueRank, memberRanks, myMemberRank
}) })
} }

View File

@@ -15,7 +15,7 @@ import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
import { pinus } from "pinus"; import { pinus } from "pinus";
import { dispatch } from "../../pubUtils/dispatcher"; import { dispatch } from "../../pubUtils/dispatcher";
import { Rank } from "../rankService"; import { Rank } from "../rankService";
import { LeagueRankInfo, RoleRankInfo } from "../../domain/rank"; import { KeyNameParam, LeagueRankInfo, myIdInter, RoleRankInfo } from "../../domain/rank";
import { findKeys, getAllServerName } from "../redisService"; import { findKeys, getAllServerName } from "../redisService";
import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc, sendMessageToUserWithSuc } from "../pushService"; import { sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc, sendMessageToUserWithSuc } from "../pushService";
import { sendMailByContent, sendMailToLeagueByContent } from "../mailService"; import { sendMailByContent, sendMailToLeagueByContent } from "../mailService";
@@ -117,7 +117,7 @@ export function checkMoveStatus(team: GVGTeamType, cityId: number, areaId: numbe
export async function initRobots(configId: number, groupKey: string, city: GVGCityType | { cityId: number, guardLeague: string }) { export async function initRobots(configId: number, groupKey: string, city: GVGCityType | { cityId: number, guardLeague: string }) {
let { cityId, guardLeague = '' } = city; let { cityId, guardLeague = '' } = city;
if(guardLeague) return []; if(guardLeague) return [];
let robotTeams = await GVGTeamModel.findRobotTeams(groupKey, cityId); let robotTeams = await GVGTeamModel.findRobotTeams(configId, groupKey, cityId);
let updateDicPoints: DicGVGAreaPoint[] = []; let updateDicPoints: DicGVGAreaPoint[] = [];
let { battleAreaIds = []} = gameData.gvgCity.get(cityId); let { battleAreaIds = []} = gameData.gvgCity.get(cityId);
for(let areaId of battleAreaIds) { for(let areaId of battleAreaIds) {
@@ -645,4 +645,23 @@ export async function pushTeamMoveMessage(team: GVGTeamType) {
} }
} }
} }
// —————————— 推送相关 end —————————— // // —————————— 推送相关 end —————————— //
// 外面页面上的排行榜
export async function getBattleRank(redisKey: REDIS_KEY, keyParam: KeyNameParam, myId: myIdInter) {
let r = new Rank(redisKey, keyParam);
r.setGenerFieldsFun((obj => {
if(obj instanceof LeagueRankInfo) return { rank: obj.rank, name: obj.name, score: obj.num }
if(obj instanceof RoleRankInfo) return { rank: obj.rank, name: obj.roleName, score: obj.num }
}));
let { ranks, myRank } = await r.getRankListWithMyRank(myId);
if (!myRank) {
if(redisKey == REDIS_KEY.GVG_BATTLE_RANK) {
myRank = await r.generMyRankWithRole(myId.roleId, 0, 0);
} else if (redisKey == REDIS_KEY.GVG_BATTLE_LEAGUE_RANK) {
myRank = await r.generMyRankWithLeague(myId.leagueCode, 0, 0);
}
}
return { ranks, myRank }
}

View File

@@ -205,8 +205,8 @@ export default class GVGTeam extends BaseModel {
return team; return team;
} }
public static async findRobotTeams(groupKey: string, cityId: number) { public static async findRobotTeams(configId: number, groupKey: string, cityId: number) {
const team: GVGTeamType[] = await GVGTeamModel.find({ groupKey, cityId, isRobot: true }).lean(); const team: GVGTeamType[] = await GVGTeamModel.find({ configId, groupKey, cityId, isRobot: true }).lean();
return team; return team;
} }