🐞 fix(gvg): 添加情报页面
This commit is contained in:
@@ -2,7 +2,7 @@ import { Application, BackendSession, ChannelService, HandlerService, pinus } fr
|
||||
import { GVG_ITEM, DATA_NAME, GVG_ACTIVE_TYPE, GVG_PERIOD, GVG_SERVER_TYPE, ITEM_CHANGE_REASON, LEAGUE_JOB, LEAGUE_MANAGE_TYPE, STATUS, GVG_REC_TYPE, TASK_TYPE, GVG_TECH_TYPE, PUSH_ROUTE } from "../../../consts";
|
||||
import { GVGLeagueModel } from "../../../db/GVGLeague";
|
||||
import { GVGLeaguePrepareModel } from "../../../db/GVGLeaguePrepare";
|
||||
import { GVGMainData, LeagueContributeInfo, LeagueMemberContributeInfo, LeagueMemberListInfo } from "../../../domain/gvgField/returnData";
|
||||
import { GuardCityInfoPage, GVGMainData, LeagueContributeInfo, LeagueMemberContributeInfo, LeagueRankInInfoPage } from "../../../domain/gvgField/returnData";
|
||||
import { getRandEelm, resResult } from "../../../pubUtils/util";
|
||||
import { calLeagueCe, getGroupIdOfServer, getGroupKey, getGVGConfig, getGVGPeriodData, getGVGServerType, getServerTypeByTime } from "../../../services/gvg/gvgService";
|
||||
import { autoCreateLeague, checkCanChooseJob, checkCanPrepare, checkLeagueAuth, getMyAuth } from "../../../services/gvg/gvgTeamService";
|
||||
@@ -25,6 +25,8 @@ import { getFightTimeByPeriod, getMyVestiges, getVestiges } from "../../../servi
|
||||
import { getSeconds } from "../../../pubUtils/timeUtil";
|
||||
import { GVGVestigeRankModel } from "../../../db/GVGVestigeRank";
|
||||
import { addTechActivateMessage, addTechUnlockMessage } from "../../../services/gvg/gvgRecService";
|
||||
import { GuildModel } from "../../../db/Guild";
|
||||
import { GVGCityModel } from "../../../db/GVGCity";
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -461,6 +463,78 @@ export class GVGHandler {
|
||||
});
|
||||
}
|
||||
|
||||
// 情报页面:联军排名
|
||||
async getLeagueRankInfo(msg: {}, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
const { configId } = getGVGConfig();
|
||||
const groupKey = await getGroupKey(serverId);
|
||||
|
||||
let myLeague = await GVGLeagueModel.findLeagueByGuild(guildCode);
|
||||
if(!myLeague) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
||||
|
||||
const prepares = await GVGLeaguePrepareModel.getLvRank(configId);
|
||||
const leagues = await GVGLeagueModel.findByCodes(prepares.map(cur => cur.leagueCode));
|
||||
const guilds = await GuildModel.findByCodesWithoutPopulate(leagues.reduce((pre, cur) => [...pre, ...cur.guildCodes], []));
|
||||
const cities = await GVGCityModel.findGuardCity(configId, groupKey);
|
||||
|
||||
let ranks: LeagueRankInInfoPage[] = [], myRank: LeagueRankInInfoPage = undefined;
|
||||
prepares.forEach((prepare, index) => {
|
||||
let league = leagues.find(cur => cur.leagueCode == prepare.leagueCode);
|
||||
if(!league) return;
|
||||
let leagueGuilds = guilds.filter(cur => cur.leagueCode == league.leagueCode);
|
||||
let leagueCe = leagueGuilds.reduce((pre, cur) => pre + cur.guildCe, 0);
|
||||
let guardCities = cities.filter(cur => cur.guardLeague == league.leagueCode).map(cur => cur.cityId);
|
||||
let data = new LeagueRankInInfoPage(index + 1, league, prepare, leagueCe, guardCities);
|
||||
if(myLeague.leagueCode == league.leagueCode) myRank = data;
|
||||
ranks.push(data);
|
||||
});
|
||||
|
||||
if(!myRank) {
|
||||
let myGuilds = await GuildModel.findByCodes(myLeague.guildCodes);
|
||||
let leagueCe = myGuilds.reduce((pre, cur) => pre + cur.guildCe, 0);
|
||||
let guardCities = cities.filter(cur => cur.guardLeague == myLeague.leagueCode).map(cur => cur.cityId);
|
||||
myRank = new LeagueRankInInfoPage(0, myLeague, null, leagueCe, guardCities);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
ranks, myRank
|
||||
})
|
||||
}
|
||||
|
||||
// 情报页面:城池占领
|
||||
async getGuardCityInfo(msg: {}, session: BackendSession) {
|
||||
|
||||
const serverId = session.get('serverId');
|
||||
|
||||
const { configId } = getGVGConfig();
|
||||
const groupKey = await getGroupKey(serverId);
|
||||
|
||||
const cities = await GVGCityModel.findGuardCity(configId, groupKey);
|
||||
const leagueCodes = cities.map(cur => cur.guardLeague);
|
||||
const leagues = await GVGLeagueModel.findByCodes(leagueCodes);
|
||||
const prepares = await GVGLeaguePrepareModel.findByLeagueCodes(configId, leagueCodes);
|
||||
const guilds = await GuildModel.findByCodesWithoutPopulate(leagues.reduce((pre, cur) => [...pre, ...cur.guildCodes], []));
|
||||
|
||||
const result: GuardCityInfoPage[] = [];
|
||||
for(let { cityId, guardLeagueCode } of result) {
|
||||
let league = leagues.find(cur => cur.leagueCode == guardLeagueCode);
|
||||
if(!league) continue;
|
||||
let prepare = prepares.find(cur => cur.leagueCode == guardLeagueCode);
|
||||
let leagueGuilds = guilds.filter(cur => cur.leagueCode == league.leagueCode);
|
||||
let leagueCe = leagueGuilds.reduce((pre, cur) => pre + cur.guildCe, 0);
|
||||
|
||||
let data = new GuardCityInfoPage(cityId);
|
||||
data.setGuardLeague(league, prepare, leagueCe);
|
||||
}
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
cities: result
|
||||
})
|
||||
}
|
||||
|
||||
// 获取道具
|
||||
async debugAddLeagueItem(msg: { id: number, count: number }, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
@@ -490,10 +564,4 @@ export class GVGHandler {
|
||||
const result = await handleGVGCost(roleId, myLeague.leagueCode, sid, leagueItems, items, ITEM_CHANGE_REASON.DEBUG);
|
||||
return resResult(STATUS.SUCCESS, { result });
|
||||
}
|
||||
|
||||
async getServerType(msg: { time: string }, session: BackendSession) {
|
||||
let t = new Date(msg.time);
|
||||
let serverType = getServerTypeByTime(getSeconds(t));
|
||||
return resResult(STATUS.SUCCESS, { serverType });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user