活动:时间

This commit is contained in:
陆莹
2022-03-23 13:54:04 +08:00
parent 29c5ae8a0a
commit 7bb8250060
70 changed files with 456 additions and 342 deletions

View File

@@ -4,7 +4,7 @@ import { PVPConfigModel, PVPConfigType } from '../db/SystemConfig';
import { nowSeconds, getTimeFun, getSeconds } from '../pubUtils/timeUtil';
import { getTodayGuildActivity, gameData } from '../pubUtils/data';
import { pvpSeasonEnd } from './pvpService';
import { getAllOnlineRoles, getAllServers, delGuildActivityRank } from './redisService';
import { getAllOnlineRoles, getAllServers, delGuildActivityRank, getServerCreateTime } from './redisService';
import { GUILD_ACTIVITY_TYPE, REFRESH_TIME, COUNTER, AUCTION_TIME, GM_MAIL_TYPE, SERVER_TIMER, ACTIVITY_TYPE } from '../consts';
import { pinus } from 'pinus';
import { settleGuildWeekly } from './guildService';
@@ -33,6 +33,7 @@ import { ServerMailModel, ServerMailType } from '../db/ServerMail';
import { ActivityModel, ActivityModelType } from '../db/Activity';
import { TimeLimitRankData } from '../domain/activityField/timeLimitRankField';
import { sendRankMail, takeSnapshot } from './activity/timeLimitRankService';
import { getActivitiesByType } from './activity/activityService';
const PER_SECOND = 1 * 1000;
const PER_DAY = 24 * 60 * 60;
@@ -679,51 +680,51 @@ async function autoCreateServerSchedule(region: RegionType) {
// —————————————— 活动 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);
for(let { serverId } of servers) {
let serverTime = await getServerCreateTime(serverId);
let activities = await getActivitiesByType(serverId, ACTIVITY_TYPE.TIME_LIMIT_RANK);
for(let activity of activities) {
let data = new TimeLimitRankData(activity, 0, serverTime);
if(data.sendMailTime > Date.now()) {
await setSendRankMailSchedule(data, serverId);
}
if(data.rankEndTime > Date.now() && data.needSnapshot()) {
await setTakeRankSnapshotSchedule(data, serverId);
}
}
}
}
export async function updateTimeLimitRank(activities: ActivityModelType[]) {
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);
let servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
for(let { serverId, openTime } of servers) {
for(let activity of activities) {
let data = new TimeLimitRankData(activity, 0, openTime);
if(data.sendMailTime > Date.now()) {
await setSendRankMailSchedule(data, serverId);
}
if(data.rankEndTime > Date.now() && data.needSnapshot()) {
await setTakeRankSnapshotSchedule(data, serverId);
}
}
}
}
async function setSendRankMailSchedule(data: TimeLimitRankData) {
async function setSendRankMailSchedule(data: TimeLimitRankData, serverId: number) {
console.log('########### setSendRankMailSchedule1 ########')
if(scheduledJobs[`rankMail${data.activityId}`]) {
scheduledJobs[`rankMail${data.activityId}`].cancel();
if(scheduledJobs[`rankMail_${serverId}_${data.activityId}`]) {
scheduledJobs[`rankMail_${serverId}_${data.activityId}`].cancel();
}
scheduleJob(`rankMail${data.activityId}`, data.sendMailTime, async () => {
scheduleJob(`rankMail_${serverId}_${data.activityId}`, data.sendMailTime, async () => {
console.log('########### setSendRankMailSchedule2 ########')
await sendRankMail(data);
await sendRankMail(data, serverId);
})
}
async function setTakeRankSnapshotSchedule(data: TimeLimitRankData, groupId: number) {
async function setTakeRankSnapshotSchedule(data: TimeLimitRankData, serverId: number) {
console.log('########### setTakeRankSnapshotSchedule1 ########')
if(scheduledJobs[`snapshot${data.activityId}`]) {
@@ -732,7 +733,7 @@ async function setTakeRankSnapshotSchedule(data: TimeLimitRankData, groupId: num
scheduleJob(`snapshot${data.activityId}`, data.rankEndTime, async () => {
console.log('########### setTakeRankSnapshotSchedule2 ########')
await takeSnapshot(data, groupId);
await takeSnapshot(data, serverId);
})
}
// —————————————— 活动 end —————————————— //