邮件:GM后台发送邮件逻辑修改

This commit is contained in:
luying
2022-05-21 20:44:50 +08:00
parent 7eea8f4e8a
commit 8a58435283
4 changed files with 38 additions and 81 deletions

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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() });

View File

@@ -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) {