diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index a7b1d4419..d6046d6b3 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -3,8 +3,7 @@ import { getRandSingleEelm, resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; import { GMMailModel, GMMailType } from '../../../db/GMMail'; import { delGuildActivityRank, getRoleOnlineInfo } from '../../../services/redisService'; -import { SendMailFun } from '../../../services/mailService'; -import { ACTIVITY_TYPE, GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, PUSH_ROUTE, REF_CIRCLE_MAIL_TIME, SURVEY_SELECT } from '../../../consts'; +import { ACTIVITY_TYPE, GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, PUSH_ROUTE, SURVEY_SELECT } from '../../../consts'; import { checkActivityEditable, checkActivityGroupType, checkActivityGroupTypeWithId } from '../../../services/activity/activityService'; import { ActivityModel } from '../../../db/Activity'; import { ActivityGroupModel } from '../../../db/ActivityGroup'; @@ -20,6 +19,7 @@ import { pushCurrentTime } from '../../../services/auctionService'; import { SurveyModel, SurveyUpdate } from '../../../db/Survery'; import { getSurvey } from '../../../services/gmService'; import { sendMessageToAllWithSuc } from '../../../services/pushService'; +import { sendMailByContent, sendMailsByGmMail } from '../../../services/mailService'; let timer: NodeJS.Timer; export default function (app: Application) { return new GmHandler(app); @@ -68,39 +68,9 @@ export class GmHandler { if(status != GM_MAIL_STATUS.CREATE) { return resResult(STATUS.GM_MAIL_HAS_SENT); } - let needSend = false; + if(isPass) { - if(timeType == MAIL_TIME_TYPE.CIRCLE) { - let refTimeStr = REF_CIRCLE_MAIL_TIME >= 10? `${REF_CIRCLE_MAIL_TIME}`: `0${REF_CIRCLE_MAIL_TIME}`; - let refTime = moment(moment().format(`YYYY-MM-DD ${refTimeStr}:00:00`)).unix(); - let sendTime = moment(moment().format('YYYY-MM-DD '+circleHour)).unix(); - if(sendTime < refTime) sendTime += 86400; - let now = nowSeconds(); - if(refTime < now && sendTime > now) { - needSend = true; - } - } else { - needSend = true; - } - } - if(needSend) { - let f = new SendMailFun(); - let code = await f.setWithGmMail(gmmail); - if(!code) return resResult(STATUS.GM_MAIL_CAN_NOT_SENT); - - if (mailType == GM_MAIL_TYPE.SINGLE || mailType == GM_MAIL_TYPE.GROUP) { - let roleIds = receivers.filter(cur => cur.env == this.app.get('env')).map(cur => cur.roleId); - if(mailType == GM_MAIL_TYPE.SINGLE) { - await f.createSingleMails(code, roleIds); - } else { - await f.createGroupMails(code, roleIds); - } - } else { - let serverIds = receivers.filter(cur => cur.env == this.app.get('env')).map(cur => cur.serverId); - await f.createServerMails(code, serverIds); - } - await f.pushToUsers(); - // await f.saveRecord(uid); + await sendMailsByGmMail([gmmail]); } 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/services/gmService.ts b/game-server/app/services/gmService.ts index 54c4202bb..93cf40d90 100644 --- a/game-server/app/services/gmService.ts +++ b/game-server/app/services/gmService.ts @@ -7,7 +7,7 @@ import { pinus } from "pinus"; import { getWorldChannelSid } from "./chatChannelService"; import { ServerlistModel, ServerlistType } from "../db/Serverlist"; import { NoticeModel, NoticeType } from "../db/Notice"; -import { SendMailFun } from "./mailService"; +import { SendMailFun, sendMailsByGmMail } from "./mailService"; import GMMail, { GMMailModel, GMMailType } from '../db/GMMail'; import moment = require("moment"); import { getSeconds, nowSeconds } from "../pubUtils/timeUtil"; @@ -153,27 +153,8 @@ export async function sendOpenServerMail(type: 'openMail'|'circleMail', mail: St let addParam = new GMMail(); addParam.setByRegionStategy(type, mail, newServer, uid); let gmmail = await GMMailModel.addMail(addParam, uid); - let needSend = false; - if(mail.timeType == MAIL_TIME_TYPE.CIRCLE) { - let refTimeStr = REF_CIRCLE_MAIL_TIME >= 10? `${REF_CIRCLE_MAIL_TIME}`: `0${REF_CIRCLE_MAIL_TIME}`; - let refTime = moment(moment().format(`YYYY-MM-DD ${refTimeStr}:00:00`)).unix(); - let sendTime = moment(moment().format('YYYY-MM-DD '+ mail.circleHour)).unix(); - if(sendTime < refTime) sendTime += 86400; - let now = nowSeconds(); - if(refTime < now && sendTime > now) { - needSend = true; - } - } else { - needSend = true; - } - if(needSend) { - let f = new SendMailFun(); - let code = await f.setWithGmMail(gmmail); - if(code) { - await f.createServerMails(code, [newServer.id]); - await f.pushToUsers(); - } - } + + await sendMailsByGmMail([gmmail]); return true; } diff --git a/game-server/app/services/mailService.ts b/game-server/app/services/mailService.ts index f5a50c507..80eaf5595 100644 --- a/game-server/app/services/mailService.ts +++ b/game-server/app/services/mailService.ts @@ -71,6 +71,26 @@ export async function sendMailToGuildByContent(contentId: MAIL_TYPE, guildCode: return true; } +export async function sendMailsByGmMail(gmmails: GMMailType[]) { + let f = new SendMailFun(); + for(let gmmail of gmmails) { + let { receivers, mailType, sendTimes, circleStart, circleEnd } = gmmail; + let code = await f.setWithGmMail(gmmail); + if(!code) continue; + let mapTemp = f.getMailTemp(code); + if(sendTimes.indexOf(mapTemp.sendTime) == -1 && circleStart <= mapTemp.sendTime && circleEnd >= mapTemp.sendTime) { + 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(); +} + class MailTemp { public code: string; public gmmail: GMMailTypeParam; @@ -98,9 +118,6 @@ class MailTemp { } public async setWithGmMail(gmmail: GMMailType) { - this.code = genCode(8); - this.gmmail = gmmail; - this.contentId = 0; if(gmmail.timeType == MAIL_TIME_TYPE.IMMEDIATE) { this.sendTime = nowSeconds(); } else if (gmmail.timeType == MAIL_TIME_TYPE.DELAY) { @@ -121,6 +138,9 @@ class MailTemp { } this.sendTime = time; } + this.code = genCode(8); + this.gmmail = gmmail; + this.contentId = 0; this.endTime = this.sendTime + gmmail.expire * 60 * 60; this.sendName = gmmail.sendName; this.title = gmmail.title; @@ -209,6 +229,7 @@ export class SendMailFun { // 生成全服邮件 public async createServerMails(code: string, serverIds: number[]) { let mapTemp = this.mailTemps.get(code); + console.log('###### createServerMails 1', code, this.mailTemps, mapTemp) if(mapTemp.sendTime < nowSeconds()) return; for(let serverId of serverIds) { let originMail = await ServerMailModel.addMail({ serverId, ...mapTemp.getCreateMailParams() }); diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index f9b614144..be293baf7 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -8,7 +8,7 @@ import { getAllOnlineRoles, getAllServers, delGuildActivityRank, getServerCreate import { GUILD_ACTIVITY_TYPE, REFRESH_TIME, COUNTER, AUCTION_TIME, GM_MAIL_TYPE, SERVER_TIMER, ACTIVITY_TYPE, PUSH_ROUTE, STATUS } from '../consts'; import { pinus } from 'pinus'; import { settleGuildWeekly } from './guildService'; -import { SendMailFun, } from './mailService'; +import { SendMailFun, sendMailsByGmMail, } from './mailService'; import { sendEndMsgToAllServer, autoDeclare, sendGuildActivityStatus } from './guildActivity/guildActivityService'; import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService'; import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity'; @@ -20,7 +20,7 @@ import { CounterModel } from '../db/Counter'; import { reportOneOnline } from './authenticateService'; import { PVP } from '../pubUtils/dicParam'; import { fetch37Words } from './sdkService'; -import { GMMailModel } from '../db/GMMail'; +import { GMMailModel, GMMailType } from '../db/GMMail'; import { Maintenance, ServerlistModel, ServerlistType } from '../db/Serverlist'; import { getWorldChannelSid } from './chatService'; import { createMarqueeMsg, pushMarqueeMsg } from './sysChatService'; @@ -419,31 +419,16 @@ async function checkCircleMail() { if(circleMailJob) { circleMailJob.cancel(); } - circleMailJob = scheduleJob('circleMail', '0 0 20 * * ?', sendCircleMail); - sendCircleMail(); + circleMailJob = scheduleJob('circleMail', '0 0 20 * * ?', scheduleSendCircleMail); + scheduleSendCircleMail(); } -async function sendCircleMail() { +async function scheduleSendCircleMail() { let gmmails = await GMMailModel.findCircleMails(pinus.app.get('env')); - let f = new SendMailFun(); - for(let gmmail of gmmails) { - let { receivers, mailType, sendTimes, circleStart, circleEnd } = gmmail; - let code = await f.setWithGmMail(gmmail); - if(!code) continue; - let mapTemp = f.getMailTemp(code); - if(sendTimes.indexOf(mapTemp.sendTime) == -1 && circleStart <= mapTemp.sendTime && circleEnd >= mapTemp.sendTime) { - 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(); + await sendMailsByGmMail(gmmails); } + let mailByHourJob: Job; async function checkMailByHour() { if(mailByHourJob) {