From a0e280a81df840b70cd23080540eb17cc8e2c92f Mon Sep 17 00:00:00 2001 From: CODE <1650192445@qq.com> Date: Wed, 6 Sep 2023 14:40:07 +0800 Subject: [PATCH] =?UTF-8?q?EM=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/lib/schedule/alarms_push.js | 116 ++++++++++++++++++---------- 1 file changed, 75 insertions(+), 41 deletions(-) diff --git a/api/app/lib/schedule/alarms_push.js b/api/app/lib/schedule/alarms_push.js index d901773..0dc6264 100644 --- a/api/app/lib/schedule/alarms_push.js +++ b/api/app/lib/schedule/alarms_push.js @@ -15,7 +15,7 @@ module.exports = function (app, opts) { // interval: '12 0 0 0 */1 *', immediate: isDev, proRun: !isDev, - // proRun: true + // disabled: true }, async () => { try { @@ -140,11 +140,6 @@ module.exports = function (app, opts) { } } - console.log('corPomsProject', corPomsProject); - console.log('pepProjectName_', pepProjectName_); - console.log('pepProject_name', pepProject_name); - - const anxinProjectId = [...curAnxinProjectId] // 查当前 poms 下的结构物 并把不包含的去掉 // 可能有结构物已解绑 @@ -198,8 +193,6 @@ module.exports = function (app, opts) { }) }) - console.log('strucListRes', strucListRes); - let strucThingId = [] let strucMap = {} let searchStrucIds = strucListRes.map(s => { @@ -505,10 +498,6 @@ module.exports = function (app, opts) { if (c.alarmSubType) dataAlarmSubType = dataAlarmSubType.concat(c.alarmSubType['device_exception']) } - - console.log('dataAlarmGroupOption', dataAlarmGroupOption); - console.log('searchStrucIds', searchStrucIds); - // 查数据告警 三警合一 if (dataAlarmGroupOption.length && searchStrucIds.length) { dataAlarmGroupOption.push(-1) @@ -741,8 +730,7 @@ module.exports = function (app, opts) { n: '监测因素(中断比例)', k: 'factor', // f: (d) => { - // // d.factor.join('') - // // console.log(21211231131,d.factor); + // // d.factor.join('') // let data = [] // d.factor.map(f => data.push(f.name + '(' + f.breakData + '/' + f.sum + ')')) // return data.join('
') @@ -890,10 +878,10 @@ module.exports = function (app, opts) { let dataAlarmG45 = []; let deviceStatistic = new Set() let dataAlarmDetails = [] - if (proDebug) { - console.log(`查得数据告警 ${dataAlarms.length} 条`); - console.log(dataAlarms); - } + + pLog(`查得数据告警 ${dataAlarms.length} 条`); + pLog(dataAlarms); + if (dataAlarms.length) { const alarmIds = dataAlarms .map(ar => "'" + ar.AlarmId + "'") @@ -904,12 +892,8 @@ module.exports = function (app, opts) { AND AlarmState = 0 `).toPromise() } - if (proDebug) { - console.log(`查得数据告警详情数据 ${dataAlarmDetails.length} 条`); - } - if (proDebug) { - console.log(`pomsStrucFactorId:`, pomsStrucFactorId); - } + + pLog(`查得数据告警详情数据 ${dataAlarmDetails.length} 条`); let deviceIds = new Set() for (let d of dataAlarms) { @@ -1135,15 +1119,15 @@ module.exports = function (app, opts) { const factorData = await clickHouse.anxinyun.query( ` SELECT - t_structure_factor.structure AS structureId, - t_factor.name AS name, - t_factor.id AS id + t_structure_factor.structure AS structureId, + t_factor.name AS name, + t_factor.id AS id FROM - t_structure_factor + t_structure_factor LEFT JOIN t_factor ON t_factor.id = t_structure_factor.factor WHERE - t_structure_factor.structure IN (${[...dataAlarmG1StructureId]}) + t_structure_factor.structure IN (${[...dataAlarmG1StructureId]}) ` ).toPromise() || [] @@ -1163,7 +1147,7 @@ module.exports = function (app, opts) { LEFT JOIN t_device_sensor ON t_device_sensor.sensor = t_sensor.id WHERE - t_sensor.structure IN (${[...dataAlarmG1StructureId]}) + t_sensor.structure IN (${[...dataAlarmG1StructureId]},) AND t_sensor.factor IN (${factorId.join(',')}) ` @@ -1180,7 +1164,8 @@ module.exports = function (app, opts) { alarms.StartTime AS StartTime, alarms.SourceName AS SourceName, alarms.AlarmCode AS AlarmCode, - alarms.SourceTypeId AS SourceTypeId + alarms.SourceTypeId AS SourceTypeId, + alarms.StructureId AS StructureId FROM alarms WHERE @@ -1193,11 +1178,14 @@ module.exports = function (app, opts) { ).toPromise() || [] // 为设备分配自己产生的告警数据 + let matchedAlarmIds = [] + // 这一步能被分配的告警应该也能最终体现在邮件中 equipment.map(f => { f.alarmDatas = [] alarmDatas.map(r => { if (r.sourceId == f.iotaDeviceId) { f.alarmDatas.push({ ...r }) + matchedAlarmIds.push(r.alarmId) } }) }) @@ -1238,9 +1226,60 @@ module.exports = function (app, opts) { }) } - // console.log('数据组合', JSON.stringify(pepProject_name)); pLog('数据组合' + JSON.stringify(pepProject_name)) + // 上面的代码自内而外构建数据 + // 下面的逻辑自外向内!!! + + // 处理那些没有被匹配到的告警信息 + // 将设备没有绑定到测点的告警也推出去 + for (let a of alarmDatas) { + if (!matchedAlarmIds.includes(a.alarmId)) { + let curStruc = strucMap[a.StructureId] + if (curStruc) { + // curStruc 可以推出 告警属于哪个 project -> pomsProject + let curProject = pepProject_name.filter(p => p.anxinProjectId && p.anxinProjectId.includes(curStruc.projectId)); + for (let cp of curProject) { + // cp.projects 是结构物信息 + let curStruc = cp.projects.find(cpp => cpp.id == a.StructureId) + if (!curStruc) { + console.error(`没有查到结构物信息:${a.StructureId}?!不应该不应该!`); + } else { + // let emptyFactor = { id: -1 } + let emptyFactor = curStruc.factor.find(f => f.id == -1) + if (!emptyFactor) { + curStruc.factor.push({ + id: -1, + devices: [{ + alarmDatas: [ + { ...a } + ], + iotaDeviceId: a.sourceId, + name: a.SourceName, + structureId: a.StructureId, + }] + }) + } else { + let curDevice = emptyFactor.devices.find(d => d.iotaDeviceId == a.sourceId) + if (!curDevice) { + emptyFactor.devices.push({ + alarmDatas: [ + { ...a } + ], + iotaDeviceId: a.sourceId, + name: a.SourceName, + structureId: a.StructureId, + }) + } else { + curDevice.alarmDatas.push({ ...a }) + } + } + } + } + } + } + } + pepProject_name.forEach(h => { let rowspan1 = 0 if (h.projects.length) { @@ -1301,7 +1340,7 @@ module.exports = function (app, opts) { h.rowspan = rowspan1 }) - dataAlarmG1 = pepProject_name.filter(b => b.projects && b.projects.length > 0) || [] + dataAlarmG1 = pepProject_name //.filter(b => b.projects && b.projects.length > 0) || [] } @@ -1359,7 +1398,7 @@ module.exports = function (app, opts) { break; case 'factor': if (showOne3 && showOne4) { - tableData += `${(f['name'] + '(' + f.problem + '/' + f.devicesLength + ')') || ''}` + tableData += `${((f['name'] || '--') + '(' + f.problem + '/' + f.devicesLength + ')') || ''}` } break; case 'SourceName': @@ -1405,7 +1444,6 @@ module.exports = function (app, opts) { alarmHtml += `` + tableTitlePrefix + '' alarmHtml += alarmHtmlTitle alarmHtml += alarmContent - console.log('表格结果', alarmContent); alarmHtml += '
' return alarmHtml @@ -1525,9 +1563,7 @@ module.exports = function (app, opts) { }) } - if (proDebug) { - console.log('ifEmailSend:', ifEmailSend); - } + pLog(`ifEmailSend:${ifEmailSend}`); if (ifEmailSend) { // 查接收人的信息 @@ -1551,9 +1587,7 @@ module.exports = function (app, opts) { emails = ['1650192445@qq.com'] // emails = ['wen.lele@free-sun.com.cn'] } - if (proDebug) { - console.log('emails', emails); - } + if (emails.length) { pLog(`推送给${emails.length}人`); pLog(moment().format())