后台:跑马灯
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { MarqueeType, MarqueeModel } from "../db/Marquee";
|
||||
import { GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, MARQUEE_TYPE, REF_CIRCLE_MAIL_TIME, SERVER_STATUS } from "../consts";
|
||||
import Marquee, { MarqueeType, MarqueeModel } from "../db/Marquee";
|
||||
import { GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, MARQUEE_SHOW_TYPE, MARQUEE_TIME_TYPE, REF_CIRCLE_MAIL_TIME, SERVER_STATUS } from "../consts";
|
||||
import { scheduleJob, scheduledJobs, Job } from 'node-schedule';
|
||||
import { createMarqueeMsg as sysCreateMarqueeMsg, pushMarqueeMsg as sysPushMarqueeMsg } from './sysChatService';
|
||||
import { GroupMessageType } from "../db/GroupMessage";
|
||||
@@ -14,21 +14,21 @@ import { getSeconds, nowSeconds } from "../pubUtils/timeUtil";
|
||||
import { CreateServerParam } from "../domain/backEndField/params";
|
||||
import { RegionModel, RegionType } from "../db/Region";
|
||||
import { GMMail as StategyMail } from "../db/ServerStategy";
|
||||
import { uniq } from "underscore";
|
||||
|
||||
// —————————————— 跑马灯 —————————————— //
|
||||
// 初始
|
||||
export async function initMarquee() {
|
||||
const marquees = await MarqueeModel.findEffectiveMarque();
|
||||
const marquees = await MarqueeModel.findEffectiveMarque(pinus.app.get('env'));
|
||||
for(let marquee of marquees) {
|
||||
await generateMarqueeSchedule(marquee);
|
||||
}
|
||||
}
|
||||
|
||||
export async function setMarquee(code: string) {
|
||||
let marquee = await MarqueeModel.findByCode(code);
|
||||
if(marquee.type == MARQUEE_TYPE.INSTANT) {
|
||||
let msgDatas = await createMarqueeMsg(marquee);
|
||||
await pushMarqueeMsg(msgDatas);
|
||||
export async function setMarquee(marquee: MarqueeType) {
|
||||
console.log('******', marquee.timeType, marquee)
|
||||
if(marquee.timeType == MARQUEE_TIME_TYPE.INSTANT) {
|
||||
await startMarquee(marquee);
|
||||
return true;
|
||||
} else {
|
||||
return await generateMarqueeSchedule(marquee);
|
||||
@@ -36,14 +36,14 @@ export async function setMarquee(code: string) {
|
||||
}
|
||||
|
||||
async function generateMarqueeSchedule(marquee: MarqueeType) {
|
||||
// 定时发送
|
||||
let setSecondsMarquee = scheduledJobs[`setSeconds${marquee.code}`];
|
||||
if(setSecondsMarquee) return false; // 已经在运行中了
|
||||
|
||||
if(marquee.type != MARQUEE_TYPE.SCHEDULE) return false;
|
||||
if(marquee.startTime.getTime() >= marquee.endTime.getTime()) return false;
|
||||
if(marquee.endTime.getTime() < Date.now()) return false;
|
||||
if(marquee.startTime.getTime() > Date.now()) {
|
||||
let startJob = scheduleJob(`start${marquee.code}`, marquee.startTime.getTime(), async () => {
|
||||
if(marquee.timeType != MARQUEE_TIME_TYPE.SCHEDULE) return false;
|
||||
if(marquee.endTime && marquee.endTime < nowSeconds()) return false;
|
||||
if(marquee.startTime > nowSeconds()) {
|
||||
let startJob = scheduleJob(`start${marquee.code}`, marquee.startTime * 1000, async () => {
|
||||
await startMarquee(marquee, startJob)
|
||||
});
|
||||
} else {
|
||||
@@ -54,37 +54,56 @@ async function generateMarqueeSchedule(marquee: MarqueeType) {
|
||||
|
||||
async function startMarquee(marquee: MarqueeType, startJob?: Job) {
|
||||
console.log('************', `跑马灯定时器 ${marquee.code}开始`, '************');
|
||||
await MarqueeModel.updateData(marquee.code, { isRunning: true });
|
||||
let msgDatas = await createMarqueeMsg(marquee);
|
||||
await pushMarqueeMsg(msgDatas);
|
||||
let secondsJob = scheduleJob(`setSeconds${marquee.code}`, `*/${marquee.interval} * * * * *`, async () => {
|
||||
console.log(`*****setSeconds${marquee.code}****`)
|
||||
if(marquee.showType == MARQUEE_SHOW_TYPE.ONCE) { // 一次性发送
|
||||
await pushMarqueeMsg(msgDatas);
|
||||
});
|
||||
let endJob = scheduleJob(`end${marquee.code}`, marquee.endTime.getTime(), async () => {
|
||||
if(startJob) {
|
||||
startJob.cancel();
|
||||
startJob = undefined;
|
||||
}
|
||||
if(secondsJob) {
|
||||
secondsJob.cancel();
|
||||
secondsJob = undefined;
|
||||
}
|
||||
if(endJob) {
|
||||
endJob.cancel();
|
||||
endJob = undefined;
|
||||
}
|
||||
await MarqueeModel.updateData(marquee.code, { isRunning: false });
|
||||
});
|
||||
} else {
|
||||
await pushMarqueeMsg(msgDatas);
|
||||
console.log('***', marquee.interval)
|
||||
let secondsJob = scheduleJob(`setSeconds${marquee.code}`, `*/${marquee.interval} * * * * *`, async () => {
|
||||
console.log(`*****setSeconds${marquee.code}****`)
|
||||
await pushMarqueeMsg(msgDatas);
|
||||
});
|
||||
let endJob = scheduleJob(`end${marquee.code}`, marquee.endTime * 1000, async () => {
|
||||
if(startJob) {
|
||||
startJob.cancel();
|
||||
startJob = undefined;
|
||||
}
|
||||
if(secondsJob) {
|
||||
secondsJob.cancel();
|
||||
secondsJob = undefined;
|
||||
}
|
||||
if(endJob) {
|
||||
endJob.cancel();
|
||||
endJob = undefined;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function createMarqueeMsg(marquee: MarqueeType) {
|
||||
let { serverIds, content } = marquee;
|
||||
let { receivers, content } = marquee;
|
||||
let msgDatas: GroupMessageType[] = [];
|
||||
for(let serverId of serverIds) {
|
||||
let serverIds: number[] = [];
|
||||
for(let { env, serverId } of receivers) {
|
||||
if(serverId == 0) {
|
||||
let servers = await ServerlistModel.findByEnv(env);
|
||||
for(let { serverId } of servers) {
|
||||
serverIds.push(serverId);
|
||||
}
|
||||
} else {
|
||||
serverIds.push(serverId);
|
||||
}
|
||||
}
|
||||
for(let serverId of uniq(serverIds)) {
|
||||
let msgData = await sysCreateMarqueeMsg('', '系统', serverId, content);
|
||||
msgDatas.push(msgData);
|
||||
}
|
||||
|
||||
return msgDatas;
|
||||
}
|
||||
|
||||
@@ -101,7 +120,6 @@ export async function cancelMarquee(code: string) {
|
||||
if(startMarquee) startMarquee.cancel();
|
||||
if(setSecondsMarquee) setSecondsMarquee.cancel();
|
||||
if(endMarquee) endMarquee.cancel();
|
||||
await MarqueeModel.updateData(code, { isRunning: false });
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -552,7 +552,7 @@ function setStategyTimer(timerId: number, region: RegionType) {
|
||||
case SERVER_TIMER.TEN_HALF:
|
||||
cron = '0 30 10 * * *'; break;
|
||||
case SERVER_TIMER.FIFTEEN_HALF:
|
||||
cron = '0 19 16 * * *'; break;
|
||||
cron = '0 30 15 * * *'; break;
|
||||
case SERVER_TIMER.NINETEEN_HALF:
|
||||
cron = '0 30 19 * * *'; break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user