Browse Source

筛选导出的(额外)字段key值

master
巴林闲侠 2 years ago
parent
commit
f3f629cf10
  1. 133
      api/app/lib/schedule/timor_holiday.js
  2. 62
      api/app/lib/utils/push.js

133
api/app/lib/schedule/timor_holiday.js

@ -6,81 +6,94 @@ module.exports = function (app, opts) {
const timorHoliday = app.fs.scheduleInit( const timorHoliday = app.fs.scheduleInit(
{ {
interval: '54 42 4 */7 * * *', interval: '54 42 4 */7 * * *',
// immediate: true, immediate: true,
proRun: true, // proRun: true,
}, },
async () => { async () => {
const { timorApiUrl } = opts const { timorApiUrl } = opts
const { models } = app.fs.dc const { models } = app.fs.dc
const { pushByEmail } = app.fs.utils
const existCount = await models.Holiday.count() const existCount = await models.Holiday.count()
let begainDay = existCount ? moment() : moment('2022-01-01') let begainDay = existCount ? moment() : moment('2022-01-01')
let endDay = moment().add(3, 'months').endOf('month') let endDay = moment().add(3, 'months').endOf('month')
let checkDay = begainDay.clone() let checkDay = begainDay.clone()
while (checkDay.isSameOrBefore(endDay)) { // while (checkDay.isSameOrBefore(endDay)) {
try { // try {
const checkDayStr = checkDay.format('YYYY-MM-DD') // let start = (new Date()).getTime();
let holidayRes = await request.get( // const checkDayStr = checkDay.format('YYYY-MM-DD')
timorApiUrl + `holiday/info/${checkDayStr}`, // let holidayRes = await request.get(
) // timorApiUrl + `holiday/info/${checkDayStr}`,
let holidayData = holidayRes.body || {} // )
if (holidayData.code == 0) { // let holidayData = holidayRes.body || {}
// if (holidayData.code == 0) {
let holidayType = holidayData.type.type // let holidayType = holidayData.type.type
let dayType = '' // let dayType = ''
if ( // if (
holidayType == 2 // holidayType == 2
&& holidayData.holiday // && holidayData.holiday
&& holidayData.holiday.wage == 3 // && holidayData.holiday.wage == 3
) { // ) {
// 正经节假日 3倍工资那种 // // 正经节假日 3倍工资那种
// festivals // // festivals
dayType = 'festivals' // dayType = 'festivals'
} else if ( // } else if (
holidayType == 1 // holidayType == 1
|| ( // || (
holidayType == 2 // holidayType == 2
&& holidayData.holiday // && holidayData.holiday
&& holidayData.holiday.wage < 3 // && holidayData.holiday.wage < 3
) // )
) { // ) {
// 普假 休息日非节假日 // // 普假 休息日非节假日
dayType = 'dayoff' // dayType = 'dayoff'
} else if (holidayType == 0 || holidayType == 3) { // } else if (holidayType == 0 || holidayType == 3) {
// 工作日或补班 // // 工作日或补班
dayType = 'workday' // dayType = 'workday'
} // }
const dbRes = await models.Holiday.findOne({ // const dbRes = await models.Holiday.findOne({
where: { // where: {
day: checkDayStr // day: checkDayStr
} // }
}) // })
if (dbRes) { // if (dbRes) {
await models.Holiday.update({ // await models.Holiday.update({
holiday: holidayData, // holiday: holidayData,
type: dayType // type: dayType
}, { // }, {
where: { // where: {
day: checkDayStr // 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']]
}) })
} else { console.log(moment(existLastDayRes.day).diff(moment(), 'day'));
await models.Holiday.create({ if (moment(existLastDayRes.day).diff(moment(), 'day') < 32 || 1) {
day: checkDayStr, console.log(1);
holiday: holidayData, await pushByEmail({
type: dayType email:[]
}) })
} }
} }
checkDay = checkDay.add(1, 'day')
} catch (error) {
console.error(error);
// TODO 发邮件
}
}
}
) )
return { return {

62
api/app/lib/utils/push.js

@ -0,0 +1,62 @@
'use strict';
const moment = require('moment')
const Core = require('@alicloud/pop-core');
const nodemailer = require('nodemailer')
module.exports = function (app, opts) {
const pushBySms = async ({ phone = [], templateCode, templateParam } = {}) => {
try {
if (phone.length) {
const client = new Core({
accessKeyId: opts.sms.accessKey,
accessKeySecret: opts.sms.accessSecret,
endpoint: 'http://dysmsapi.aliyuncs.com',//固定
apiVersion: '2017-05-25'//固定
});
const SendSmsRes = await client.request('SendSms', {
"PhoneNumbers": phone.join(','),//接收短信的手机号码。
"SignName": "飞尚尚视",//短信签名名称。必须是已添加、并通过审核的短信签名。
"TemplateCode": templateCode,//短信模板ID。必须是已添加、并通过审核的短信签名;且发送国际/港澳台消息时,请使用国际/港澳台短信模版。
"TemplateParam": JSON.stringify(templateParam)//短信模板变量对应的实际值,JSON格式。
}, {
method: 'POST'
});
return SendSmsRes
}
} catch (error) {
throw error
}
}
const pushByEmail = async ({ email = [], title, text = '', html = '', attachments = undefined, } = {}) => {
try {
let transporter = nodemailer.createTransport({
host: opts.email.host,
port: opts.email.port,
secure: true,
auth: {
user: opts.email.sender.address,
pass: opts.email.sender.password,
}
});
// send mail with defined transport object
await transporter.sendMail({
from: `${opts.email.sender.name}<${opts.email.sender.address}>`, // sender address
to: email.join(','), // list of receivers 逗号分隔字符串
subject: title, // Subject line
text: text, // plain text body
html: html, // html body
attachments: attachments
});
} catch (error) {
throw error
}
}
return {
pushByEmail,
pushBySms,
}
}
Loading…
Cancel
Save