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 { models } = ctx.fs.dc;
const { userId } = ctx.fs.api const { userId } = ctx.fs.api
const { clickHouse } = ctx.app.fs const { clickHouse } = ctx.app.fs
const { utils: { judgeSuper, anxinStrucIdRange } } = ctx.app.fs
const sequelize = ctx.fs.dc.orm const sequelize = ctx.fs.dc.orm
const progectGroupList = await models.ProjectGroup.findAll({ const progectGroupList = await models.ProjectGroup.findAll({
@ -140,18 +141,46 @@ async function groupStatistic (ctx) {
} }
let anxinProjectIdArr = Array.from(anxinProjectIds) let anxinProjectIdArr = Array.from(anxinProjectIds)
// 统计安心云项目下的结构物id // 统计安心云项目下的结构物
const strucIdRes = await clickHouse.anxinyun.query( const strucRes = anxinProjectIdArr.length ? await clickHouse.anxinyun.query(
`
SELECT *
FROM t_project_structure
WHERE project IN (${[...anxinProjectIdArr].join(',')}, -1)
` `
).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() let strucIds = new Set()
for (let struc of strucIdRes) { for (let struc of strucRes) {
strucIds.add(struc.structure) strucIds.add(struc.strucId)
} }
let strucIdArr = Array.from(strucIds) let strucIdArr = Array.from(strucIds)
@ -172,11 +201,11 @@ async function groupStatistic (ctx) {
count += gp.anxinProjectId.length count += gp.anxinProjectId.length
// //
let strucIdArr_ = let strucIdArr_ =
strucIdRes.filter(s => gp.anxinProjectId.includes(s.project)) strucRes.filter(s => gp.anxinProjectId.includes(s.projectId))
strucCount += strucIdArr_.length strucCount += strucIdArr_.length
// //
for (let { dataValues: off } of deviceOffTimeRes) { 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) { if (off.offline > maxOffLineTime) {
maxOffLineTime = off.offline maxOffLineTime = off.offline
} }
@ -233,17 +262,54 @@ async function groupStatisticOnline (ctx) {
WHERE project IN (${[...anxinProjectIds].join(',')}, -1) WHERE project IN (${[...anxinProjectIds].join(',')}, -1)
` `
).toPromise() ).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() let strucIds = new Set()
for (let struc of strucIdRes) { for (let struc of strucRes) {
strucIds.add(struc.structure) strucIds.add(struc.strucId)
} }
let strucIdArr = Array.from(strucIds) let strucIdArr = Array.from(strucIds)
const strucRes = strucIdArr.length ? await clickHouse.anxinyun.query( // const strucRes = strucIdArr.length ? await clickHouse.anxinyun.query(
` // `
SELECT name, id FROM t_structure WHERE id IN (${[...strucIdArr].join(',')}); // SELECT name, id FROM t_structure WHERE id IN (${[...strucIdArr].join(',')});
` // `
).toPromise() : [] // ).toPromise() : []
// 查中断时间 // 查中断时间
const maxOfflineTimeRes = strucIdArr.length ? await models.StructureOff.findAll({ const maxOfflineTimeRes = strucIdArr.length ? await models.StructureOff.findAll({
@ -255,8 +321,6 @@ async function groupStatisticOnline (ctx) {
// 查在线率 // 查在线率
const strucOnlineClient = ctx.app.fs.esclient.strucOnline const strucOnlineClient = ctx.app.fs.esclient.strucOnline
console.log('es参数,', strucOnlineClient.config)
console.log('strucIdArr', strucIdArr)
const onlineRes = await strucOnlineClient.search({ const onlineRes = await strucOnlineClient.search({
index: strucOnlineClient.config.index, 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( const factorData = await clickHouse.anxinyun.query(
` `
SELECT SELECT
t_structure_factor.structure AS structureId, t_structure_factor.structure AS structureId,
t_factor.name AS name, t_factor.name AS name,
t_factor.id AS id t_factor.id AS id
FROM FROM
t_structure_factor t_structure_factor
LEFT JOIN t_factor LEFT JOIN t_factor
ON t_factor.id = t_structure_factor.factor ON t_factor.id = t_structure_factor.factor
WHERE WHERE
t_structure_factor.structure IN (${[...dataAlarmG1StructureId]}) t_structure_factor.structure IN (${[...dataAlarmG1StructureId]})
` `
).toPromise() || [] ).toPromise() || []
let factorId = factorData.map(f => f.id) let factorId = factorData.map(f => f.id)
//查询结构物对应的设备 //查询结构物对应的测点
const equipment = await clickHouse.anxinyun.query( const equipment = await clickHouse.anxinyun.query(
` `
SELECT SELECT
t_sensor.id AS id, t_sensor.id AS id,
t_sensor.name AS name, t_sensor.name AS name,
t_sensor.structure AS structureId, t_sensor.structure AS structureId,
t_sensor.factor AS factorId, t_sensor.factor AS factorId,
t_device_sensor.iota_device_id AS iotaDeviceId t_device_sensor.iota_device_id AS iotaDeviceId
FROM FROM
t_sensor t_sensor
LEFT JOIN t_device_sensor LEFT JOIN t_device_sensor
ON t_device_sensor.sensor = t_sensor.id ON t_device_sensor.sensor = t_sensor.id
WHERE WHERE
t_sensor.structure IN (${[...dataAlarmG1StructureId]}) t_sensor.structure IN (${[...dataAlarmG1StructureId]})
AND AND
t_sensor.factor IN (${factorId.join(',')}) t_sensor.factor IN (${factorId.join(',')})
` `
).toPromise() || [] ).toPromise() || []
const alarmDatas = await clickHouse.dataAlarm.query( const alarmDatas = await clickHouse.dataAlarm.query(
` `
SELECT SELECT
alarms.AlarmId AS alarmId, alarms.AlarmId AS alarmId,
alarms.State AS state, alarms.State AS state,
alarms.AlarmGroup AS alarmGroup, alarms.AlarmGroup AS alarmGroup,
alarms.SourceId AS sourceId, alarms.SourceId AS sourceId,
alarms.StartTime AS StartTime, alarms.StartTime AS StartTime,
alarms.SourceName AS SourceName, alarms.SourceName AS SourceName,
alarms.AlarmCode AS AlarmCode alarms.AlarmCode AS AlarmCode,
FROM alarms.SourceTypeId AS SourceTypeId
FROM
alarms alarms
WHERE WHERE
alarms.StructureId In (${[...dataAlarmG1StructureId]}) alarms.StructureId In (${[...dataAlarmG1StructureId]})
AND AND
alarms.AlarmGroup = 1 alarms.AlarmGroup = 1
AND AND
alarms.State < 3 alarms.State < 3
` `
).toPromise() || [] ).toPromise() || []
// console.log('当前结构物下所有告警', alarmDatas); // 为设备分配自己产生的告警数据
// console.log('监测因素', factorData);
// console.log('结构物对应的设备', equipment);
equipment.map(f => { equipment.map(f => {
f.alarmDatas = [] f.alarmDatas = []
alarmDatas.map(r => { alarmDatas.map(r => {
@ -1204,6 +1201,8 @@ module.exports = function (app, opts) {
} }
}) })
}) })
// 为监测因素分配绑定的设备
factorData.map(v => { factorData.map(v => {
v.devices = [] v.devices = []
equipment.map(f => { equipment.map(f => {
@ -1212,14 +1211,16 @@ module.exports = function (app, opts) {
} }
}) })
if (strucMap[v.structureId]) { if (strucMap[v.structureId]) {
// 并为 strucMap 补充 factor 监测因素信息
strucMap[v.structureId].factor.push({ ...v }) strucMap[v.structureId].factor.push({ ...v })
} }
}) })
let projectList = [] let projectList = []
for (let key in strucMap) { for (let key in strucMap) {
if (strucMap[key].factor.length > 0) { if (strucMap[key].factor.length > 0) {
// 如果有监测因素信息
// 存结构物信息至 projectList
projectList.push(strucMap[key]) projectList.push(strucMap[key])
} }
} }
@ -1228,6 +1229,8 @@ module.exports = function (app, opts) {
pepProject_name.map(s => { pepProject_name.map(s => {
s.projects = [] s.projects = []
projectList.map(f => { projectList.map(f => {
// 匹配 pepProject_name 中的项目
// 匹配到则向 projects 中插入 f 也就是结构物信息 + 项目的id
if (s.anxinProjectId.includes(f.projectId)) { if (s.anxinProjectId.includes(f.projectId)) {
s.projects.push(f) s.projects.push(f)
} }
@ -1274,6 +1277,7 @@ module.exports = function (app, opts) {
delete c.alarmDatas delete c.alarmDatas
} }
}) })
// 进一步筛选了有告警的设备
f.devices = f.devices.filter(b => b.alarmDatas && b.alarmDatas.length > 0) f.devices = f.devices.filter(b => b.alarmDatas && b.alarmDatas.length > 0)
} else { } else {
delete f.devices delete f.devices
@ -1384,10 +1388,7 @@ module.exports = function (app, opts) {
} else { } else {
for (let [index, a] of alarmData.entries()) { for (let [index, a] of alarmData.entries()) {
alarmContent += packageTableData({ data: a, titleArr: alarmTitleArr }) alarmContent += packageTableData({ data: a, titleArr: alarmTitleArr })
if (a[keyOfStartTime] && moment(a[keyOfStartTime]).isBetween(newAddStartTime, newAddEndTime)) { if (a[keyOfStartTime] && moment(a[keyOfStartTime]).isBetween(newAddStartTime, newAddEndTime)) {
newAddCount++ newAddCount++
} }
@ -1395,7 +1396,6 @@ module.exports = function (app, opts) {
accumulate = alarmData.length accumulate = alarmData.length
} }
tableTitlePrefix += tableTitlePrefix +=
titlePrefix != '数据异常&视频异常' ? titlePrefix != '数据异常&视频异常' ?
c.tactics == 'abnormal_rate' ? c.tactics == 'abnormal_rate' ?

Loading…
Cancel
Save