活动:修改显示排行榜定时器

This commit is contained in:
luying
2022-05-11 21:55:36 +08:00
parent 2e23263e56
commit 6284fa02f7
4 changed files with 31 additions and 57 deletions
+15 -43
View File
@@ -695,8 +695,6 @@ async function initTimeLimitRank() {
} }
export async function updateTimeLimitRank(activities: ActivityModelType[]) { export async function updateTimeLimitRank(activities: ActivityModelType[]) {
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) { for(let activity of activities) {
let { activityId } = activity let { activityId } = activity
let group = await ActivityGroupModel.findByActivity(activityId); let group = await ActivityGroupModel.findByActivity(activityId);
@@ -706,66 +704,40 @@ export async function updateTimeLimitRank(activities: ActivityModelType[]) {
if(env == pinus.app.get('env')) { if(env == pinus.app.get('env')) {
let data = new TimeLimitRankData(activity, 0, openTime); let data = new TimeLimitRankData(activity, 0, openTime);
if(data.sendMailTime > Date.now()) { if(data.sendMailTime > Date.now()) {
if(!sendMailDataMap.has(activityId)) { await setSendRankMailSchedule(activityId, serverId, data);
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(data.rankEndTime > Date.now() && data.needSnapshot()) {
if(!takeSnapDataMap.has(activityId)) { await setTakeRankSnapshotSchedule(activityId, serverId, data);
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(sendMailTime: number, activityId: number, arr: { serverId: number, data: TimeLimitRankData}[]) { async function setSendRankMailSchedule(activityId: number, serverId: number, data: TimeLimitRankData) {
console.log('########### setSendRankMailSchedule1 ########', sendMailTime, activityId, arr.length) console.log('########### setSendRankMailSchedule1 ########', activityId, serverId, data.sendMailTime)
if(scheduledJobs[`rankMail_${sendMailTime}_${activityId}`]) { if(scheduledJobs[`rankMail_${serverId}_${activityId}`]) {
scheduledJobs[`rankMail_${sendMailTime}_${activityId}`].cancel(); scheduledJobs[`rankMail_${serverId}_${activityId}`].cancel();
} }
scheduleJob(`rankMail_${sendMailTime}_${activityId}`, sendMailTime, async () => { scheduleJob(`rankMail_${serverId}_${activityId}`, data.sendMailTime, async () => {
console.log('########### setSendRankMailSchedule2 ########') console.log('########### setSendRankMailSchedule2 ########')
for(let { serverId, data } of arr) { await sendRankMail(data, serverId);
await sendRankMail(data, serverId); });
}
})
} }
async function setTakeRankSnapshotSchedule(rankEndTime: number, activityId: number, arr: { serverId: number, data: TimeLimitRankData}[]) { async function setTakeRankSnapshotSchedule(activityId: number, serverId: number, data: TimeLimitRankData) {
console.log('########### setTakeRankSnapshotSchedule1 ########', rankEndTime, activityId, arr.length) console.log('########### setTakeRankSnapshotSchedule1 ########', activityId, serverId, data.rankEndTime)
if(scheduledJobs[`snapshot_${rankEndTime}_${activityId}`]) { if(scheduledJobs[`snapshot_${serverId}_${activityId}`]) {
scheduledJobs[`snapshot_${rankEndTime}_${activityId}`].cancel(); scheduledJobs[`snapshot_${serverId}_${activityId}`].cancel();
} }
scheduleJob(`snapshot_${rankEndTime}_${activityId}`, rankEndTime, async () => { scheduleJob(`snapshot_${serverId}_${activityId}`, data.rankEndTime, async () => {
console.log('########### setTakeRankSnapshotSchedule2 ########') console.log('########### setTakeRankSnapshotSchedule2 ########')
for(let { serverId, data } of arr) { await takeSnapshot(data, serverId);
await takeSnapshot(data, serverId);
}
}) })
} }
// —————————————— 活动 end —————————————— // // —————————————— 活动 end —————————————— //
+1 -1
View File
@@ -23,7 +23,7 @@ export default class Activity extends Service {
return ctx.service.utils.resResult(STATUS.SUCCESS, { return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => { list: list.map(cur => {
return { return {
...cur, beginTime: cur.beginTime.getTime(), endTime: cur.endTime.getTime(), env: ctx.app.config.realEnv ...cur, beginTime: cur.beginTime?.getTime()||0, endTime: cur.endTime?.getTime()||0, env: ctx.app.config.realEnv
} }
}), total }), total
}); });
+9 -9
View File
@@ -119,25 +119,25 @@ export abstract class ActivityBase {
export class ActivityInRemote { export class ActivityInRemote {
groupId: number; // 组Id groupId: number; // 组Id
activityId: number; // 活动Id activityId: number; // 活动Id
beginTime: number; // 开启时间 timeType=3 beginTime: number = 0; // 开启时间 timeType=3
endTime: number; // 结束时间 timeType=3 endTime: number = 0; // 结束时间 timeType=3
type: number; // 活动类型 type: number; // 活动类型
data: string; // 活动表中的数据 data: string; // 活动表中的数据
timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime) timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime)
days: number; // 活动持续天数 timeType=1、2 days: number = 0; // 活动持续天数 timeType=1、2
delayDay: number; // 迟几天开启活动,0表示按照规定时间开启 delayDay: number = 0; // 迟几天开启活动,0表示按照规定时间开启
effectDay: number; // 生效天数 effectDay: number = 0; // 生效天数
interval: number; // 周期性活动时间间隔,秒 interval: number = 0; // 周期性活动时间间隔,天
hideDayByServer: number; hideDayByServer: number = 0;
isEnable: boolean; isEnable: boolean;
name: string; name: string;
constructor(activity?: ActivityModelType) { constructor(activity?: ActivityModelType) {
this.groupId = activity.groupId; this.groupId = activity.groupId;
this.activityId = activity.activityId; this.activityId = activity.activityId;
this.beginTime = activity.beginTime.getTime(); if(activity.beginTime) this.beginTime = activity.beginTime.getTime();
this.endTime = activity.endTime.getTime(); if(activity.endTime) this.endTime = activity.endTime.getTime();
this.type = activity.type; this.type = activity.type;
this.data = activity.data; this.data = activity.data;
this.timeType = activity.timeType; this.timeType = activity.timeType;
@@ -1,3 +1,4 @@
import moment = require('moment');
import { RANK_TYPE } from '../../consts'; import { RANK_TYPE } from '../../consts';
import { ActivityModelType } from '../../db/Activity'; import { ActivityModelType } from '../../db/Activity';
import { ActivityBase } from './activityField'; import { ActivityBase } from './activityField';
@@ -11,8 +12,9 @@ interface TimeLimitRewardInDb {
interface TimeLimitInDb { interface TimeLimitInDb {
rankType: number; // 排行榜类型 rankType: number; // 排行榜类型
hid: number; // 如果有单个武将排行,这里写武将id hid: number; // 如果有单个武将排行,这里写武将id
rankEndTime: number; // 排行榜统计结束时间。13位时间戳,之后会在后台加时间筛选,在此之前先找wo rankEndDay: number; // 开始时间之后几天停止计入活动
sendMailTime: number; // 发送奖励时间。13位时间戳 rankEndTime: string; // hh:mm:ss,几点几分几秒正式计入活动
sendMailTime: number; // rankEndTime 后几秒发送邮件奖励
rankRewards: TimeLimitRewardInDb[]; // 不同排名的奖励 rankRewards: TimeLimitRewardInDb[]; // 不同排名的奖励
tabName: string; // 排行榜标签名 tabName: string; // 排行榜标签名
} }
@@ -66,8 +68,8 @@ export class TimeLimitRankData extends ActivityBase {
let dataObj: TimeLimitInDb = JSON.parse(data); let dataObj: TimeLimitInDb = JSON.parse(data);
this.rankType = dataObj.rankType; this.rankType = dataObj.rankType;
this.hid = dataObj.hid; this.hid = dataObj.hid;
this.rankEndTime = dataObj.rankEndTime; this.rankEndTime = moment(moment(this.beginTime).add(dataObj.rankEndDay, 'd').format(`YYYY-MM-DD ${this.rankEndTime}`)).valueOf() ;
this.sendMailTime = dataObj.sendMailTime; this.sendMailTime = this.rankEndTime + this.sendMailTime * 1000;
for(let rank of dataObj.rankRewards) { for(let rank of dataObj.rankRewards) {
this.rankRewards.push(new TimeLimitRankReward(rank)); this.rankRewards.push(new TimeLimitRankReward(rank));
} }