2026-07-27 11:28:33 +08:00
|
|
|
const schedule = require("node-schedule");
|
|
|
|
|
const api = require("./api");
|
|
|
|
|
const dayjs = require("dayjs");
|
|
|
|
|
|
|
|
|
|
exports.initSchedule = () => {
|
|
|
|
|
// triggerEveryMinute()
|
2026-09-21 17:04:40 +08:00
|
|
|
triggerAtNight();
|
|
|
|
|
triggerDailySchedulePeopleOnline();
|
2026-07-27 11:28:33 +08:00
|
|
|
};
|
|
|
|
|
|
2026-09-21 17:04:40 +08:00
|
|
|
function triggerDailySchedulePeopleOnline() {
|
|
|
|
|
// node-schedule 格式:秒 分 时 日 月 周;每天 00:30 将当天排班的医生、药师上线。
|
|
|
|
|
schedule.scheduleJob("0 30 0 * * *", async () => {
|
|
|
|
|
try {
|
|
|
|
|
const result = await api.getInternetHospitalApi({ type: "setTodayScheduledPeopleOnline" });
|
|
|
|
|
if (!result?.success) {
|
|
|
|
|
console.log(`[${dayjs().format('YYYY-MM-DD HH:mm:ss:SSS')}] 排班人员自动上线失败: ${result?.message || '未知错误'}`);
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.log(`[${dayjs().format('YYYY-MM-DD HH:mm:ss:SSS')}] 排班人员自动上线失败: ${error.message}`);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-27 11:28:33 +08:00
|
|
|
async function triggerEveryMinute() {
|
|
|
|
|
schedule.scheduleJob("0 * * * * *", async () => {
|
|
|
|
|
runHighFrequencyTask()
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function triggerAtNight() {
|
|
|
|
|
// 每晚深夜定时任务每隔15分钟出发
|
|
|
|
|
schedule.scheduleJob("0 0 22 * * *", async () => {
|
|
|
|
|
runDeepNightTask();
|
|
|
|
|
});
|
|
|
|
|
schedule.scheduleJob("0 15 22 * * *", async () => {
|
|
|
|
|
runDeepNightTask();
|
|
|
|
|
});
|
|
|
|
|
schedule.scheduleJob("0 30 22 * * *", async () => {
|
|
|
|
|
runDeepNightTask();
|
|
|
|
|
});
|
|
|
|
|
schedule.scheduleJob("0 45 22 * * *", async () => {
|
|
|
|
|
runDeepNightTask();
|
|
|
|
|
});
|
|
|
|
|
schedule.scheduleJob("0 0 23 * * *", async () => {
|
|
|
|
|
runDeepNightTask();
|
|
|
|
|
});
|
|
|
|
|
schedule.scheduleJob("0 15 23 * * *", async () => {
|
|
|
|
|
runDeepNightTask();
|
|
|
|
|
});
|
|
|
|
|
schedule.scheduleJob("0 30 23 * * *", async () => {
|
|
|
|
|
runDeepNightTask();
|
|
|
|
|
});
|
|
|
|
|
schedule.scheduleJob("0 45 23 * * *", async () => {
|
|
|
|
|
runDeepNightTask();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// 更新购药订单状态
|
|
|
|
|
async function runHighFrequencyTask() {
|
|
|
|
|
console.log(`[${dayjs().format('YYYY-MM-DD HH:mm:ss:SSS')}] 定时任务触发`);
|
|
|
|
|
try {
|
|
|
|
|
const tradeApi = require("./hlw/trade");
|
|
|
|
|
await tradeApi.runScheduleTask();
|
|
|
|
|
// 线上购药订单处方过期定时任务
|
|
|
|
|
await api.getInternetHospitalApi({ type: "runOnlineRxExpireSchedule" });
|
|
|
|
|
// 线上购药订单定时任务
|
|
|
|
|
await api.getInternetHospitalApi({ type: "runMedicinePurchaseOrderSchedule" });
|
|
|
|
|
await api.getInternetHospitalApi({ type: "runChineseMedicineOrderSchedule" });
|
|
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.log('执行定时任务出现错误: ', e.message)
|
|
|
|
|
}
|
|
|
|
|
console.log(`[${dayjs().format('YYYY-MM-DD HH:mm:ss:SSS')}]定时任务结束`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function runDeepNightTask() {
|
|
|
|
|
console.log(`[${dayjs().format('YYYY-MM-DD HH:mm:ss:SSS')}] 深度定时任务触发`);
|
|
|
|
|
try {
|
|
|
|
|
api.getInternetHospitalApi({ type: "autoSetPeopleOffline" });
|
|
|
|
|
api.getInternetHospitalApi({ type: "autoHandleExpireOrder" });
|
|
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.log(`[${dayjs().format('YYYY-MM-DD HH:mm:ss:SSS')}] 深度定时任务执行失败: ${e.message}`)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|