'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 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') } catch (error) { console.error(error); // TODO 发邮件 } } } ) return { timorHoliday } }