You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
7.0 KiB
193 lines
7.0 KiB
|
|
const moment = require('moment');
|
|
|
|
async function getStructures(ctx) {
|
|
try {
|
|
const { models } = ctx.fs.dc;
|
|
const { clickHouse } = ctx.app.fs
|
|
const { pomsProjectId } = ctx.query
|
|
let bindRes = []
|
|
//选择全局就是查询所有项目下的结构物,有选择项目就只查询对应项目的结构物
|
|
if (pomsProjectId) {
|
|
bindRes = await models.ProjectCorrelation.findAll({ where: { id: { $in: pomsProjectId.split(',') } } })
|
|
} else {
|
|
bindRes = await models.ProjectCorrelation.findAll()
|
|
}
|
|
let anxinProjectIds = new Set()
|
|
for (let b of bindRes) {
|
|
if (b.anxinProjectId.length) {
|
|
for (let aid of b.anxinProjectId) {
|
|
anxinProjectIds.add(aid)
|
|
}
|
|
}
|
|
}
|
|
let undelStrucRes = []
|
|
if (bindRes) {
|
|
undelStrucRes = anxinProjectIds.size ?
|
|
await clickHouse.anxinyun.query(
|
|
`
|
|
SELECT
|
|
t_structure.id AS strucId,
|
|
t_structure.name AS strucName
|
|
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)
|
|
AND t_structure.external_platform is not null
|
|
ORDER BY strucId
|
|
`
|
|
).toPromise() :
|
|
[]
|
|
}
|
|
// undelStrucRes.push({ strucId: 4036, strucName: '象山港大桥' })
|
|
// undelStrucRes.push({ strucId: 1, strucName: '象山港大' })
|
|
ctx.status = 200;
|
|
ctx.body = undelStrucRes
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: error`);
|
|
ctx.status = 400;
|
|
ctx.body = {
|
|
message: typeof error == 'string' ? error : undefined
|
|
}
|
|
}
|
|
}
|
|
|
|
async function getFactors(ctx) {
|
|
try {
|
|
const { models } = ctx.fs.dc;
|
|
const { clickHouse } = ctx.app.fs
|
|
const { structId, cacl } = ctx.query
|
|
let list = []
|
|
if (cacl) {
|
|
const factorList = await clickHouse.alarmLocal.query(`select distinct SafetyFactorTypeId, SafetyFactorTypeName from sensors where PlatformStructureId =${structId}`).toPromise()
|
|
let fList = factorList.map(m => m.SafetyFactorTypeId)
|
|
list = await clickHouse.alarmLocal.query(`select distinct FactorID, Name,Items,ItemNames from factors where FactorID in (${[...fList, -1].join(',')})`).toPromise()
|
|
} else {
|
|
list = await clickHouse.alarmLocal.query(`select distinct SafetyFactorTypeId, SafetyFactorTypeName from sensors where PlatformStructureId =${structId}`).toPromise()
|
|
}
|
|
ctx.body = list
|
|
ctx.status = 200
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: error`);
|
|
ctx.status = 400;
|
|
ctx.body = {
|
|
message: typeof error == 'string' ? error : undefined
|
|
}
|
|
}
|
|
}
|
|
//查询设备
|
|
async function getSensors(ctx) {
|
|
try {
|
|
const { models } = ctx.fs.dc;
|
|
const { clickHouse } = ctx.app.fs
|
|
const { structId, SafetyFactorTypeId } = ctx.query
|
|
const list = await clickHouse.alarmLocal.query(`
|
|
select distinct SensorId,SensorLocationDescription,Project
|
|
from sensors where PlatformStructureId =${structId}
|
|
and SafetyFactorTypeId=${SafetyFactorTypeId}`).toPromise()
|
|
ctx.body = list
|
|
ctx.status = 200
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: error`);
|
|
ctx.status = 400;
|
|
ctx.body = {
|
|
message: typeof error == 'string' ? error : undefined
|
|
}
|
|
}
|
|
}
|
|
//根据设备id和监测因素id查询监测数据
|
|
async function getMonitorData(ctx) {
|
|
try {
|
|
const { clickHouse } = ctx.app.fs
|
|
const { factorId, sensorId, startTime, endTime } = ctx.query
|
|
const factorsList = await clickHouse.alarmLocal.query(`SELECT FactorID,Items,ItemNames,ItemUnits FROM factors
|
|
WHERE FactorID=${factorId}
|
|
`).toPromise() || []
|
|
const dataArray = sensorId.split(',')
|
|
const transformedArray = dataArray.map(item => {
|
|
return item.replace('-',':')+''
|
|
})
|
|
const id=`(${transformedArray.map(id => `'${id}'`).join(',')})`
|
|
const monitorData = await clickHouse.alarmLocal.query(`SELECT SensorId,CollectTime,Values FROM themes
|
|
WHERE SensorId in ${id}
|
|
AND CollectTime >= toDate('${startTime}')
|
|
AND CollectTime <= toDate('${endTime}')
|
|
`).toPromise() || []
|
|
const sensor = await clickHouse.alarmLocal.query(`SELECT distinct ID, SensorId,SensorLocationDescription FROM sensors WHERE ID in ${id}`).toPromise()
|
|
//监测项
|
|
let items = {}
|
|
if (factorsList && factorsList.length > 0) {
|
|
//因素解释
|
|
let factors = []
|
|
//因素名词
|
|
let factorNames = []
|
|
factorsList.map(item => {
|
|
factors = item.ItemNames.split(',')
|
|
factorNames = item.Items.split(',')
|
|
factors.map(child => {
|
|
factorNames.map(p => {
|
|
items[p] = { name: child, unit: item.ItemUnits }
|
|
})
|
|
})
|
|
})
|
|
}
|
|
//设备数据+数据
|
|
let sensors = []
|
|
let data=[]
|
|
if(sensor&&monitorData&&sensor.length && monitorData.length){
|
|
sensor.map(item=>{
|
|
const filterData=monitorData.filter(p=>p.SensorId==item.ID)
|
|
filterData.map(data=>{
|
|
const values = {}
|
|
Object.keys(items).forEach(key => {
|
|
const index = Object.keys(items).indexOf(key)
|
|
values[key] = data.Values[index]
|
|
})
|
|
sensors.push({ values, time: moment(data.CollectTime).format('YYYY-MM-DD HH:mm:ss') })
|
|
})
|
|
data.push({id:item.ID,name:item.SensorLocationDescription,data:sensors})
|
|
})
|
|
}
|
|
ctx.body = { items, sensors: data }
|
|
ctx.status = 200
|
|
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: error`);
|
|
ctx.status = 400;
|
|
ctx.body = {
|
|
message: typeof error == 'string' ? error : undefined
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
getStructures, getFactors, getSensors, getMonitorData
|
|
}
|