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,limit,page } = ctx.query const offset=page*limit const factorsList=await clickHouse.alarmLocal.query(`SELECT FactorID,Items,ItemNames,ItemUnits FROM factors WHERE FactorID=${factorId} `).toPromise()||[] const id=sensorId&&sensorId.replace('-',':') const monitorData=await clickHouse.alarmLocal.query(`SELECT SensorId,CollectTime,Values FROM themes WHERE SensorId in ('${id}') AND CollectTime >= toDate('${startTime}') AND CollectTime <= toDate('${endTime}') LIMIT ${limit} OFFSET ${offset} `).toPromise()||[] console.log('vmonitorDatamonitorDatamonitorData',monitorData) const sensor=await clickHouse.alarmLocal.query(`SELECT distinct SensorId,SensorLocationDescription FROM sensors WHERE ID='${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=[] if(monitorData&&monitorData.length>0){ monitorData.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') }); }); } if(sensor&&sensor.length){ ctx.body={items,sensors:[{data:sensors,id:sensor[0].SensorId,name:sensor[0].SensorLocationDescription}]} ctx.status=200 }else{ ctx.body={items,sensors:[]} 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 }