feat(gvg): 添加红点

This commit is contained in:
luying
2023-02-18 22:19:00 +08:00
parent 4b73763e27
commit bfaaba13e0
5 changed files with 112 additions and 9 deletions
@@ -283,7 +283,7 @@ export class GuildHandler {
}
let result = await getMyGuildInfo(roleId, sid, userGuild, guild, serverId, session);
let gvg = await getGVGInfoInGuild(guild);
let gvg = await getGVGInfoInGuild(roleId, guild);
return resResult(STATUS.SUCCESS, { ...result, gvg });
}
+89 -6
View File
@@ -2,7 +2,7 @@ import { pinus } from "pinus";
import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig";
import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil";
import { getAllServerCreateTime, getServerCreateTime } from "../redisService";
import { GVG_PERIOD, GVG_SERVER_TYPE, SHOP_REFRESH_TYPE } from "../../consts";
import { GVG_PERIOD, GVG_SERVER_TYPE, LEAGUE_JOB, SHOP_REFRESH_TYPE } from "../../consts";
import { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
import { GVGServerGroupModel } from "../../db/GVGServerGroup";
@@ -12,6 +12,17 @@ import { GVG } from "../../pubUtils/dicParam";
import { ServerlistModel } from "../../db/Serverlist";
import { GuildModel, GuildType } from "../../db/Guild";
import { checkHasCities } from "./gvgBattleService";
import { GVGLeagueApplyModel } from "../../db/GVGLeagueApply";
import { GVGMainData, LeagueContributeInfo } from "../../domain/gvgField/returnData";
import { Contribute, GVGUserDataModel, GVGUserDataType } from "../../db/GVGUserData";
import { GVGUserItemModel } from "../../db/GVGUserItem";
import { GVGUserTaskModel } from "../../db/GVGUserTask";
import { getMyAuth } from "./gvgTeamService";
import { pick } from "underscore";
import { calFighterContribute, calProducerContribute } from "./gvgPrepareService";
import { calVestigeLeagueBoxRewards } from "./gvgFightService";
import { GVGVestigeLeagueRankModel } from "../../db/GVGVestigeLeagueRank";
import { GVGVestigeSumRankModel } from "../../db/GVGVestigeSumRank";
// 定时器相关
export async function createNewGVGConfig() {
@@ -187,15 +198,28 @@ export async function getServersByGroupId(groupId: number) {
}).map(obj => obj.serverId);
}
export async function getGVGInfoInGuild(guild: GuildType) {
export async function getGVGInfoInGuild(roleId: string, guild: GuildType) {
let hasLeague = !!guild.leagueCode;
let serverId = guild.serverId;
let { configId, period, countdownTime } = getGVGPeriodData();
let type = await getGVGServerType(serverId);
return {
hasLeague,
configId, period, countdownTime,
type
if(hasLeague) {
return {
hasLeague,
configId, period, countdownTime,
type,
applyCnt: await getApplyCnt(guild.leagueCode),
...await getMainData(roleId, guild.leagueCode, configId, period, countdownTime, type),
leagueDetailRank: await getLeagueRankBox(configId, guild.leagueCode, roleId),
}
} else {
return {
hasLeague,
configId, period, countdownTime,
type,
invitationCnt: await getInviteCnt(guild.code)
}
}
}
@@ -209,4 +233,63 @@ export async function calLeagueCe(league: GVGLeagueType) {
export async function checkGVGPeriod(p : GVG_PERIOD) {
let { period } = getGVGPeriodData();
return period == p;
}
// —————— 红点相关 —————— //
// 邀请
export async function getInviteCnt(guildCode: string) {
let invitation = await GVGLeagueApplyModel.findInviteFromGuildWithoutPopulate(guildCode);
return invitation.length
}
// 申请
export async function getApplyCnt(leagueCode: string) {
let applies = await GVGLeagueApplyModel.findApplyFromLeagueWithoutPopulate(leagueCode);
return applies.length
}
export async function getMainData(roleId: string, leagueCode: string, configId: number, period: number, countdownTime: number, serverType: number) {
let data = new GVGMainData(configId, period, countdownTime, serverType);
let league = await GVGLeagueModel.findByCode(leagueCode);
if(league) {
data.setLeague(league, {});
let leaguePrepare = await GVGLeaguePrepareModel.findByLeague(configId, league.leagueCode);
data.setLeagueParpare(leaguePrepare);
data.setTechQueue(leaguePrepare.techQueue);
let userData = await GVGUserDataModel.findByRole(configId, league.leagueCode, roleId);
let items = await GVGUserItemModel.findByRole(configId, league.leagueCode, roleId);
let tasks = await GVGUserTaskModel.findByRole(configId, league.leagueCode, roleId);
data.setPlayerInfo(userData, getMyAuth(league, roleId), undefined, undefined, items, tasks);
data.setLeagueCe(await calLeagueCe(league));
data.setConstribute(await getContribute(userData));
}
let myInfo = pick(data.myInfo, ['auth', 'items', 'tasks', 'receivedLv']);
return { ...pick(data, ['guildCnt', 'leagueLv', 'techQueue', 'constribute']), myInfo }
}
export async function getContribute(myUserData: GVGUserDataType) {
const { contribute = new Contribute(), box = [] } = myUserData||{};
const result: LeagueContributeInfo[] = [];
for(let curJob of [LEAGUE_JOB.PRODUCER, LEAGUE_JOB.FIGHTER]) {
let sumContribute = curJob == LEAGUE_JOB.PRODUCER? calProducerContribute(contribute): calFighterContribute(contribute);
let boxReceived = box.filter(boxId => {
let dicBox = gameData.gvgContributeBox.get(boxId);
return dicBox.job == curJob;
});
let disObj = new LeagueContributeInfo(curJob, sumContribute, boxReceived);
result.push(disObj)
}
return result;
}
export async function getLeagueRankBox(configId: number, leagueCode: string, roleId: string) {
let canReceiveLeagueRanks = await GVGVestigeLeagueRankModel.getCanReceiveRanks(configId, leagueCode);
let canReceivePlayerRanks = await GVGVestigeSumRankModel.getCanReceiveRanks(configId, roleId);
let { canReceiveBox } = calVestigeLeagueBoxRewards(canReceiveLeagueRanks, canReceivePlayerRanks);
return { canReceiveBox }
}