rentease-backend-new/cronJobs.js

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
};