Appearance
日报表自动生成CSV文件
场景:每日自动归档生产工艺数据。
运算:每天00:05触发,从数据库中查询或从变量中汇总前一天的产量、能耗、各工艺点平均值等数据,生成并保存为 report_YYYYMMDD.csv文件到指定目录。
目的:实现日报的自动生成,免除人工每日重复导出操作,确保数据记录的连续性和规范性。
javascript
const {getVariant,executeSql,exePgSqlR,exePgSqlCUD,exeSqliteSqlR,exeSqliteSqlCUD,getCurrentOrLastValue,setVariantValue,watch,watchAlarm,table,executeDataSourceSql,sendWxTextMessage,sendWxMessage,sendDingTextMessage,sendDingMessage,alarm } = require("GlobalConfig");//头文件请勿删除
const {getFormulaGroupList,getFormulaList,delFormula,getLastDownFormula,addFormula,editFormula,downloadFormula} = require("FormulaApi");//头文件请勿删除
// 写入文件的
const fs = require('fs').promises;
const cron = require('node-cron');
// 写入方法
async function writeObjectsToCSV(filename, list) {
try {
// 创建CSV内容
const rows = [];
// 添加数据行
list.forEach(valRow=>{
rows.push(valRow.join(','))
})
await fs.writeFile(filename, rows.join('\n'), 'utf8');
console.log(`已成功写入 到 "${filename}"`);
} catch (error) {
console.error('写入CSV文件时出错:', error);
}
}
// 获取昨天的日期
function getYesterdayDate() {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const year = yesterday.getFullYear();
const month = String(yesterday.getMonth() + 1).padStart(2, '0');
const day = String(yesterday.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
// 每天00:05触发
const task = cron.schedule('5 0 * * *', () => {
const yesterday = getYesterdayDate()
// 查询昨天的数据
table('CapacityTable')
.select('production' ,'energy' ,'avg' )
.where('time', '>', yesterday + " 00:00:00")
.where('time', '<=', yesterday + " 23:59:59")
.execute((result) => {
if (result.success) {
// 写入数据
writeObjectsToCSV('D:\\report_'+yesterday+'.csv', result.data);
}
})
}, {
scheduled: true // 不立即执行,而是等待到规定的时间再执行
});
// 启动定时任务
task.start();