From b179260cf7c1e615894f16e21ef9bd8d97b9d954 Mon Sep 17 00:00:00 2001 From: "gao.zhiyuan" Date: Thu, 27 Oct 2022 16:44:03 +0800 Subject: [PATCH] fix pepIsdelete --- api/app/lib/controllers/organization/index.js | 2 +- api/app/lib/controllers/push/config.js | 2 +- api/app/lib/schedule/alarms_push.js | 212 ++++++++++++++++-- 3 files changed, 195 insertions(+), 21 deletions(-) diff --git a/api/app/lib/controllers/organization/index.js b/api/app/lib/controllers/organization/index.js index c6d048d..a742c49 100644 --- a/api/app/lib/controllers/organization/index.js +++ b/api/app/lib/controllers/organization/index.js @@ -275,7 +275,7 @@ async function user (ctx) { // 查对应的项企项目信息 let pepProjectRes = pepPojectIds.size ? await clickHouse.projectManage.query(` - SELECT id, project_name isdelete FROM t_pim_project WHERE id IN (${[...pepPojectIds]}) + SELECT id, project_name, isdelete FROM t_pim_project WHERE id IN (${[...pepPojectIds]}) `).toPromise() : [] diff --git a/api/app/lib/controllers/push/config.js b/api/app/lib/controllers/push/config.js index 01eedd2..4564481 100644 --- a/api/app/lib/controllers/push/config.js +++ b/api/app/lib/controllers/push/config.js @@ -29,7 +29,7 @@ async function list (ctx) { let bindAnixinStrucIds = bindAnixinStrucRes.map(s => s.id) findOption.where.strucId = { $contains: bindAnixinStrucIds } } else if (keywordTarget == 'pepProject') { - + // 这种情况在 pomsProjectRange 函数值已处理 } } const pomsProjectRes = await pomsProjectRange({ diff --git a/api/app/lib/schedule/alarms_push.js b/api/app/lib/schedule/alarms_push.js index 3cd3eeb..4659d02 100644 --- a/api/app/lib/schedule/alarms_push.js +++ b/api/app/lib/schedule/alarms_push.js @@ -5,12 +5,13 @@ module.exports = function (app, opts) { { interval: '12 */1 * * * *', immediate: true, // dev - // proRun: true, + proRun: true, }, async () => { try { const { models, ORM: sequelize } = app.fs.dc const { clickHouse } = app.fs + const { database: anxinyun } = clickHouse.anxinyun.opts.config const { pushBySms, pushByEmail } = app.fs.utils const curMinOfYear = moment().diff(moment().startOf('year'), 'minutes') const configListRes = await models.AlarmPushConfig.findAll({ @@ -52,7 +53,7 @@ module.exports = function (app, opts) { for (let { dataValues: c } of configListRes) { if (c.tacticsParams && c.tactics) { - const { projectCorrelation } = c + const { projectCorrelation, strucId } = c const { interval, deviceProportion } = c.tacticsParams if ( @@ -68,31 +69,46 @@ module.exports = function (app, opts) { && c.timeType.some(ct => ct == corPepProject.construction_status_id) ) ) { + // TODO 查当前 poms 下的结构物 并把不包含的去掉 + + const strucListRes = strucId.length ? await clickHouse.anxinyun.query(` + SELECT id, iota_thing_id, name + FROM t_structure + WHERE id IN (${strucId.join(',')}) + `).toPromise() : [] + let dataAlarmOption = [] let dataAlarmGroupOption = [] let dataAlarms = [] + let videoAlarms = [] + + let deviceCount = 0 + let cameraCount = 0 // 判断推送策略 let pointTime = moment().subtract(interval, 'minute').format('YYYY-MM-DD HH:mm:ss') - if (c.tactics.includes('immediately')) { + if (c.tactics == 'immediately') { dataAlarmOption.push(`StartTime >= '${pointTime}'`); - } else if (c.tactics.includes('continue')) { + } else if (c.tactics == 'continue') { dataAlarmOption.push(`StartTime <= '${pointTime}'`); - } else if (c.tactics.includes('abnormal_rate')) { + } else if (c.tactics == 'abnormal_rate') { dataAlarmOption.push(`StartTime <= '${pointTime}'`); if (c.alarmType.includes('data_outages') || c.alarmType.includes('data_exception')) { // 查了设备异常率 去安心云查当前项目下的设备数量 - // TODO 等郑兴同步以太数据再查 - const deviceCount = 9999 + // TODO 等同步以太数据再查 + deviceCount = 9999 // await clickHouse.anxinyun.query(` // SELECT count(*) FROM // `).toPromise() } if (c.alarmType.includes('video_exception')) { // 查了视频异常 去安心云查 接入的 萤石 设备数量 - const cameraCount = await clickHouse.anxinyun.query(` - SELECT count(*) FROM - `).toPromise() + cameraCount = strucId.length ? + (await clickHouse.anxinyun.query(` + SELECT count(*) AS count FROM t_video_ipc + WHERE structure IN (${strucId.join(',')}) + `).toPromise())[0].count + : 0 } } @@ -107,7 +123,161 @@ module.exports = function (app, opts) { dataAlarmGroupOption.push(3) } if (c.alarmType.includes('video_exception')) { + videoAlarms = strucId.length ? await clickHouse.vcmp.query( + ` + SELECT + cameraAlarm.cameraId AS cameraId, + cameraAlarm.cameraName AS cameraName, + cameraAlarm.cameraSerialNo AS cameraSerialNo, + cameraAlarm.cameraChannelNo AS cameraChannelNo, + cameraAlarm.alarmId AS alarmId, + cameraAlarm.createTime AS createTime, + cameraAlarm.confirmContent AS confirmContent, + cameraAlarm.confirmTime AS confirmTime, + cameraAlarm.autoRestore AS autoRestore, + camera_status_resolve.id AS resolveId, + camera_status.describe AS statusDescribe, + camera_status_resolve.resolve AS resolve, + "gbCamera".online AS cameraOnline, + anxinIpc.t_video_ipc.name AS anxinIpcPosition, + anxinStation.id AS anxinStationId, + anxinStation.name AS anxinStationName, + anxinStruc.name AS strucName, + anxinStruc.id AS strucId + FROM ( + SELECT + camera.id AS cameraId, + camera.gb_id AS gbId, + camera.name AS cameraName, + camera_status_alarm.id AS alarmId, + camera_status_alarm.create_time AS createTime, + camera_status_alarm.status_id AS statusId, + camera_status_alarm.serial_no AS cameraSerialNo, + camera_status_alarm.channel_no AS cameraChannelNo, + camera_status_alarm.confirm AS confirmContent, + ${'camera_status_alarm.auto_restore AS autoRestore,'} + camera_status_alarm.confirm_time AS confirmTime + FROM camera_status_alarm + INNER JOIN ${anxinyun}.t_video_ipc + ON toString(${anxinyun}.t_video_ipc.channel_no) = camera_status_alarm.channel_no + AND ${anxinyun}.t_video_ipc.serial_no = camera_status_alarm.serial_no + AND ${anxinyun}.t_video_ipc.structure IN (${strucId.join(',')}) + INNER JOIN camera + ON camera.serial_no = camera_status_alarm.serial_no + AND camera.channel_no = camera_status_alarm.channel_no + WHERE + camera.delete = false + AND camera.recycle_time is null + ) AS cameraAlarm + LEFT JOIN camera_status + ON cameraAlarm.platform = camera_status.platform + AND cameraAlarm.statusId = camera_status.id + LEFT JOIN camera_status_resolve + ON camera_status_resolve.status_id = camera_status.id + LEFT JOIN "gbCamera" + ON "gbCamera".id = cameraAlarm.gbId + + LEFT JOIN ${anxinyun}.t_video_ipc AS anxinIpc + ON toString(anxinIpc.channel_no) = cameraAlarm.cameraChannelNo + AND anxinIpc.serial_no = cameraAlarm.cameraSerialNo + LEFT JOIN ${anxinyun}.t_structure AS anxinStruc + ON anxinStruc.id = anxinIpc.structure + AND anxinStruc.id IN (${strucId.join(',')}) + LEFT JOIN ${anxinyun}.t_video_ipc_station AS anxinIpcStation + ON anxinIpcStation.ipc = anxinIpc.id + LEFT JOIN ${anxinyun}.t_sensor AS anxinStation + ON anxinStation.id = anxinIpcStation.station + ` + ).toPromise() : [] + + let returnD = [] + let positionD = {} + // 每个设备一个告警 + for (let a of videoAlarms) { + if (positionD[a.cameraId]) { + let curD = returnD[positionD[a.cameraId].positionReturnD] + if (a.resolveId && !curD.resolve.some(r => r.id == a.resolveId)) { + curD.resolve.push({ + id: a.resolveId, + resolve: a.resolve + }) + } + if (a.strucId && !curD.struc.some(s => s.id == a.strucId)) { + curD.struc.push({ + id: a.strucId, + projectId: a.projectId, + name: a.strucName + }) + } + if (a.anxinStationId && !curD.station.some(s => s.id == a.anxinStationId)) { + curD.station.push({ + id: a.anxinStationId, + name: a.anxinStationName, + position: a.anxinIpcPosition + }) + } + } else { + let d = { + cameraId: a.cameraId, + cameraName: a.cameraName, + camerOnline: a.cameraOnline, + cameraSerialNo: a.cameraSerialNo, + cameraChannelNo: a.cameraChannelNo, + autoRestore: a.autoRestore, + createTime: a.createTime, + updateTime: a.updateTime, + platform: a.platform, + statusDescribe: a.statusDescribe, + alarmId: a.alarmId, + confirmContent: a.confirmContent, + confirmTime: a.confirmTime, + + venderId: a.venderId, + venderName: a.venderName, + cameraKindId: a.cameraKindId, + + resolve: [], + struc: [], + station: [] + } + // pep 项目 + // d.pomsProject = ( + // anxinStruc.find(as => as.strucId == a.strucId) || + // { + // pomsProject: [ + + // ] + // } + // ).pomsProject + + if (a.resolveId) { + d.resolve.push({ + id: a.resolveId, + resolve: a.resolve + }) + } + if (a.strucId) { + d.struc.push({ + id: a.strucId, + projectId: a.projectId, + name: a.strucName + }) + } + if (a.anxinStationId) { + d.station.push({ + id: a.anxinStationId, + name: a.anxinStationName, + position: a.anxinIpcPosition + }) + } + returnD.push(d) + positionD[a.cameraId] = { + positionReturnD: returnD.length - 1 + } + } + } + let p = 1 } if (c.alarmType.includes('app_exception')) { @@ -117,15 +287,19 @@ module.exports = function (app, opts) { dataAlarmGroupOption.push(5) } // - dataAlarmGroupOption.length ? - dataAlarmOption.push(`AlarmGroup IN ${dataAlarmGroupOption.join(',')}`) : '' - dataAlarms = await clickHouse.dataAlarm.query(` - SELECT * FROM alarms - WHERE - State NOT IN (3, 4) - ${dataAlarmOption.length ? ' AND ' + dataAlarmOption.join(' AND ') : ''} - `).toPromise() - console.log(dataAlarms); + if (dataAlarmGroupOption.length) { + dataAlarmGroupOption.push(-1) + dataAlarmOption.push(`AlarmGroup IN (${dataAlarmGroupOption.join(',')})`) + dataAlarms = await clickHouse.dataAlarm.query(` + SELECT * FROM alarms + WHERE + State NOT IN (3, 4) + ${dataAlarmOption.length ? ' AND ' + dataAlarmOption.join(' AND ') : ''} + `).toPromise() + console.log(dataAlarms); + } + + } } }