HJ_Server/src/public/scheduler/scheduler_newDay.ts

100 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Scheduler, schedulerType } from './scheduler';
import { PublicShared } from "../../shared/public/public";
import { Wjjl } from "../../module/collection_wjjl";
import { ZhanLingTasks } from "../zhanling";
import { setGud } from '../gud';
import { EmailFun } from '../email';
import { ActionLog } from '../actionLog/actionLog';
import { clusterFun } from '../../clusterFunction';
import { clusterRunOnce } from '../../clusterUtils';
export class SchedulerNewDayLocalCtor extends Scheduler {
id: schedulerType = 'newDay_local_ctor';
time = 1;
name = '定时推送跨天通知';
type: 'day' | 'week' = 'day';
// todo 测试
// get nextTime() {
// return G.time + 60;
// }
async read() {
await this.ctorStartTime();
this.isReady = false;
}
async start() {
clusterRunOnce(async ()=>{
//这个定时器会被每个进程都启动这是这部分逻辑应该只执行1次
//重置所有的ActionLog
await ActionLog.initAllDayLog();
// 每周一,发放终身卡
(async () => {
if (PublicShared.getWeek(G.time) == 1) {
let logs = await G.mongodb.collection("payLogNew").find(
{ key: "zhongshenka", del_time: { $exists: false } }, { projection: { _id: 0, } }
).toArray();
if (logs.length == 0) {
console.log("没有终身卡数据,不发放终身卡");
}
let con = G.gc.payEmail.zhongshenka.filter(e => e.day == 7)[0];
for (let i = 0; i < logs.length; i++) {
console.log("发放终身卡", logs[i].uid);
// 发送邮件
EmailFun.addEmail({
uid: logs[i].uid,
type: "system",
title: con.title,
content: con.content,
contentInsertArr: [],
createTime: G.time,
prize:con.prize,
})
}
}
})()
})
let users = Object.values(G.server.uid_connections)
if (users.length) {
for (let item of users) {
let gud = item.gud
let add: k_v<any> = {};
//每天首次登陆
if (!gud.loginTime || PublicShared.getToDayZeroTime(gud.loginTime) != PublicShared.getToDayZeroTime(G.time)) {
gud.loginDays = gud.loginDays ? gud.loginDays + 1 : 1;
add.loginDays = gud.loginDays;
Wjjl.setVal(gud.uid, `toDayLogin_${PublicShared.getOpenServerDay(gud.cTime, G.time)}`, 1);
if (gud.logoutTime && PublicShared.getToWeekMondayZeroTime(gud.logoutTime) < PublicShared.getToWeekMondayZeroTime(G.time)) {
ZhanLingTasks.clearLog(gud.uid, 'week');
}
G.emit('FIRST_LOGIN_EVERY_DAY', gud, gud.loginTime, G.time);
}
gud.loginTime = G.time;
add.loginTime = G.time;
if (Object.keys(add).length > 0) {
G.mongodb.collection('user').updateOne({ bindUid: gud.bindUid, sid: gud.sid }, {
$set: {
...add
}
});
setGud(gud.uid, add);
}
G.server.sendMsgByUid(gud.uid, 'msg_s2c/PlayerChange', gud)
}
G.server.broadcastClusterMsg('msg_s2c/NewDay', { time: this.zeroTime });
}
await this.record();
}
}