2024-07-21 02:26:03 +08:00
|
|
|
import { Autoload, Config, Init, Inject, Scope, ScopeEnum } from '@midwayjs/core';
|
2024-08-05 12:49:44 +08:00
|
|
|
import { PipelineService } from '../pipeline/service/pipeline-service.js';
|
2025-01-04 20:17:08 +08:00
|
|
|
import { logger } from '@certd/basic';
|
2025-06-10 10:21:09 +08:00
|
|
|
import {SysSettingsService, SysSiteInfo} from '@certd/lib-server';
|
2024-12-23 18:11:06 +08:00
|
|
|
import { SiteInfoService } from '../monitor/index.js';
|
|
|
|
|
import { Cron } from '../cron/cron.js';
|
2025-06-06 18:20:30 +08:00
|
|
|
import {UserSettingsService} from "../mine/service/user-settings-service.js";
|
|
|
|
|
import {UserSiteMonitorSetting} from "../mine/service/models.js";
|
2025-06-10 10:21:09 +08:00
|
|
|
import {getPlusInfo} from "@certd/plus-core";
|
|
|
|
|
import dayjs from "dayjs";
|
|
|
|
|
import {NotificationService} from "../pipeline/service/notification-service.js";
|
|
|
|
|
import {UserService} from "../sys/authority/service/user-service.js";
|
2023-01-29 13:44:19 +08:00
|
|
|
|
|
|
|
|
@Autoload()
|
2024-12-23 00:24:31 +08:00
|
|
|
@Scope(ScopeEnum.Request, { allowDowngrade: true })
|
2024-12-23 23:33:13 +08:00
|
|
|
export class AutoCRegisterCron {
|
2023-01-29 13:44:19 +08:00
|
|
|
@Inject()
|
|
|
|
|
pipelineService: PipelineService;
|
|
|
|
|
|
2024-08-13 20:30:42 +08:00
|
|
|
@Config('cron.onlyAdminUser')
|
|
|
|
|
private onlyAdminUser: boolean;
|
2024-08-05 12:49:44 +08:00
|
|
|
|
2024-07-21 02:26:03 +08:00
|
|
|
@Config('cron.immediateTriggerOnce')
|
|
|
|
|
private immediateTriggerOnce = false;
|
2023-01-29 13:44:19 +08:00
|
|
|
|
2024-12-23 18:11:06 +08:00
|
|
|
@Config('cron.immediateTriggerSiteMonitor')
|
|
|
|
|
private immediateTriggerSiteMonitor = false;
|
|
|
|
|
|
2024-09-20 15:15:24 +08:00
|
|
|
@Inject()
|
|
|
|
|
sysSettingsService: SysSettingsService;
|
2025-06-06 18:20:30 +08:00
|
|
|
@Inject()
|
|
|
|
|
userSettingsService: UserSettingsService;
|
2024-09-20 15:15:24 +08:00
|
|
|
|
2024-12-23 18:11:06 +08:00
|
|
|
@Inject()
|
|
|
|
|
siteInfoService: SiteInfoService;
|
|
|
|
|
|
|
|
|
|
@Inject()
|
|
|
|
|
cron: Cron;
|
|
|
|
|
|
2025-06-10 10:21:09 +08:00
|
|
|
@Inject()
|
|
|
|
|
notificationService: NotificationService;
|
|
|
|
|
|
|
|
|
|
@Inject()
|
|
|
|
|
userService: UserService;
|
|
|
|
|
|
|
|
|
|
|
2023-01-29 13:44:19 +08:00
|
|
|
@Init()
|
|
|
|
|
async init() {
|
|
|
|
|
logger.info('加载定时trigger开始');
|
2024-08-13 20:30:42 +08:00
|
|
|
await this.pipelineService.onStartup(this.immediateTriggerOnce, this.onlyAdminUser);
|
2024-09-19 17:38:51 +08:00
|
|
|
logger.info('加载定时trigger完成');
|
2023-01-29 13:44:19 +08:00
|
|
|
//
|
|
|
|
|
// const meta = getClassMetadata(CLASS_KEY, this.echoPlugin);
|
|
|
|
|
// console.log('meta', meta);
|
|
|
|
|
// const metas = listPropertyDataFromClass(CLASS_KEY, this.echoPlugin);
|
|
|
|
|
// console.log('metas', metas);
|
2025-06-06 18:20:30 +08:00
|
|
|
await this.registerSiteMonitorCron();
|
2025-06-10 10:21:09 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
await this.registerPlusExpireCheckCron();
|
2024-12-23 18:11:06 +08:00
|
|
|
}
|
|
|
|
|
|
2025-06-06 18:20:30 +08:00
|
|
|
async registerSiteMonitorCron() {
|
|
|
|
|
//先注册公共job
|
|
|
|
|
await this.siteInfoService.registerSiteMonitorJob()
|
2024-12-23 18:11:06 +08:00
|
|
|
|
2025-06-06 18:20:30 +08:00
|
|
|
//注册用户独立的检查时间
|
|
|
|
|
const monitorSettingList = await this.userSettingsService.list({
|
|
|
|
|
query:{
|
|
|
|
|
key: UserSiteMonitorSetting.__key__,
|
2024-12-23 18:11:06 +08:00
|
|
|
}
|
2025-06-06 18:20:30 +08:00
|
|
|
})
|
|
|
|
|
for (const item of monitorSettingList) {
|
|
|
|
|
const setting = item.setting ?? JSON.parse(item.setting)
|
|
|
|
|
if(!setting?.cron){
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
await this.siteInfoService.registerSiteMonitorJob(item.userId)
|
|
|
|
|
}
|
2024-12-23 18:11:06 +08:00
|
|
|
|
|
|
|
|
if (this.immediateTriggerSiteMonitor) {
|
2025-06-06 18:20:30 +08:00
|
|
|
logger.info(`立即触发一次站点证书检查任务`)
|
|
|
|
|
await this.siteInfoService.triggerJobOnce()
|
2024-12-23 18:11:06 +08:00
|
|
|
}
|
2023-01-29 13:44:19 +08:00
|
|
|
}
|
2025-06-10 10:21:09 +08:00
|
|
|
|
|
|
|
|
registerPlusExpireCheckCron(){
|
|
|
|
|
// 添加plus即将到期检查任务
|
|
|
|
|
this.cron.register({
|
|
|
|
|
name: 'plus-expire-check',
|
2025-06-10 10:52:58 +08:00
|
|
|
cron: `0 10 9 * * *`, // 一天只能检查一次,否则会重复发送通知
|
2025-06-10 10:21:09 +08:00
|
|
|
job: async () => {
|
|
|
|
|
const plusInfo = getPlusInfo()
|
|
|
|
|
if (!plusInfo.originVipType || plusInfo.originVipType==="free" ) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
let label ="专业版"
|
|
|
|
|
if( plusInfo.originVipType === 'comm'){
|
|
|
|
|
label = "商业版"
|
|
|
|
|
}
|
|
|
|
|
const siteInfo = await this.sysSettingsService.getSetting<SysSiteInfo>(SysSiteInfo)
|
|
|
|
|
|
|
|
|
|
const appTitle = siteInfo.title || "certd"
|
|
|
|
|
const expiresDate = dayjs(plusInfo.expireTime).format("YYYY-MM-DD")
|
|
|
|
|
// plusInfo.expireTime= dayjs("2025-06-10").valueOf()
|
|
|
|
|
let expiresDays =Math.floor((plusInfo.expireTime - new Date().getTime())/ 1000 / 60 / 60 / 24)
|
|
|
|
|
let title = ""
|
|
|
|
|
let content =""
|
|
|
|
|
if(expiresDays === 20 ||expiresDays === 10 || expiresDays === 3 || expiresDays === 1 || expiresDays === 0){
|
|
|
|
|
title = `vip(${label})即将到期`
|
|
|
|
|
content = `您的${appTitle} vip (${label})剩余${expiresDays}天(${expiresDate})到期,请及时续期,以免影响业务`
|
|
|
|
|
}else if (expiresDays === -1 || expiresDays === -3 || expiresDays === -7) {
|
|
|
|
|
title = `vip(${label})已过期`
|
|
|
|
|
content = `您的${appTitle} vip (${label})已过期${Math.abs(expiresDays)}天(${expiresDate}),请尽快续期,以免影响业务`
|
|
|
|
|
}
|
|
|
|
|
if(title){
|
|
|
|
|
logger.warn(title)
|
|
|
|
|
logger.warn(content)
|
|
|
|
|
const url = await this.notificationService.getBindUrl("");
|
|
|
|
|
const adminUsers = await this.userService.getAdmins()
|
|
|
|
|
for (const adminUser of adminUsers) {
|
|
|
|
|
logger.info(`发送vip到期通知给管理员:${adminUser.username}`)
|
|
|
|
|
await this.notificationService.send({
|
|
|
|
|
useDefault: true,
|
|
|
|
|
logger: logger,
|
|
|
|
|
body:{
|
|
|
|
|
title,
|
|
|
|
|
content,
|
|
|
|
|
errorMessage:title,
|
|
|
|
|
url
|
|
|
|
|
}
|
|
|
|
|
},adminUser.id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
2023-01-29 13:44:19 +08:00
|
|
|
}
|