70 lines
1.6 KiB
JavaScript
70 lines
1.6 KiB
JavaScript
/**
|
|
* 定时任务调度器
|
|
* 用于执行周期性任务,如到期检查
|
|
*/
|
|
|
|
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
|
|
};
|