活动:修改获取活动逻辑,从serverlist上剥离
This commit is contained in:
@@ -34,6 +34,7 @@ import { ActivityModel, ActivityModelType } from '../db/Activity';
|
||||
import { TimeLimitRankData } from '../domain/activityField/timeLimitRankField';
|
||||
import { sendRankMail, takeSnapshot } from './activity/timeLimitRankService';
|
||||
import { getActivitiesByType } from './activity/activityService';
|
||||
import { ActivityGroupModel } from '../db/ActivityGroup';
|
||||
|
||||
const PER_SECOND = 1 * 1000;
|
||||
const PER_DAY = 24 * 60 * 60;
|
||||
@@ -679,61 +680,82 @@ async function autoCreateServerSchedule(region: RegionType) {
|
||||
|
||||
// —————————————— 活动 start —————————————— //
|
||||
async function initTimeLimitRank() {
|
||||
let servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let activities = await ActivityModel.findAllActivities();
|
||||
await updateTimeLimitRank(activities);
|
||||
}
|
||||
|
||||
export async function updateTimeLimitRank(activities: ActivityModelType[]) {
|
||||
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);
|
||||
let sendMailDataMap = new Map<number, Map<number, { serverId: number, data: TimeLimitRankData}[]>>(); // activityId => sendTime => data
|
||||
let takeSnapDataMap = new Map<number, Map<number, { serverId: number, data: TimeLimitRankData}[]>>(); // activityId=>rankTime=>data
|
||||
for(let activity of activities) {
|
||||
let { activityId } = activity
|
||||
let group = await ActivityGroupModel.findByActivity(activityId);
|
||||
for(let { serverIds } of group) {
|
||||
let servers = await ServerlistModel.findByServerIds(serverIds);
|
||||
for(let { env, openTime, serverId } of servers) {
|
||||
if(env == pinus.app.get('env')) {
|
||||
let data = new TimeLimitRankData(activity, 0, openTime);
|
||||
if(data.sendMailTime > Date.now()) {
|
||||
if(!sendMailDataMap.has(activityId)) {
|
||||
sendMailDataMap.set(activityId, new Map());
|
||||
}
|
||||
if(!sendMailDataMap.get(activityId).has(data.sendMailTime)) {
|
||||
sendMailDataMap.get(activityId).set(data.sendMailTime, []);
|
||||
}
|
||||
sendMailDataMap.get(activityId).get(data.sendMailTime).push({ serverId, data });
|
||||
}
|
||||
if(data.rankEndTime > Date.now() && data.needSnapshot()) {
|
||||
if(!takeSnapDataMap.has(activityId)) {
|
||||
takeSnapDataMap.set(activityId,new Map());
|
||||
}
|
||||
if(!takeSnapDataMap.get(activityId).has(data.rankEndTime)) {
|
||||
takeSnapDataMap.get(activityId).set(data.rankEndTime, []);
|
||||
}
|
||||
takeSnapDataMap.get(activityId).get(data.rankEndTime).push({ serverId, data });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for(let [activityId, map] of sendMailDataMap) {
|
||||
for(let [sendMailTime, arr] of map) {
|
||||
await setSendRankMailSchedule(sendMailTime, activityId, arr);
|
||||
}
|
||||
}
|
||||
for(let [activityId, map] of takeSnapDataMap) {
|
||||
for(let [rankEndTime, arr] of map) {
|
||||
await setTakeRankSnapshotSchedule(rankEndTime, activityId, arr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function setSendRankMailSchedule(data: TimeLimitRankData, serverId: number) {
|
||||
console.log('########### setSendRankMailSchedule1 ########')
|
||||
if(scheduledJobs[`rankMail_${serverId}_${data.activityId}`]) {
|
||||
scheduledJobs[`rankMail_${serverId}_${data.activityId}`].cancel();
|
||||
async function setSendRankMailSchedule(sendMailTime: number, activityId: number, arr: { serverId: number, data: TimeLimitRankData}[]) {
|
||||
console.log('########### setSendRankMailSchedule1 ########', sendMailTime, activityId, arr.length)
|
||||
if(scheduledJobs[`rankMail_${sendMailTime}_${activityId}`]) {
|
||||
scheduledJobs[`rankMail_${sendMailTime}_${activityId}`].cancel();
|
||||
}
|
||||
|
||||
scheduleJob(`rankMail_${serverId}_${data.activityId}`, data.sendMailTime, async () => {
|
||||
scheduleJob(`rankMail_${sendMailTime}_${activityId}`, sendMailTime, async () => {
|
||||
console.log('########### setSendRankMailSchedule2 ########')
|
||||
await sendRankMail(data, serverId);
|
||||
for(let { serverId, data } of arr) {
|
||||
await sendRankMail(data, serverId);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
async function setTakeRankSnapshotSchedule(data: TimeLimitRankData, serverId: number) {
|
||||
console.log('########### setTakeRankSnapshotSchedule1 ########')
|
||||
async function setTakeRankSnapshotSchedule(rankEndTime: number, activityId: number, arr: { serverId: number, data: TimeLimitRankData}[]) {
|
||||
console.log('########### setTakeRankSnapshotSchedule1 ########', rankEndTime, activityId, arr.length)
|
||||
|
||||
if(scheduledJobs[`snapshot${data.activityId}`]) {
|
||||
scheduledJobs[`snapshot${data.activityId}`].cancel();
|
||||
if(scheduledJobs[`snapshot_${rankEndTime}_${activityId}`]) {
|
||||
scheduledJobs[`snapshot_${rankEndTime}_${activityId}`].cancel();
|
||||
}
|
||||
|
||||
scheduleJob(`snapshot${data.activityId}`, data.rankEndTime, async () => {
|
||||
scheduleJob(`snapshot_${rankEndTime}_${activityId}`, rankEndTime, async () => {
|
||||
console.log('########### setTakeRankSnapshotSchedule2 ########')
|
||||
await takeSnapshot(data, serverId);
|
||||
for(let { serverId, data } of arr) {
|
||||
await takeSnapshot(data, serverId);
|
||||
}
|
||||
})
|
||||
}
|
||||
// —————————————— 活动 end —————————————— //
|
||||
Reference in New Issue
Block a user