/** * 任务调度服务提供者 * 负责定时任务系统的初始化 */ 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()