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.
		
		
		
		
		
			
		
			
				
					
					
						
							192 lines
						
					
					
						
							7.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							192 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,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 | |
| } |