Commit 83c64a2c authored by 莫坚培's avatar 莫坚培

feat: 增加新的轮询函数

parent 5b719b02
...@@ -24,7 +24,9 @@ var currentBoardNode = {} //树选中的节点 ...@@ -24,7 +24,9 @@ var currentBoardNode = {} //树选中的节点
var Controls = {} var Controls = {}
var Common = {} var Common = {}
var time = 5000 var time = 5000
let requestDataPool = [] // 各个组件实时刷新的请求数据,放到一个集合里,原来的多个组件请求合并成一个请求发送 let requestDataPool = [] // 各个组件实时刷新的请求数据,放到一个集合里,原来的多个组件请求合并成一个请求发送
let dataPoolRequestingFlag = false // requestDataPool请求中标志,正在请求时不进行下一波轮询,前一波请求完成才执行下一波
// 添加定时器 // 添加定时器
var timer1 = null var timer1 = null
...@@ -854,7 +856,7 @@ function setTimer() { ...@@ -854,7 +856,7 @@ function setTimer() {
if (item.ControlType === 'staticimage' || item.ControlType === 'image') { if (item.ControlType === 'staticimage' || item.ControlType === 'image') {
renderImage(index) renderImage(index)
} }
if (item.ControlType === 'datatextblock') { if (item.ControlType === 'datatextblock' && S == 1) {
renderDataText(index) renderDataText(index)
} }
if (item.ControlType === 'dynamictext') { if (item.ControlType === 'dynamictext') {
...@@ -912,29 +914,48 @@ function setTimer() { ...@@ -912,29 +914,48 @@ function setTimer() {
// 轮询数据,用新逻辑,合并各组件的请求数据,做合并请求,例如,300个组件,分成6个请求,每个请求包含50个组件的数据 // 轮询数据,用新逻辑,合并各组件的请求数据,做合并请求,例如,300个组件,分成6个请求,每个请求包含50个组件的数据
function refreshDataLoop() { function refreshDataLoop() {
console.log('Controls', Controls); requestDataPool = handleControlListInArray()
let requestDataList = handleControlListInArray() let dataPoolList = sliceRequestDataPool(10)
console.log(9999, requestDataList); timer1 = setInterval(async ()=> {
if(requestDataList.length) { if(dataPoolRequestingFlag) {
request.post(`/bi/${appId}/variables/real-time/data/mergeReq`, requestDataList).then(res => { return
console.log('res123', res);
})
} }
// timer1 = setInterval(()=> { for (let i = 0, len = dataPoolList.length; i < len; i++) {
dataPoolRequestingFlag = true // 进入循环即表示已经开始请求
await sendDataPoolRequest(dataPoolList[i], i, len)
}
}, time)
}
// }, time) // 发起requestDataPool的合并请求
function sendDataPoolRequest(list, i, len) {
return new Promise((resolve, reject) => {
request.post(`/bi/${appId}/variables/real-time/data/mergeReq`, list)
.then(res => {
if(i === len -1) {
dataPoolRequestingFlag = false
}
resolve(res)
})
.catch(err => {
if(i === len -1) {
dataPoolRequestingFlag = false
}
reject(err)
})
})
} }
// 对组件的请求数据分组 // 整合所有组件的请求数据,放到一个数组里
function handleControlListInArray(sliceNum) { function handleControlListInArray() {
let dataPool = [] let resList = []
Controls.ControlList.forEach((item, index) => { Controls.ControlList.forEach((item, index) => {
switch(item.ControlType) { switch(item.ControlType) {
case 'datatextblock': // 数值显示 case 'datatextblock': // 数值显示
case 'rwtextbox': // 读写框 case 'rwtextbox': // 读写框
dataPool.push({ resList.push({
urlType: 'status', urlType: 'status',
assemblyKey: `${index}`, assemblyKey: `${index}-${item.CheckData.name}`,
statusDataDTO: { statusDataDTO: {
deviceId: item.CheckData.equipmentId ? item.CheckData.equipmentId : item.CheckData.equipmentid, deviceId: item.CheckData.equipmentId ? item.CheckData.equipmentId : item.CheckData.equipmentid,
variableId: item.CheckData.id, variableId: item.CheckData.id,
...@@ -948,9 +969,9 @@ function handleControlListInArray(sliceNum) { ...@@ -948,9 +969,9 @@ function handleControlListInArray(sliceNum) {
case 'ellipselamp': // 圆形状态灯 case 'ellipselamp': // 圆形状态灯
item.DataList.forEach((dlItem, dlIndex) => { item.DataList.forEach((dlItem, dlIndex) => {
if(dlItem.variable !== '选择' && dlItem.CheckData) { if(dlItem.variable !== '选择' && dlItem.CheckData) {
dataPool.push({ resList.push({
urlType: 'status', urlType: 'status',
assemblyKey: `${index}-${dlIndex}`, assemblyKey: `${index}-${dlIndex}-${dlItem.CheckData.name}`,
statusDataDTO: { statusDataDTO: {
deviceId: dlItem.CheckData.equipmentId ? dlItem.CheckData.equipmentId : dlItem.CheckData.equipmentid, deviceId: dlItem.CheckData.equipmentId ? dlItem.CheckData.equipmentId : dlItem.CheckData.equipmentid,
variableId: dlItem.CheckData.id, variableId: dlItem.CheckData.id,
...@@ -973,9 +994,9 @@ function handleControlListInArray(sliceNum) { ...@@ -973,9 +994,9 @@ function handleControlListInArray(sliceNum) {
variableCode: vc.name variableCode: vc.name
} }
}) })
dataPool.push({ resList.push({
urlType: 'pieChartOrPanel', urlType: 'pieChartOrPanel',
assemblyKey: `${index}`, assemblyKey: `${index}-${item.Name}`,
pieChartOrPanel pieChartOrPanel
}) })
} }
...@@ -987,9 +1008,9 @@ function handleControlListInArray(sliceNum) { ...@@ -987,9 +1008,9 @@ function handleControlListInArray(sliceNum) {
if (dashItem.name === item.Name) { if (dashItem.name === item.Name) {
if (dashItem.defaultDataConfig.datatype === '实时数据') { if (dashItem.defaultDataConfig.datatype === '实时数据') {
let VariableCheckDataObj = dashItem.option?.Variable?.CheckData || {} let VariableCheckDataObj = dashItem.option?.Variable?.CheckData || {}
dataPool.push({ resList.push({
urlType: 'pieChartOrPanel', urlType: 'pieChartOrPanel',
assemblyKey: `${index}`, assemblyKey: `${index}-${item.Name}`,
pieChartOrPanel: [{ pieChartOrPanel: [{
deviceId: VariableCheckDataObj.equipmentId ? VariableCheckDataObj.equipmentId : VariableCheckDataObj.equipmentid, deviceId: VariableCheckDataObj.equipmentId ? VariableCheckDataObj.equipmentId : VariableCheckDataObj.equipmentid,
variableId: VariableCheckDataObj.id, variableId: VariableCheckDataObj.id,
...@@ -1001,36 +1022,25 @@ function handleControlListInArray(sliceNum) { ...@@ -1001,36 +1022,25 @@ function handleControlListInArray(sliceNum) {
}) })
break break
case 'linechart': case 'linechart':
Controls.Data.LineChartItemList.forEach(pieItem => { line_bar_handleRequestData('LineChartItemList')
if (pieItem.name === item.Name) {
if (pieItem.defaultDataConfig.datatype === '实时数据') {
let list = pieItem.option?.Variables || []
list.forEach((variableItem, variableIndex) => {
let vc = variableItem.CheckData
dataPool.push({
urlType: 'limit',
assemblyKey: `${index}-${variableIndex}`,
limitData: {
deviceId: vc.equipmentId ? vc.equipmentId : vc.equipmentid,
variableId: vc.id,
variableCode: vc.name
}
})
})
}
}
})
break break
case 'barchart': case 'barchart':
Controls.Data.BarChartItemList.forEach(pieItem => { line_bar_handleRequestData('BarChartItemList')
break
default:
break
}
// 把折线图、柱状图的请求数据推到请求池
function line_bar_handleRequestData(label) {
Controls.Data[label].forEach(pieItem => {
if (pieItem.name === item.Name) { if (pieItem.name === item.Name) {
if (pieItem.defaultDataConfig.datatype === '实时数据') { if (pieItem.defaultDataConfig.datatype === '实时数据') {
let list = pieItem.option?.Variables || [] let list = pieItem.option?.Variables || []
list.forEach((variableItem, variableIndex) => { list.forEach((variableItem, variableIndex) => {
let vc = variableItem.CheckData let vc = variableItem.CheckData
dataPool.push({ resList.push({
urlType: 'limit', urlType: 'limit',
assemblyKey: `${index}-${variableIndex}`, assemblyKey: `${index}-${variableIndex}-${item.Name}`,
limitData: { limitData: {
deviceId: vc.equipmentId ? vc.equipmentId : vc.equipmentid, deviceId: vc.equipmentId ? vc.equipmentId : vc.equipmentid,
variableId: vc.id, variableId: vc.id,
...@@ -1041,12 +1051,22 @@ function handleControlListInArray(sliceNum) { ...@@ -1041,12 +1051,22 @@ function handleControlListInArray(sliceNum) {
} }
} }
}) })
break
} }
}) })
return dataPool return resList
} }
// 对requestDataPool进行分组
function sliceRequestDataPool(num) {
let list = []
let groupNum = Math.ceil(requestDataPool.length / num)
for (let i = 0; i < groupNum; i++) {
list.push(requestDataPool.slice(i * num, (i + 1) * num))
}
return list
}
// 点击触发刷新功能 // 点击触发刷新功能
function manualTrigger(item, type) { function manualTrigger(item, type) {
if (!type) { if (!type) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment