/** * 定时任务调度器 * 用于执行周期性任务,如到期检查 */ const cron = require('node-cron'); const { checkTenantExpiration } = require('./services/billingService'); // 存储定时任务实例 let expirationCheckJob = null; /** * 启动所有定时任务 */ const startCronJobs = () => { console.log('启动定时任务...'); // 每天凌晨2点执行到期检查 expirationCheckJob = cron.schedule('0 2 * * *', async () => { console.log('[定时任务] 开始执行租户到期检查...'); try { const result = await checkTenantExpiration(); console.log('[定时任务] 到期检查完成:', result); } catch (error) { console.error('[定时任务] 到期检查失败:', error); } }, { scheduled: true, timezone: 'Asia/Shanghai' }); console.log('✓ 定时任务已启动'); console.log(' - 租户到期检查: 每天凌晨 2:00'); }; /** * 停止所有定时任务 */ const stopCronJobs = () => { console.log('停止定时任务...'); if (expirationCheckJob) { expirationCheckJob.stop(); expirationCheckJob = null; } console.log('✓ 定时任务已停止'); }; /** * 手动触发到期检查(用于测试) */ const runExpirationCheckManually = async () => { console.log('[手动触发] 开始执行租户到期检查...'); try { const result = await checkTenantExpiration(); console.log('[手动触发] 到期检查完成:', result); return result; } catch (error) { console.error('[手动触发] 到期检查失败:', error); throw error; } }; module.exports = { startCronJobs, stopCronJobs, runExpirationCheckManually };