Browse Source

结构物筛选范围

dev
CODE 1 year ago
parent
commit
6cafa318f8
  1. 104
      api/app/lib/controllers/project/group.js
  2. 88
      api/app/lib/schedule/alarms_push.js

104
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,

88
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' ?

Loading…
Cancel
Save