You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

109 lines
2.4 KiB

/**
* 任务调度服务提供者
* 负责定时任务系统的初始化
*/
import cron from 'node-cron'
import config from '../config/index.js'
class JobProvider {
constructor() {
this.jobs = new Map()
this.isEnabled = config.jobs.enabled
}
/**
* 初始化任务调度系统
*/
async register() {
if (!this.isEnabled) {
console.log('• 任务调度系统已禁用')
return
}
try {
// 加载所有任务
await this.loadJobs()
console.log('✓ 任务调度系统初始化成功')
} catch (error) {
console.error('✗ 任务调度系统初始化失败:', error.message)
throw error
}
}
/**
* 加载所有任务
*/
async loadJobs() {
// 这里可以动态加载任务文件
// 暂时保留原有的任务加载逻辑
console.log('• 正在加载定时任务...')
}
/**
* 注册新任务
*/
schedule(name, cronExpression, task, options = {}) {
if (!this.isEnabled) {
console.log(`• 任务 ${name} 未注册(任务调度已禁用)`)
return
}
try {
const job = cron.schedule(cronExpression, task, {
timezone: config.jobs.timezone,
...options
})
this.jobs.set(name, job)
console.log(`✓ 任务 ${name} 注册成功`)
return job
} catch (error) {
console.error(`✗ 任务 ${name} 注册失败:`, error.message)
throw error
}
}
/**
* 停止指定任务
*/
stop(name) {
const job = this.jobs.get(name)
if (job) {
job.stop()
console.log(`✓ 任务 ${name} 已停止`)
}
}
/**
* 启动指定任务
*/
start(name) {
const job = this.jobs.get(name)
if (job) {
job.start()
console.log(`✓ 任务 ${name} 已启动`)
}
}
/**
* 停止所有任务
*/
stopAll() {
this.jobs.forEach((job, name) => {
job.stop()
console.log(`✓ 任务 ${name} 已停止`)
})
console.log('✓ 所有任务已停止')
}
/**
* 获取任务列表
*/
getJobs() {
return Array.from(this.jobs.keys())
}
}
// 导出单例实例
export default new JobProvider()