活动:限时排行榜

This commit is contained in:
luying
2022-03-03 14:11:56 +08:00
parent d0eb46ece4
commit f099daf80b
27 changed files with 871 additions and 151 deletions

View File

@@ -5,13 +5,13 @@ import { nowSeconds, getTimeFun, getSeconds, getZeroPoint } from '../pubUtils/ti
import { getTodayGuildActivity, gameData } from '../pubUtils/data';
import { pvpSeasonEnd } from './pvpService';
import { getAllOnlineRoles, getAllServers, delGuildActivityRank } from './redisService';
import { GUILD_ACTIVITY_TYPE, REFRESH_TIME, SEND_NAME, SERVER_OPEN_TIME, COUNTER, AUCTION_TIME, GM_MAIL_TYPE, SERVER_STATUS, SERVER_TIMER } from '../consts';
import { GUILD_ACTIVITY_TYPE, REFRESH_TIME, SEND_NAME, SERVER_OPEN_TIME, COUNTER, AUCTION_TIME, GM_MAIL_TYPE, SERVER_STATUS, SERVER_TIMER, ACTIVITY_TYPE, getRedisKeyByRankType, MAIL_TYPE, REDIS_KEY } from '../consts';
import { RoleModel } from '../db/Role';
import { pinus } from 'pinus';
import { indexOf } from 'underscore';
import { PvpSeasonResultModel } from '../db/PvpSeasonResult';
import { settleGuildWeekly } from './guildService';
import { sendMailByContent, SendMailFun } from './mailService';
import { sendMailByContent, SendMailFun, sendMailToGuildByContent } from './mailService';
import { getGuildActivityByDic, sendEndMsgToAll, autoDeclare, sendGuildActivityStatus } from './guildActivity/guildActivityService';
import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService';
import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
@@ -35,6 +35,11 @@ import { infologger } from '../util/logger';
import { MailModel, MailType } from '../db/Mail';
import { GroupMailModel, GroupMailType } from '../db/GroupMail';
import { ServerMailModel, ServerMailType } from '../db/ServerMail';
import { ActivityModel } from '../db/Activity';
import { TimeLimitRankData } from '../domain/activityField/timeLimitRankField';
import { GuildRankInfo, RoleRankInfo } from '../domain/rank';
import { stringToRewardInter } from './activity/giftPackageService';
import { sendRankMail, takeSnapshot } from './activity/timeLimitRankService';
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
@@ -89,6 +94,9 @@ export async function init() {
// 自动开服
await initAutoCreateServer();
// 限时排行榜
await initTimeLimitRank();
}
// —————————————— PVP 及赛季相关 —————————————— //
@@ -673,4 +681,50 @@ async function autoCreateServerSchedule(region: RegionType) {
await createNewServer(region, (latestServer?.serverId||0) + 1, params);
}
}
// —————————————— 自动开服 end —————————————— //
// —————————————— 自动开服 end —————————————— //
// —————————————— 活动 start —————————————— //
async function initTimeLimitRank() {
let servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
let activityGroupId: number[] = [];
for(let { activityGroupId: ids } of servers) {
for(let id of ids) {
if(activityGroupId.indexOf(id) == -1) activityGroupId.push(id);
}
}
let activities = await ActivityModel.findActivityByType(activityGroupId, ACTIVITY_TYPE.TIME_LIMIT_RANK, 1);
for(let activity of activities) {
let data = new TimeLimitRankData(activity, 0);
if(data.sendMailTime > Date.now()) {
await setSendRankMailSchedule(data);
}
if(data.rankEndTime > Date.now() && data.needSnapshot()) {
await setTakeRankSnapshotSchedule(data, activity.groupId);
}
}
}
async function setSendRankMailSchedule(data: TimeLimitRankData) {
if(scheduledJobs[`rankMail${data.activityId}`]) {
scheduledJobs[`rankMail${data.activityId}`].cancel();
}
scheduleJob(`rankMail${data.activityId}`, data.sendMailTime, async () => {
await sendRankMail(data);
})
}
async function setTakeRankSnapshotSchedule(data: TimeLimitRankData, groupId: number) {
if(scheduledJobs[`snapshot${data.activityId}`]) {
scheduledJobs[`snapshot${data.activityId}`].cancel();
}
scheduleJob(`snapshot${data.activityId}`, data.rankEndTime, async () => {
await takeSnapshot(data, groupId);
})
}
// —————————————— 活动 end —————————————— //