hn-hlw-service/trigger.js
2026-09-21 17:04:40 +08:00

88 lines
2.8 KiB
JavaScript

const schedule = require("node-schedule");
const api = require("./api");
const dayjs = require("dayjs");
exports.initSchedule = () => {
// triggerEveryMinute()
triggerAtNight();
triggerDailySchedulePeopleOnline();
};
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}`);
}
});
}
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}`)
}
}