From feee2904e18c1a4ecee6f7026bb0aced698ec11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?zhaobing=E2=80=99?= Date: Wed, 15 Nov 2023 10:55:39 +0800 Subject: [PATCH] feat:fix bugs --- api/app/lib/controllers/monitor/index.js | 147 +++++++++--------- .../sections/data/containers/dataDetail.jsx | 10 +- .../data/containers/dataTableComponent.jsx | 55 ++++--- 3 files changed, 108 insertions(+), 104 deletions(-) diff --git a/api/app/lib/controllers/monitor/index.js b/api/app/lib/controllers/monitor/index.js index 07be032..2959d96 100644 --- a/api/app/lib/controllers/monitor/index.js +++ b/api/app/lib/controllers/monitor/index.js @@ -1,17 +1,17 @@ const moment = require('moment'); -async function getStructures (ctx) { +async function getStructures(ctx) { try { const { models } = ctx.fs.dc; const { clickHouse } = ctx.app.fs const { pomsProjectId } = ctx.query - let bindRes=[] + let bindRes = [] //选择全局就是查询所有项目下的结构物,有选择项目就只查询对应项目的结构物 - if(pomsProjectId){ - bindRes = await models.ProjectCorrelation.findAll({where:{id:{ $in: pomsProjectId.split(',') }}}) - }else{ - bindRes = await models.ProjectCorrelation.findAll() + 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) { @@ -21,7 +21,7 @@ async function getStructures (ctx) { } } } - let undelStrucRes=[] + let undelStrucRes = [] if (bindRes) { undelStrucRes = anxinProjectIds.size ? await clickHouse.anxinyun.query( @@ -51,7 +51,7 @@ async function getStructures (ctx) { 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 @@ -62,8 +62,8 @@ async function getStructures (ctx) { ).toPromise() : [] } - // undelStrucRes.push({strucId:4036,strucName:'象山港大桥'}) - // undelStrucRes.push({strucId:1,strucName:'象山港大'}) + // undelStrucRes.push({ strucId: 4036, strucName: '象山港大桥' }) + // undelStrucRes.push({ strucId: 1, strucName: '象山港大' }) ctx.status = 200; ctx.body = undelStrucRes } catch (error) { @@ -75,22 +75,22 @@ async function getStructures (ctx) { } } -async function getFactors (ctx) { +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() + 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.body = list + ctx.status = 200 + } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: error`); ctx.status = 400; ctx.body = { @@ -99,18 +99,18 @@ async function getFactors (ctx) { } } //查询设备 -async function getSensors (ctx) { +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(` + 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.body = list + ctx.status = 200 + } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: error`); ctx.status = 400; ctx.body = { @@ -119,61 +119,62 @@ async function getSensors (ctx) { } } //根据设备id和监测因素id查询监测数据 -async function getMonitorData (ctx) { - try{ +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 + 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 id=sensorId&&sensorId.replace('-',':') - const monitorData=await clickHouse.alarmLocal.query(`SELECT SensorId,CollectTime,Values FROM themes - WHERE SensorId in ('${id}') + `).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}') - 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){ + `).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 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 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){ + 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 = { @@ -188,5 +189,5 @@ async function getMonitorData (ctx) { module.exports = { - getStructures,getFactors,getSensors,getMonitorData + getStructures, getFactors, getSensors, getMonitorData } \ No newline at end of file diff --git a/web/client/src/sections/data/containers/dataDetail.jsx b/web/client/src/sections/data/containers/dataDetail.jsx index 34a16e2..a64e2fc 100644 --- a/web/client/src/sections/data/containers/dataDetail.jsx +++ b/web/client/src/sections/data/containers/dataDetail.jsx @@ -30,17 +30,15 @@ const DataDetail = (props) => { const form = useRef() //初始化 useEffect(() => { - if(factorId&&project){ + // if(factorId&&project){ let query={ - factorId, + factorId:factorId?factorId:-1, sensorId:sensorId&&sensorId.length>0?sensorId.map(item=>`${project}-${item}`).join(','):[-11], startTime:moment(dateRange[0]).format('YYYY-MM-DD HH:mm:ss'), endTime:moment(dateRange[1]).format('YYYY-MM-DD HH:mm:ss'), - limit:queryPage.limit, - page:queryPage.page } queryData(query) - } + // } // dispatch(sectionData.getContinuityType()) // form.current.setValue('createTimes',[moment().subtract(24, 'hours').format('YYYY-MM-DD HH:mm:ss'), moment().format('YYYY-MM-DD HH:mm:ss')]) @@ -165,8 +163,6 @@ const DataDetail = (props) => { sensorId:sensorId&&sensorId.length>0?sensorId.map(item=>`${project}-${item}`).join(','):[-11], startTime:moment(rs.createTimes[0]).format('YYYY-MM-DD HH:mm:ss'), endTime:moment(rs.createTimes[1]).format('YYYY-MM-DD HH:mm:ss'), - limit:queryPage.limit, - page:queryPage.page } queryData(query) }) diff --git a/web/client/src/sections/data/containers/dataTableComponent.jsx b/web/client/src/sections/data/containers/dataTableComponent.jsx index 25cd0df..7707b06 100644 --- a/web/client/src/sections/data/containers/dataTableComponent.jsx +++ b/web/client/src/sections/data/containers/dataTableComponent.jsx @@ -16,9 +16,12 @@ const DataTableComponent = (props) => { const [isRequesting, setIsRequesting] = useState(false); const [arr,setArr]=useState(dataList.items) const [data,setData]=useState([]) + // const [list,setList]=useState(dataList.sensors) const [columns,setColumns]=useState([]) //初始化 - + useEffect(()=>{ + setArr(dataList.items) + },[dataList]) useEffect(()=>{ // let arr=[{readingNumber:{name: '电表示数', unit: 'kWh'}}] @@ -45,35 +48,40 @@ const DataTableComponent = (props) => { }); //设备 const data1=[] - for (let i = 0; i < dataList.length; i++) { - for (let k = 0; k < dataList[i].data.length; k++) { - let cdataT={} - let startT = ""; - let endT = ""; - let dataTS = dataList[i].data[k]; - cdataT.key = `station-${dataList[i].id}-${k}`; - cdataT.position = dataList[i].name; - cdataT.acqTime = moment(dataTS.time).format('YYYY-MM-DD HH:mm:ss'); - cdataT.realTime = moment(dataTS.time).valueOf(); - if (startT == "") { - startT = dataTS.time; - endT = dataTS.time; - } else { - if (moment(startT) >= moment(dataTS.time)) + if (JSON.stringify(dataList) != "{}") { + let themeItems = dataList.items + let themeStations = dataList.sensors + for (let i = 0; i < themeStations.length; i++) { + for (let k = 0; k < themeStations[i].data.length; k++) { + let cdataT={} + let startT = ""; + let endT = ""; + let dataTS = themeStations[i].data[k]; + cdataT.key = `station-${themeStations[i].id}-${k}`; + cdataT.position = themeStations[i].name; + cdataT.acqTime = moment(dataTS.time).format('YYYY-MM-DD HH:mm:ss'); + cdataT.realTime = moment(dataTS.time).valueOf(); + if (startT == "") { startT = dataTS.time; - if (moment(endT) <= moment(dataTS.time)) endT = dataTS.time; + } else { + if (moment(startT) >= moment(dataTS.time)) + startT = dataTS.time; + if (moment(endT) <= moment(dataTS.time)) + endT = dataTS.time; + } + //动态列的值 + for (let themeItem in arr) { + cdataT[themeItem] = dataTS.values[themeItem]; + } + data1.push(cdataT) } - //动态列的值 - for (let themeItem in arr) { - cdataT[themeItem] = dataTS.values[themeItem]; - } - data1.push(cdataT) } } + setData(data1) setColumns(columns) - },[]) + },[dataList]) @@ -106,7 +114,6 @@ const DataTableComponent = (props) => { - return (