✨ feat(gvg): 添加红点
This commit is contained in:
@@ -283,7 +283,7 @@ export class GuildHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let result = await getMyGuildInfo(roleId, sid, userGuild, guild, serverId, session);
|
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 });
|
return resResult(STATUS.SUCCESS, { ...result, gvg });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { pinus } from "pinus";
|
|||||||
import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig";
|
import { GVGConfigModel, GVGConfigType } from "../../db/GVGConfig";
|
||||||
import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil";
|
import { getTimeFun, getZeroPoint, getZeroPointOfTime, nowSeconds, WEEK_TO_SECOND } from "../../pubUtils/timeUtil";
|
||||||
import { getAllServerCreateTime, getServerCreateTime } from "../redisService";
|
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 { GVGLeagueModel, GVGLeagueType } from "../../db/GVGLeague";
|
||||||
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
|
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
|
||||||
import { GVGServerGroupModel } from "../../db/GVGServerGroup";
|
import { GVGServerGroupModel } from "../../db/GVGServerGroup";
|
||||||
@@ -12,6 +12,17 @@ import { GVG } from "../../pubUtils/dicParam";
|
|||||||
import { ServerlistModel } from "../../db/Serverlist";
|
import { ServerlistModel } from "../../db/Serverlist";
|
||||||
import { GuildModel, GuildType } from "../../db/Guild";
|
import { GuildModel, GuildType } from "../../db/Guild";
|
||||||
import { checkHasCities } from "./gvgBattleService";
|
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() {
|
export async function createNewGVGConfig() {
|
||||||
@@ -187,15 +198,28 @@ export async function getServersByGroupId(groupId: number) {
|
|||||||
}).map(obj => obj.serverId);
|
}).map(obj => obj.serverId);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getGVGInfoInGuild(guild: GuildType) {
|
export async function getGVGInfoInGuild(roleId: string, guild: GuildType) {
|
||||||
let hasLeague = !!guild.leagueCode;
|
let hasLeague = !!guild.leagueCode;
|
||||||
let serverId = guild.serverId;
|
let serverId = guild.serverId;
|
||||||
let { configId, period, countdownTime } = getGVGPeriodData();
|
let { configId, period, countdownTime } = getGVGPeriodData();
|
||||||
let type = await getGVGServerType(serverId);
|
let type = await getGVGServerType(serverId);
|
||||||
return {
|
|
||||||
hasLeague,
|
if(hasLeague) {
|
||||||
configId, period, countdownTime,
|
return {
|
||||||
type
|
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) {
|
export async function checkGVGPeriod(p : GVG_PERIOD) {
|
||||||
let { period } = getGVGPeriodData();
|
let { period } = getGVGPeriodData();
|
||||||
return period == p;
|
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 }
|
||||||
}
|
}
|
||||||
@@ -41,6 +41,11 @@ export default class GVGLeagueApply extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async findApplyFromLeagueWithoutPopulate(leagueCode: string) {
|
||||||
|
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ leagueCode, type: GVG_APPLY_TYPE.APPLY }).select('_id').lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static async findApplyFromLeague(leagueCode: string) {
|
public static async findApplyFromLeague(leagueCode: string) {
|
||||||
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ leagueCode, type: GVG_APPLY_TYPE.APPLY })
|
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ leagueCode, type: GVG_APPLY_TYPE.APPLY })
|
||||||
.select({ _id: 0, guild: 1, guildCode: 1 })
|
.select({ _id: 0, guild: 1, guildCode: 1 })
|
||||||
@@ -63,6 +68,11 @@ export default class GVGLeagueApply extends BaseModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async findInviteFromGuildWithoutPopulate(guildCode: string) {
|
||||||
|
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ guildCode, type: GVG_APPLY_TYPE.INVITE }).select('_id').lean();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public static async findInviteFromGuild(guildCode: string) {
|
public static async findInviteFromGuild(guildCode: string) {
|
||||||
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ guildCode, type: GVG_APPLY_TYPE.INVITE })
|
const result: GVGLeagueApplyType[] = await GVGLeagueApplyModel.find({ guildCode, type: GVG_APPLY_TYPE.INVITE })
|
||||||
.select({ _id: 0, guild: 1, guildCode: 1 })
|
.select({ _id: 0, guild: 1, guildCode: 1 })
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export default class GVGUserItem extends BaseModel {
|
|||||||
expireTime: number;
|
expireTime: number;
|
||||||
|
|
||||||
public static async findByRole(configId: number, leagueCode: string, roleId: string) {
|
public static async findByRole(configId: number, leagueCode: string, roleId: string) {
|
||||||
const result: GVGUserItemType[] = await GVGUserItemModel.find({ configId, leagueCode, roleId, expireTime: { $gte: nowSeconds() } }, { _id: 0, id: 1, count: 1 }).lean();
|
const result: GVGUserItemType[] = await GVGUserItemModel.find({ configId, leagueCode, roleId, expireTime: { $gte: nowSeconds() }, count: { $gt: 0 } }, { _id: 0, id: 1, count: 1 }).lean();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { RoleType } from "../../db/Role";
|
import { RoleType } from "../../db/Role";
|
||||||
import { GVGLeagueType } from "../../db/GVGLeague";
|
import { GVGLeagueType } from "../../db/GVGLeague";
|
||||||
import { GVGLeaguePrepareType } from "../../db/GVGLeaguePrepare";
|
import { GVGLeaguePrepareType, Tech } from "../../db/GVGLeaguePrepare";
|
||||||
import { GVGUserDataType } from "../../db/GVGUserData";
|
import { GVGUserDataType } from "../../db/GVGUserData";
|
||||||
import { GuildType } from "../../db/Guild";
|
import { GuildType } from "../../db/Guild";
|
||||||
import { GVGLeagueFarmType } from "../../db/GVGLeagueFarm";
|
import { GVGLeagueFarmType } from "../../db/GVGLeagueFarm";
|
||||||
@@ -82,9 +82,11 @@ export class GVGMainData {
|
|||||||
// 内政相关
|
// 内政相关
|
||||||
resources: LeagueResource = new LeagueResource(); // 联盟的物资
|
resources: LeagueResource = new LeagueResource(); // 联盟的物资
|
||||||
activeTech: number[] = []; // 已激活了的科技树的id
|
activeTech: number[] = []; // 已激活了的科技树的id
|
||||||
|
techQueue: Tech[];
|
||||||
maxMemberCnt: number; // 进入备战期总玩家人数
|
maxMemberCnt: number; // 进入备战期总玩家人数
|
||||||
producerCnt: number; // 贤臣人数
|
producerCnt: number; // 贤臣人数
|
||||||
fighterCnt: number; // 猛将人数
|
fighterCnt: number; // 猛将人数
|
||||||
|
constribute: LeagueContributeInfo[];
|
||||||
|
|
||||||
sumTime: number = 0; // 今日贡献结算时间 10位时间戳
|
sumTime: number = 0; // 今日贡献结算时间 10位时间戳
|
||||||
|
|
||||||
@@ -147,6 +149,14 @@ export class GVGMainData {
|
|||||||
setCities(cities: number[]) {
|
setCities(cities: number[]) {
|
||||||
this.cities = cities;
|
this.cities = cities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTechQueue(techQueue: Tech[]) {
|
||||||
|
this.techQueue = techQueue;
|
||||||
|
}
|
||||||
|
|
||||||
|
setConstribute(constribute: LeagueContributeInfo[]) {
|
||||||
|
this.constribute = constribute;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class LeagueListInfo {
|
export class LeagueListInfo {
|
||||||
|
|||||||
Reference in New Issue
Block a user