Browse Source

结构物筛选范围

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

102
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(
// 统计安心云项目下的结构物
const strucRes = anxinProjectIdArr.length ? await clickHouse.anxinyun.query(
`
SELECT *
FROM t_project_structure
WHERE project IN (${[...anxinProjectIdArr].join(',')}, -1)
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()
).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,

24
api/app/lib/schedule/alarms_push.js

@ -1144,13 +1144,12 @@ module.exports = function (app, opts) {
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
@ -1180,7 +1179,8 @@ module.exports = function (app, opts) {
alarms.SourceId AS sourceId,
alarms.StartTime AS StartTime,
alarms.SourceName AS SourceName,
alarms.AlarmCode AS AlarmCode
alarms.AlarmCode AS AlarmCode,
alarms.SourceTypeId AS SourceTypeId
FROM
alarms
WHERE
@ -1192,10 +1192,7 @@ module.exports = function (app, opts) {
`
).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