liujiangyong
2 years ago
3 changed files with 0 additions and 228 deletions
@ -1,208 +0,0 @@ |
|||
const fs = require('fs'); |
|||
const moment = require('moment') |
|||
const path = require('path') |
|||
const OSS = require('ali-oss'); |
|||
const uuid = require('uuid'); |
|||
|
|||
const TEST = false |
|||
// const TEST = true
|
|||
|
|||
module.exports = function (app, opts) { |
|||
const hideDangerStatistic = app.fs.scheduleInit( |
|||
// 按月、季度、年统计隐患整改
|
|||
{ |
|||
interval: '0 32 4 1 */1 *', |
|||
immediate: TEST, |
|||
proRun: !TEST, |
|||
}, |
|||
async () => { |
|||
const { aliOss } = opts |
|||
const { utils: { simpleExcelDown } } = app.fs; |
|||
|
|||
try { |
|||
const { models } = app.fs.dc |
|||
const today = moment() |
|||
const date = today.date() |
|||
const month = today.month() + 1 |
|||
const quarter = today.quarter() |
|||
const year = today.year() |
|||
|
|||
const client = new OSS({ |
|||
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
|
|||
region: aliOss.region, |
|||
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
|
|||
accessKeyId: aliOss.accessKey, |
|||
accessKeySecret: aliOss.secretKey, |
|||
// 填写Bucket名称,例如examplebucket。
|
|||
bucket: aliOss.bucket, |
|||
}); |
|||
|
|||
|
|||
const statistic = async (startTime, endTime, type, timeShow, typeEnglish, time) => { |
|||
const siteRectifyRes = await models.HideDangerRectifySites.findAll({ |
|||
where: {}, |
|||
distinct: true, |
|||
include: [{ |
|||
model: models.Site, |
|||
attributes: ['id', 'name'], |
|||
}, { |
|||
model: models.HideDangerDispose, |
|||
order: [['id', 'ASC']], |
|||
// include: [{
|
|||
// model: models.User,
|
|||
// attributes: ['id', 'displayName'],
|
|||
// }]
|
|||
}, { |
|||
model: models.HideDangerRectify, |
|||
where: { |
|||
createTime: { |
|||
$between: [ |
|||
startTime.format('YYYY-MM-DD HH:mm:ss'), |
|||
endTime.format('YYYY-MM-DD HH:mm:ss') |
|||
] |
|||
} |
|||
}, |
|||
},] |
|||
}) |
|||
|
|||
let reportHeader = [{ |
|||
title: "工程项目名称", |
|||
key: "siteName", |
|||
}, { |
|||
title: "整改任务名称", |
|||
key: "name", |
|||
}, { |
|||
title: "提交时间", |
|||
key: "submitTime", |
|||
}, { |
|||
title: "审批状态", |
|||
key: "state", |
|||
},] |
|||
let reportData = [] |
|||
|
|||
let siteMap = new Set() |
|||
let completedRectifyCount = 0 |
|||
let uncompletedRectifyCount = 0 |
|||
for (let s of siteRectifyRes) { |
|||
siteMap.add(s.siteId); |
|||
|
|||
let sts = s.status |
|||
let stsChinese = '' |
|||
if (sts == 0) { |
|||
stsChinese = '待整改' |
|||
} else if (sts == 1) { |
|||
stsChinese = '待审批' |
|||
} else if (sts == 2) { |
|||
stsChinese = '待复审' |
|||
} else if (sts == 3 || sts == 4) { |
|||
stsChinese = '审批驳回' |
|||
} else if (sts == 5) { |
|||
stsChinese = '审批通过' |
|||
} |
|||
|
|||
if ( |
|||
s.hideDangerDisposes.length |
|||
&& s.hideDangerDisposes.some(sd => sd.type == 3 && sd.admit) |
|||
) { |
|||
completedRectifyCount++ |
|||
} else { |
|||
uncompletedRectifyCount++ |
|||
} |
|||
|
|||
reportData.push({ |
|||
siteName: s.dataValues.site.dataValues.name, |
|||
name: s.dataValues.hideDangerRectify.dataValues.name, |
|||
submitTime: s.dataValues.lastDisposeTime ? moment(s.dataValues.lastDisposeTime).format('YYYY-MM-DD HH:mm:ss') : '', |
|||
state: stsChinese |
|||
}) |
|||
} |
|||
const fileName = `中鼎国际隐患整改数据报表-${type}-${timeShow}` + '.xlsx' |
|||
const filePath = await simpleExcelDown({ |
|||
data: reportData, header: reportHeader, fileName |
|||
}) |
|||
// const fileData = fs.readFileSync(filePath);
|
|||
|
|||
// 保存文件到云
|
|||
|
|||
let uploadPath = path.posix.join('hideDangerReport', uuid.v4(), fileName); |
|||
let uploadResult = await client.put( |
|||
uploadPath, |
|||
filePath, |
|||
// { contentLength: size }
|
|||
); |
|||
//保存信息到数据库
|
|||
const existReportRes = await models.HideDangerReport.findOne({ |
|||
where: { |
|||
type: typeEnglish, |
|||
time: String(time), |
|||
} |
|||
}) |
|||
const storageData = { |
|||
siteCount: siteMap.size, |
|||
rectifyCount: completedRectifyCount + uncompletedRectifyCount, |
|||
completedRectifyCount, |
|||
uncompletedRectifyCount, |
|||
report: uploadResult.name, |
|||
type: typeEnglish, |
|||
time: String(time), |
|||
} |
|||
if (existReportRes) { |
|||
await models.HideDangerReport.update(storageData, { |
|||
where: { |
|||
id: existReportRes.id |
|||
} |
|||
}) |
|||
} else { |
|||
await models.HideDangerReport.create(storageData) |
|||
} |
|||
|
|||
} |
|||
|
|||
if (month == 1) { |
|||
// 统计一下上一年
|
|||
let startTime = today.clone().subtract(1, 'year').startOf('year') |
|||
let endTime = today.clone().subtract(1, 'year').endOf('year') |
|||
await statistic( |
|||
startTime, |
|||
endTime, |
|||
'年报', |
|||
`${startTime.year()}${startTime.month() + 1}-${endTime.month() + 1}`, |
|||
'year', |
|||
startTime.year() |
|||
) |
|||
} |
|||
if ([1, 4, 7, 10].includes(month)) { |
|||
// 统计一下上季度
|
|||
let startTime = today.clone().subtract(3, 'month').startOf('month') |
|||
let endTime = today.clone().subtract(1, 'month').endOf('month') |
|||
await statistic( |
|||
startTime, |
|||
endTime, |
|||
'季报', |
|||
`${startTime.year()}${startTime.month() + 1}-${endTime.month() + 1}`, |
|||
'quarter', |
|||
`${startTime.year()}-${month == 1 ? 'Q4' : month == 4 ? 'Q1' : month == 7 ? 'Q2' : 'Q3'}` |
|||
) |
|||
} |
|||
// 统计一下上个月
|
|||
let startTime = today.clone().subtract(1, 'month').startOf('month') |
|||
let endTime = today.clone().subtract(1, 'month').endOf('month') |
|||
await statistic( |
|||
startTime, |
|||
endTime, |
|||
'月报', |
|||
`${startTime.year()}${startTime.month() + 1}`, |
|||
'month', |
|||
startTime.format('YYYY-MM') |
|||
) |
|||
|
|||
} catch (error) { |
|||
app.fs.logger.error(`sechedule: hideDangerStatistic, error: ${error}`); |
|||
} |
|||
} |
|||
); |
|||
|
|||
return { |
|||
hideDangerStatistic |
|||
} |
|||
} |
Loading…
Reference in new issue