diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index e3578afcd..55a2a8228 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -695,8 +695,6 @@ async function initTimeLimitRank() { } export async function updateTimeLimitRank(activities: ActivityModelType[]) { - let sendMailDataMap = new Map>(); // activityId => sendTime => data - let takeSnapDataMap = new Map>(); // activityId=>rankTime=>data for(let activity of activities) { let { activityId } = activity let group = await ActivityGroupModel.findByActivity(activityId); @@ -706,66 +704,40 @@ export async function updateTimeLimitRank(activities: ActivityModelType[]) { 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 }); + await setSendRankMailSchedule(activityId, 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 }); + await setTakeRankSnapshotSchedule(activityId, 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}[]) { - console.log('########### setSendRankMailSchedule1 ########', sendMailTime, activityId, arr.length) - if(scheduledJobs[`rankMail_${sendMailTime}_${activityId}`]) { - scheduledJobs[`rankMail_${sendMailTime}_${activityId}`].cancel(); +async function setSendRankMailSchedule(activityId: number, serverId: number, data: TimeLimitRankData) { + console.log('########### setSendRankMailSchedule1 ########', activityId, serverId, data.sendMailTime) + if(scheduledJobs[`rankMail_${serverId}_${activityId}`]) { + scheduledJobs[`rankMail_${serverId}_${activityId}`].cancel(); } - scheduleJob(`rankMail_${sendMailTime}_${activityId}`, sendMailTime, async () => { + scheduleJob(`rankMail_${serverId}_${activityId}`, data.sendMailTime, async () => { 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}[]) { - console.log('########### setTakeRankSnapshotSchedule1 ########', rankEndTime, activityId, arr.length) +async function setTakeRankSnapshotSchedule(activityId: number, serverId: number, data: TimeLimitRankData) { + console.log('########### setTakeRankSnapshotSchedule1 ########', activityId, serverId, data.rankEndTime) - if(scheduledJobs[`snapshot_${rankEndTime}_${activityId}`]) { - scheduledJobs[`snapshot_${rankEndTime}_${activityId}`].cancel(); + if(scheduledJobs[`snapshot_${serverId}_${activityId}`]) { + scheduledJobs[`snapshot_${serverId}_${activityId}`].cancel(); } - scheduleJob(`snapshot_${rankEndTime}_${activityId}`, rankEndTime, async () => { + scheduleJob(`snapshot_${serverId}_${activityId}`, data.rankEndTime, async () => { console.log('########### setTakeRankSnapshotSchedule2 ########') - for(let { serverId, data } of arr) { - await takeSnapshot(data, serverId); - } + await takeSnapshot(data, serverId); }) } // —————————————— 活动 end —————————————— // \ No newline at end of file diff --git a/gm-server/app/service/Activity.ts b/gm-server/app/service/Activity.ts index c072e4669..b5fd4b87c 100644 --- a/gm-server/app/service/Activity.ts +++ b/gm-server/app/service/Activity.ts @@ -23,7 +23,7 @@ export default class Activity extends Service { return ctx.service.utils.resResult(STATUS.SUCCESS, { list: list.map(cur => { 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 }); diff --git a/shared/domain/activityField/activityField.ts b/shared/domain/activityField/activityField.ts index 56f74e879..7a375b3d2 100644 --- a/shared/domain/activityField/activityField.ts +++ b/shared/domain/activityField/activityField.ts @@ -119,25 +119,25 @@ export abstract class ActivityBase { export class ActivityInRemote { groupId: number; // 组Id activityId: number; // 活动Id - beginTime: number; // 开启时间 timeType=3 - endTime: number; // 结束时间 timeType=3 + beginTime: number = 0; // 开启时间 timeType=3 + endTime: number = 0; // 结束时间 timeType=3 type: number; // 活动类型 data: string; // 活动表中的数据 timeType: number; // 活动时间类型 ACTIVITY_TIME_TYPE 1.服务器开启时间 2.角色创建时间 3.指定开启时间(beginTime,endTime) - days: number; // 活动持续天数 timeType=1、2 - delayDay: number; // 迟几天开启活动,0表示按照规定时间开启 - effectDay: number; // 生效天数 - interval: number; // 周期性活动时间间隔,秒 - hideDayByServer: number; + days: number = 0; // 活动持续天数 timeType=1、2 + delayDay: number = 0; // 迟几天开启活动,0表示按照规定时间开启 + effectDay: number = 0; // 生效天数 + interval: number = 0; // 周期性活动时间间隔,天 + hideDayByServer: number = 0; isEnable: boolean; name: string; constructor(activity?: ActivityModelType) { this.groupId = activity.groupId; this.activityId = activity.activityId; - this.beginTime = activity.beginTime.getTime(); - this.endTime = activity.endTime.getTime(); + if(activity.beginTime) this.beginTime = activity.beginTime.getTime(); + if(activity.endTime) this.endTime = activity.endTime.getTime(); this.type = activity.type; this.data = activity.data; this.timeType = activity.timeType; diff --git a/shared/domain/activityField/timeLimitRankField.ts b/shared/domain/activityField/timeLimitRankField.ts index 4d7a4a34a..d3d9796ad 100644 --- a/shared/domain/activityField/timeLimitRankField.ts +++ b/shared/domain/activityField/timeLimitRankField.ts @@ -1,3 +1,4 @@ +import moment = require('moment'); import { RANK_TYPE } from '../../consts'; import { ActivityModelType } from '../../db/Activity'; import { ActivityBase } from './activityField'; @@ -11,8 +12,9 @@ interface TimeLimitRewardInDb { interface TimeLimitInDb { rankType: number; // 排行榜类型 hid: number; // 如果有单个武将排行,这里写武将id - rankEndTime: number; // 排行榜统计结束时间。13位时间戳,之后会在后台加时间筛选,在此之前先找wo - sendMailTime: number; // 发送奖励时间。13位时间戳 + rankEndDay: number; // 开始时间之后几天停止计入活动 + rankEndTime: string; // hh:mm:ss,几点几分几秒正式计入活动 + sendMailTime: number; // rankEndTime 后几秒发送邮件奖励 rankRewards: TimeLimitRewardInDb[]; // 不同排名的奖励 tabName: string; // 排行榜标签名 } @@ -66,8 +68,8 @@ export class TimeLimitRankData extends ActivityBase { let dataObj: TimeLimitInDb = JSON.parse(data); this.rankType = dataObj.rankType; this.hid = dataObj.hid; - this.rankEndTime = dataObj.rankEndTime; - this.sendMailTime = dataObj.sendMailTime; + this.rankEndTime = moment(moment(this.beginTime).add(dataObj.rankEndDay, 'd').format(`YYYY-MM-DD ${this.rankEndTime}`)).valueOf() ; + this.sendMailTime = this.rankEndTime + this.sendMailTime * 1000; for(let rank of dataObj.rankRewards) { this.rankRewards.push(new TimeLimitRankReward(rank)); }