diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index a6ab0c204..0977bf245 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -104,17 +104,7 @@ export class GmHandler { await f.pushToUsers(); // await f.saveRecord(uid); } - let sendTime = ''; - if(isPass) { - if(timeType == MAIL_TIME_TYPE.IMMEDIATE) { - sendTime = moment().format('YYYY-MM-DD HH:mm:ss'); - } else if (timeType == MAIL_TIME_TYPE.DELAY) { - sendTime = moment(startTime * 1000).format('YYYY-MM-DD HH:mm:ss'); - } else if (timeType == MAIL_TIME_TYPE.CIRCLE) { - sendTime = (circleDay == 0?'每天': '每周'+circleDay) + ' ' + circleHour; - } - } - await GMMailModel.updateMailById(id, { status: isPass? GM_MAIL_STATUS.PASS: GM_MAIL_STATUS.NOT_PASS, viewAt: new Date(), viewBy: uid, sendTime }, uid); + await GMMailModel.updateMailById(id, { status: isPass? GM_MAIL_STATUS.PASS: GM_MAIL_STATUS.NOT_PASS, viewAt: new Date(), viewBy: uid }, uid); return resResult(STATUS.SUCCESS); } diff --git a/game-server/app/servers/gm/handler/gmServerHandler.ts b/game-server/app/servers/gm/handler/gmServerHandler.ts index f4e3fcc4b..097b605ec 100644 --- a/game-server/app/servers/gm/handler/gmServerHandler.ts +++ b/game-server/app/servers/gm/handler/gmServerHandler.ts @@ -7,8 +7,6 @@ import { RegionModel, RegionType } from '../../../db/Region'; import { gameData } from '../../../pubUtils/data'; import { Maintenance, ServerlistModel, ServerlistUpdate } from '../../../db/Serverlist'; import { nowSeconds } from '../../../pubUtils/timeUtil'; -import { GM_MAIL_TYPE, MAIL_TIME_TYPE, REF_CIRCLE_MAIL_TIME } from '../../../consts'; -import { SendMailFun } from '../../../services/mailService'; import { createNewServer, sendOpenServerMail } from '../../../services/gmService'; import { initAutoCreateServer, initMaintenance, stopMaintenance } from '../../../services/timeTaskService'; import { isNumber } from 'util'; diff --git a/game-server/app/servers/guild/handler/guildRefineHandler.ts b/game-server/app/servers/guild/handler/guildRefineHandler.ts index 87016a628..0e9420462 100644 --- a/game-server/app/servers/guild/handler/guildRefineHandler.ts +++ b/game-server/app/servers/guild/handler/guildRefineHandler.ts @@ -55,7 +55,6 @@ export class GuildRefineHandler { let dicGoods = gameData.goods.get(id); if(!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND); let dicItid = ITID.get(dicGoods.itid); - console.log('####', dicItid.type, CONSUME_TYPE.DRAWING) if(!dicItid || dicItid.type != CONSUME_TYPE.DRAWING) return resResult(STATUS.GUILD_CANNOT_REFINE_THIS); let { guildCode: code } = userGuild; @@ -66,10 +65,8 @@ export class GuildRefineHandler { let { scienceTrees } = guildRefine; let dicDevelopConsume: DicArmyDevelopConsume; for(let scienceTree of scienceTrees) { - console.log('####', scienceTree.endTime) if(scienceTree.endTime && scienceTree.endTime >= nowSeconds()) continue; // 没有炼完 let _dicDevelopConsume = getArmyDevelopConsumeById(scienceTree.id); - console.log('####', _dicDevelopConsume.quality, dicGoods.quality) if(_dicDevelopConsume.quality != dicGoods.quality) continue; // 品质错误 if(!dicDevelopConsume || dicDevelopConsume.qualityLevel < _dicDevelopConsume.qualityLevel) { // 选择等级最高的 dicDevelopConsume = _dicDevelopConsume; diff --git a/game-server/app/services/mailService.ts b/game-server/app/services/mailService.ts index 094dfb860..627035929 100644 --- a/game-server/app/services/mailService.ts +++ b/game-server/app/services/mailService.ts @@ -72,14 +72,14 @@ export async function sendMailToGuildByContent(contentId: MAIL_TYPE, guildCode: class MailTemp { public code: string; + public gmmail: GMMailTypeParam; private contentId: MAIL_TYPE = MAIL_TYPE.SEND_MAIL; // 0-读GmMail,1以上读dicMail private sendName: string = SEND_NAME; private title: string = SEND_TITLE; private content: string = ''; - private gmmail: GMMailTypeParam; private hasGoods: boolean = false; // 是否内含奖励 private goods: RewardInter[] = []; // 发送的奖励 - private sendTime: number; + public sendTime: number; private endTime: number; // 从dicMail读取数据 @@ -148,6 +148,10 @@ export class SendMailFun { private groupMails: GroupMailType[] = []; private serverMails: ServerMailType[] = []; + public getMailTemp(code: string) { + return this.mailTemps.get(code); + } + // 从dicMail读取数据 public setWithContentId(contentId: MAIL_TYPE, params: { sendName?: string, params?: string[], goods?: RewardInter[] }) { let mailTemp = new MailTemp(); @@ -167,29 +171,35 @@ export class SendMailFun { // 生成单人邮件 public async createSingleMails(code: string, roleIds: string[]) { let mapTemp = this.mailTemps.get(code); + if(mapTemp.sendTime < nowSeconds()) return; for(let roleId of roleIds) { let originMail = await MailModel.addMail({ roleId, ...mapTemp.getCreateMailParams() }); this.mails.push(originMail); } + await GMMailModel.sendMail(mapTemp.gmmail._id, mapTemp.sendTime); } // 生成多人邮件 public async createGroupMails(code: string, roleIds: string[], guildCode?: string) { let mapTemp = this.mailTemps.get(code); + if(mapTemp.sendTime < nowSeconds()) return; let roleStatus = roleIds.map(roleId => { return { roleId, status: MAIL_STATUS.CREATE } }) let originMail = await GroupMailModel.addMail({ roleStatus, guildCode, ...mapTemp.getCreateMailParams() }); + await GMMailModel.sendMail(mapTemp.gmmail._id, mapTemp.sendTime); this.groupMails.push(originMail); } // 生成全服邮件 public async createServerMails(code: string, serverIds: number[]) { let mapTemp = this.mailTemps.get(code); + if(mapTemp.sendTime < nowSeconds()) return; for(let serverId of serverIds) { let originMail = await ServerMailModel.addMail({ serverId, ...mapTemp.getCreateMailParams() }); this.serverMails.push(originMail); } + await GMMailModel.sendMail(mapTemp.gmmail._id, mapTemp.sendTime); } public async setMails(mails: MailType[], groupMails: GroupMailType[], serverMails: ServerMailType[]) { @@ -206,14 +216,12 @@ export class SendMailFun { let pushByServerId = new Map(); for(let mail of this.mails) { - console.log('#####', mail.sendTime) if(mail.sendTime <= nowSeconds() && mail.endTime > nowSeconds()) { let mailParam = new MailParam(GM_MAIL_TYPE.SINGLE, mail); if(!pushByRoleId.has(mail.roleId)) pushByRoleId.set(mail.roleId, []); pushByRoleId.get(mail.roleId).push(mailParam); } } - console.log('#####pushByRoleId', pushByRoleId) for(let mail of this.groupMails) { if(mail.sendTime <= nowSeconds() && mail.endTime > nowSeconds()) { let mailParam = new MailParam(GM_MAIL_TYPE.GROUP, mail); @@ -238,7 +246,6 @@ export class SendMailFun { for(let [roleId, mails ] of pushByRoleId) { let uids = await this.getUids(roleId, myRoleId, mySid); - console.log('###### onMailsAdd', uids, mails); if(uids.length > 0 && mails.length > 0) { pinus.app.channelService.pushMessageByUids('onMailsAdd', resResult(STATUS.SUCCESS, { mails }), uids); } diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index f6d0d039d..a36a2f304 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -1,7 +1,7 @@ import { scheduleJob, Job, scheduledJobs, } from 'node-schedule'; import { PVPConfigModel, PVPConfigType } from '../db/SystemConfig'; -import { nowSeconds, getTimeFun, getSeconds } from '../pubUtils/timeUtil'; +import { nowSeconds, getTimeFun, getSeconds, getZeroPoint } from '../pubUtils/timeUtil'; import { getTodayGuildActivity, gameData } from '../pubUtils/data'; import { pvpSeasonEnd } from './pvpService'; import { getAllOnlineRoles, getAllServers, delGuildActivityRank } from './redisService'; @@ -67,7 +67,7 @@ export async function init() { scheduleJob('fetchWord', '0 0 4 * * ?', fetch37Words); // 每天邮件 - scheduleJob('circleMail', '0 0 3 * * ?', sendCircleMail); + checkCircleMail(); // 每小时查询邮件推送 checkMailByHour(); @@ -403,18 +403,30 @@ function clearAuctionSchedule() { // —————————————— 拍卖行 end —————————————— // // —————————————— 邮件 —————————————— // +let circleMailJob: Job; +async function checkCircleMail() { + if(circleMailJob) { + circleMailJob.cancel(); + } + circleMailJob = scheduleJob('circleMail', '0 0 20 * * ?', sendCircleMail); + sendCircleMail(); +} + async function sendCircleMail() { let gmmails = await GMMailModel.findCircleMails(pinus.app.get('env')); let f = new SendMailFun(); for(let gmmail of gmmails) { - let { receivers, mailType } = gmmail; + let { receivers, mailType, sendTimes } = gmmail; let code = await f.setWithGmMail(gmmail); - if(mailType == GM_MAIL_TYPE.SINGLE) { - await f.createSingleMails(code, receivers.map(cur => cur.roleId)); - } else if (mailType == GM_MAIL_TYPE.GROUP) { - await f.createGroupMails(code, receivers.map(cur => cur.roleId)); - } else if (mailType == GM_MAIL_TYPE.SERVER) { - await f.createServerMails(code, receivers.map(cur => cur.serverId)); + let mapTemp = f.getMailTemp(code); + if(sendTimes.indexOf(mapTemp.sendTime) == -1) { + if(mailType == GM_MAIL_TYPE.SINGLE) { + await f.createSingleMails(code, receivers.map(cur => cur.roleId)); + } else if (mailType == GM_MAIL_TYPE.GROUP) { + await f.createGroupMails(code, receivers.map(cur => cur.roleId)); + } else if (mailType == GM_MAIL_TYPE.SERVER) { + await f.createServerMails(code, receivers.map(cur => cur.serverId)); + } } } await f.pushToUsers(); @@ -433,7 +445,6 @@ async function checkMailByHour() { } async function setMailSchedule(isInit: boolean) { - console.log('####### setMailSchedule') let minuteNow = moment().minute(); let beforeTime = minuteNow >= 5? moment().minute(5).unix(): moment().minute(5).add(-1, 'h').unix(); let time = minuteNow >= 5? moment().minute(5).add(1, 'h').unix(): moment().minute(5).unix(); @@ -460,7 +471,6 @@ async function setMailSchedule(isInit: boolean) { // 当前时间到下一次定时器之间的定时器 export async function addMailsToSchedule(mails: MailType[], groupMails: GroupMailType[], serverMails: ServerMailType[]) { - console.log('####### addMailsToSchedule') let minuteNow = moment().minute(); let time = minuteNow >= 5? moment().minute(5).add(1, 'h').unix(): moment().minute(5).unix(); @@ -469,7 +479,6 @@ export async function addMailsToSchedule(mails: MailType[], groupMails: GroupMai if(sendTime * 1000 > Date.now() && sendTime < time && times.indexOf(sendTime) == -1) times.push(sendTime); } - console.log('#######', times); for(let time of times) { if(!scheduledJobs[`mailPush${time}`]) { scheduleJob(`mailPush${time}`, time * 1000, async () => { diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index a8cb74ce7..57fbe8773 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -21,7 +21,7 @@ export const TEEN_DAILY_MAX_TIME = 1.5 * 60 * 60; // 未成年人工作日每天 export const GUEST_DAY = 15; // 同一设备15天内不得重复体验游客模式 export const REFRESH_TIME = 5; // 统一一天刷新时间 -export const REF_CIRCLE_MAIL_TIME = 3; // 统一一天刷新定期邮件时间 +export const REF_CIRCLE_MAIL_TIME = 6; // 统一一天刷新定期邮件时间 export const PUSH_BATCH = 100; // 推送分批人数 export const PUSH_INTERVAL = 5 * 1000; // 分批时间,5秒一批 diff --git a/shared/db/GMMail.ts b/shared/db/GMMail.ts index a8844dd06..e07166e82 100644 --- a/shared/db/GMMail.ts +++ b/shared/db/GMMail.ts @@ -87,6 +87,9 @@ export default class GMMail extends BaseModel { @prop({ required: true }) viewAt: Date; // 审核时间 + @prop({ required: true, type: Number }) + sendTimes: number[]; // 是否已经发件 + @prop({ required: true }) sendTime: string; // 发送时间 @@ -192,6 +195,11 @@ export default class GMMail extends BaseModel { return result; } + public static async sendMail(id: string, time: number) { + const result: GMMailType = await GMMailModel.findByIdAndUpdate(id, { $push: { sendTimes: time}}, {new: true}).lean(); + return result; + } + } export let GMMailModel: ReturnModelType; diff --git a/shared/db/UserOrder.ts b/shared/db/UserOrder.ts index 0ac9bda26..acac02334 100644 --- a/shared/db/UserOrder.ts +++ b/shared/db/UserOrder.ts @@ -124,7 +124,6 @@ export default class UserOrder extends BaseModel { if (form.createTimeStart && form.createTimeEnd) { searchObj['createdAt'] = { $lte: new Date(form.createTimeEnd * 1000), $gte: new Date(form.createTimeStart * 1000) }; } - console.log('###', searchObj) return searchObj }