'use strict'; const moment = require('moment'); const request = require('superagent'); module.exports = function (app, opts) { const timorHoliday = app.fs.scheduleInit( { interval: '54 42 4 */7 * *', // immediate: true, proRun: true, }, async () => { const { timorApiUrl } = opts const { models } = app.fs.dc const { pushByEmail } = app.fs.utils const existCount = await models.Holiday.count() let begainDay = existCount ? moment() : moment('2022-01-01') let endDay = moment().add(3, 'months').endOf('month') let checkDay = begainDay.clone() while (checkDay.isSameOrBefore(endDay)) { try { const checkDayStr = checkDay.format('YYYY-MM-DD') let holidayRes = await request.get( timorApiUrl + `holiday/info/${checkDayStr}`, ) let holidayData = holidayRes.body || {} if (holidayData.code == 0) { let holidayType = holidayData.type.type let dayType = '' if ( holidayType == 2 && holidayData.holiday && holidayData.holiday.wage == 3 ) { // 正经节假日 3倍工资那种 // festivals dayType = 'festivals' } else if ( holidayType == 1 || ( holidayType == 2 && holidayData.holiday && holidayData.holiday.wage < 3 ) ) { // 普假 休息日非节假日 dayType = 'dayoff' } else if (holidayType == 0 || holidayType == 3) { // 工作日或补班 dayType = 'workday' } const dbRes = await models.Holiday.findOne({ where: { day: checkDayStr } }) if (dbRes) { await models.Holiday.update({ holiday: holidayData, type: dayType }, { where: { day: checkDayStr } }) } else { await models.Holiday.create({ day: checkDayStr, holiday: holidayData, type: dayType }) } } checkDay = checkDay.add(1, 'day') await new Promise(resolve => setTimeout(() => resolve(), 3000)); } catch (error) { console.error(error); } } let existLastDayRes = await models.Holiday.findOne({ order: [['day', 'DESC']] }) if (!opts.dev && (!existLastDayRes || moment(existLastDayRes.day).diff(moment(), 'day') < 32)) { await pushByEmail({ email: ['gao.zhiyuan@free-sun.com.cn', 'li.yupeng@free-sun.com.cn'], title: '人资系统[TimorHoliday]定时任务告警', text: '已有日期已少于 32 天,当尽快排查最新日志完善日期信息;' }) } } ) return { timorHoliday } }