From 6cafa318f83e9e1fe2b53049efe5049030a87f44 Mon Sep 17 00:00:00 2001 From: CODE <1650192445@qq.com> Date: Tue, 5 Sep 2023 13:30:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9E=84=E7=89=A9=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/lib/controllers/project/group.js | 104 ++++++++++++++++++----- api/app/lib/schedule/alarms_push.js | 88 +++++++++---------- 2 files changed, 128 insertions(+), 64 deletions(-) diff --git a/api/app/lib/controllers/project/group.js b/api/app/lib/controllers/project/group.js index 9ade271..cc5cb7b 100644 --- a/api/app/lib/controllers/project/group.js +++ b/api/app/lib/controllers/project/group.js @@ -108,6 +108,7 @@ async function groupStatistic (ctx) { const { models } = ctx.fs.dc; const { userId } = ctx.fs.api const { clickHouse } = ctx.app.fs + const { utils: { judgeSuper, anxinStrucIdRange } } = ctx.app.fs const sequelize = ctx.fs.dc.orm const progectGroupList = await models.ProjectGroup.findAll({ @@ -140,18 +141,46 @@ async function groupStatistic (ctx) { } let anxinProjectIdArr = Array.from(anxinProjectIds) - // 统计安心云项目下的结构物id - const strucIdRes = await clickHouse.anxinyun.query( - ` - SELECT * - FROM t_project_structure - WHERE project IN (${[...anxinProjectIdArr].join(',')}, -1) + // 统计安心云项目下的结构物 + const strucRes = anxinProjectIdArr.length ? await clickHouse.anxinyun.query( ` - ).toPromise() + SELECT + t_project.id AS projectId, + t_structure.id AS strucId, + t_structure.name AS strucName, + project_state + FROM + t_project + LEFT JOIN + t_project_structure + ON t_project_structure.project = t_project.id + LEFT JOIN + t_project_structuregroup + ON t_project_structuregroup.project = t_project.id + LEFT JOIN + t_structuregroup_structure + ON t_structuregroup_structure.structuregroup = t_project_structuregroup.structuregroup + LEFT JOIN + t_project_construction + ON t_project_construction.project = t_project.id + LEFT JOIN + t_structure_site + ON t_structure_site.siteid = t_project_construction.construction + RIGHT JOIN + t_structure + ON t_structure.id = t_project_structure.structure + OR t_structure.id = t_structuregroup_structure.structure + OR t_structure.id = t_structure_site.structid + WHERE + project_state != -1 + AND + t_project.id IN (${anxinProjectIdArr.join(',')},-1) + ` + ).toPromise() : [] let strucIds = new Set() - for (let struc of strucIdRes) { - strucIds.add(struc.structure) + for (let struc of strucRes) { + strucIds.add(struc.strucId) } let strucIdArr = Array.from(strucIds) @@ -172,11 +201,11 @@ async function groupStatistic (ctx) { count += gp.anxinProjectId.length // let strucIdArr_ = - strucIdRes.filter(s => gp.anxinProjectId.includes(s.project)) + strucRes.filter(s => gp.anxinProjectId.includes(s.projectId)) strucCount += strucIdArr_.length // for (let { dataValues: off } of deviceOffTimeRes) { - if (strucIdArr_.some((s) => s.structure == off.structure)) { + if (strucIdArr_.some((s) => s.strucId == off.structure)) { if (off.offline > maxOffLineTime) { maxOffLineTime = off.offline } @@ -233,17 +262,54 @@ async function groupStatisticOnline (ctx) { WHERE project IN (${[...anxinProjectIds].join(',')}, -1) ` ).toPromise() + // 统计安心云项目下的结构物 + const strucRes = anxinProjectIds.length ? await clickHouse.anxinyun.query( + ` + SELECT + t_project.id AS projectId, + t_structure.id AS strucId, + t_structure.name AS strucName, + project_state + FROM + t_project + LEFT JOIN + t_project_structure + ON t_project_structure.project = t_project.id + LEFT JOIN + t_project_structuregroup + ON t_project_structuregroup.project = t_project.id + LEFT JOIN + t_structuregroup_structure + ON t_structuregroup_structure.structuregroup = t_project_structuregroup.structuregroup + LEFT JOIN + t_project_construction + ON t_project_construction.project = t_project.id + LEFT JOIN + t_structure_site + ON t_structure_site.siteid = t_project_construction.construction + RIGHT JOIN + t_structure + ON t_structure.id = t_project_structure.structure + OR t_structure.id = t_structuregroup_structure.structure + OR t_structure.id = t_structure_site.structid + WHERE + project_state != -1 + AND + t_project.id IN (${anxinProjectIds.join(',')},-1) + ` + ).toPromise() : [] + let strucIds = new Set() - for (let struc of strucIdRes) { - strucIds.add(struc.structure) + for (let struc of strucRes) { + strucIds.add(struc.strucId) } let strucIdArr = Array.from(strucIds) - const strucRes = strucIdArr.length ? await clickHouse.anxinyun.query( - ` - SELECT name, id FROM t_structure WHERE id IN (${[...strucIdArr].join(',')}); - ` - ).toPromise() : [] + // const strucRes = strucIdArr.length ? await clickHouse.anxinyun.query( + // ` + // SELECT name, id FROM t_structure WHERE id IN (${[...strucIdArr].join(',')}); + // ` + // ).toPromise() : [] // 查中断时间 const maxOfflineTimeRes = strucIdArr.length ? await models.StructureOff.findAll({ @@ -255,8 +321,6 @@ async function groupStatisticOnline (ctx) { // 查在线率 const strucOnlineClient = ctx.app.fs.esclient.strucOnline - console.log('es参数,', strucOnlineClient.config) - console.log('strucIdArr', strucIdArr) const onlineRes = await strucOnlineClient.search({ index: strucOnlineClient.config.index, diff --git a/api/app/lib/schedule/alarms_push.js b/api/app/lib/schedule/alarms_push.js index 33870a0..d901773 100644 --- a/api/app/lib/schedule/alarms_push.js +++ b/api/app/lib/schedule/alarms_push.js @@ -1134,68 +1134,65 @@ 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 - FROM - t_structure_factor - LEFT JOIN t_factor - ON t_factor.id = t_structure_factor.factor - WHERE - t_structure_factor.structure IN (${[...dataAlarmG1StructureId]}) - + SELECT + t_structure_factor.structure AS structureId, + t_factor.name AS name, + t_factor.id AS id + FROM + t_structure_factor + LEFT JOIN t_factor + ON t_factor.id = t_structure_factor.factor + WHERE + t_structure_factor.structure IN (${[...dataAlarmG1StructureId]}) ` ).toPromise() || [] let factorId = factorData.map(f => f.id) - //查询结构物对应的设备 + //查询结构物对应的测点 const equipment = await clickHouse.anxinyun.query( ` - SELECT - t_sensor.id AS id, - t_sensor.name AS name, - t_sensor.structure AS structureId, - t_sensor.factor AS factorId, - t_device_sensor.iota_device_id AS iotaDeviceId - FROM - t_sensor - LEFT JOIN t_device_sensor - ON t_device_sensor.sensor = t_sensor.id - WHERE - t_sensor.structure IN (${[...dataAlarmG1StructureId]}) - AND - t_sensor.factor IN (${factorId.join(',')}) + SELECT + t_sensor.id AS id, + t_sensor.name AS name, + t_sensor.structure AS structureId, + t_sensor.factor AS factorId, + t_device_sensor.iota_device_id AS iotaDeviceId + FROM + t_sensor + LEFT JOIN t_device_sensor + ON t_device_sensor.sensor = t_sensor.id + WHERE + t_sensor.structure IN (${[...dataAlarmG1StructureId]}) + AND + t_sensor.factor IN (${factorId.join(',')}) ` ).toPromise() || [] const alarmDatas = await clickHouse.dataAlarm.query( ` - SELECT + SELECT alarms.AlarmId AS alarmId, alarms.State AS state, alarms.AlarmGroup AS alarmGroup, alarms.SourceId AS sourceId, alarms.StartTime AS StartTime, alarms.SourceName AS SourceName, - alarms.AlarmCode AS AlarmCode - FROM + alarms.AlarmCode AS AlarmCode, + alarms.SourceTypeId AS SourceTypeId + FROM alarms - WHERE - alarms.StructureId In (${[...dataAlarmG1StructureId]}) - AND - alarms.AlarmGroup = 1 - AND - alarms.State < 3 + WHERE + alarms.StructureId In (${[...dataAlarmG1StructureId]}) + AND + alarms.AlarmGroup = 1 + AND + alarms.State < 3 ` ).toPromise() || [] - // console.log('当前结构物下所有告警', alarmDatas); - // console.log('监测因素', factorData); - // console.log('结构物对应的设备', equipment); - + // 为设备分配自己产生的告警数据 equipment.map(f => { f.alarmDatas = [] alarmDatas.map(r => { @@ -1204,6 +1201,8 @@ module.exports = function (app, opts) { } }) }) + + // 为监测因素分配绑定的设备 factorData.map(v => { v.devices = [] equipment.map(f => { @@ -1212,14 +1211,16 @@ module.exports = function (app, opts) { } }) if (strucMap[v.structureId]) { + // 并为 strucMap 补充 factor 监测因素信息 strucMap[v.structureId].factor.push({ ...v }) } }) - let projectList = [] for (let key in strucMap) { if (strucMap[key].factor.length > 0) { + // 如果有监测因素信息 + // 存结构物信息至 projectList projectList.push(strucMap[key]) } } @@ -1228,6 +1229,8 @@ module.exports = function (app, opts) { pepProject_name.map(s => { s.projects = [] projectList.map(f => { + // 匹配 pepProject_name 中的项目 + // 匹配到则向 projects 中插入 f 也就是结构物信息 + 项目的id if (s.anxinProjectId.includes(f.projectId)) { s.projects.push(f) } @@ -1274,6 +1277,7 @@ module.exports = function (app, opts) { delete c.alarmDatas } }) + // 进一步筛选了有告警的设备 f.devices = f.devices.filter(b => b.alarmDatas && b.alarmDatas.length > 0) } else { delete f.devices @@ -1384,10 +1388,7 @@ module.exports = function (app, opts) { } else { for (let [index, a] of alarmData.entries()) { - alarmContent += packageTableData({ data: a, titleArr: alarmTitleArr }) - - if (a[keyOfStartTime] && moment(a[keyOfStartTime]).isBetween(newAddStartTime, newAddEndTime)) { newAddCount++ } @@ -1395,7 +1396,6 @@ module.exports = function (app, opts) { accumulate = alarmData.length } - tableTitlePrefix += titlePrefix != '数据异常&视频异常' ? c.tactics == 'abnormal_rate' ?