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

feat: 增加新的轮询函数

parent 5b719b02
......@@ -24,7 +24,9 @@ var currentBoardNode = {} //树选中的节点
var Controls = {}
var Common = {}
var time = 5000
let requestDataPool = [] // 各个组件实时刷新的请求数据,放到一个集合里,原来的多个组件请求合并成一个请求发送
let dataPoolRequestingFlag = false // requestDataPool请求中标志,正在请求时不进行下一波轮询,前一波请求完成才执行下一波
// 添加定时器
var timer1 = null
......@@ -854,7 +856,7 @@ function setTimer() {
if (item.ControlType === 'staticimage' || item.ControlType === 'image') {
renderImage(index)
}
if (item.ControlType === 'datatextblock') {
if (item.ControlType === 'datatextblock' && S == 1) {
renderDataText(index)
}
if (item.ControlType === 'dynamictext') {
......@@ -912,29 +914,48 @@ function setTimer() {
// 轮询数据,用新逻辑,合并各组件的请求数据,做合并请求,例如,300个组件,分成6个请求,每个请求包含50个组件的数据
function refreshDataLoop() {
console.log('Controls', Controls);
let requestDataList = handleControlListInArray()
console.log(9999, requestDataList);
if(requestDataList.length) {
request.post(`/bi/${appId}/variables/real-time/data/mergeReq`, requestDataList).then(res => {
console.log('res123', res);
})
requestDataPool = handleControlListInArray()
let dataPoolList = sliceRequestDataPool(10)
timer1 = setInterval(async ()=> {
if(dataPoolRequestingFlag) {
return
}
// 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) {
let dataPool = []
// 整合所有组件的请求数据,放到一个数组里
function handleControlListInArray() {
let resList = []
Controls.ControlList.forEach((item, index) => {
switch(item.ControlType) {
case 'datatextblock': // 数值显示
case 'rwtextbox': // 读写框
dataPool.push({
resList.push({
urlType: 'status',
assemblyKey: `${index}`,
assemblyKey: `${index}-${item.CheckData.name}`,
statusDataDTO: {
deviceId: item.CheckData.equipmentId ? item.CheckData.equipmentId : item.CheckData.equipmentid,
variableId: item.CheckData.id,
......@@ -948,9 +969,9 @@ function handleControlListInArray(sliceNum) {
case 'ellipselamp': // 圆形状态灯
item.DataList.forEach((dlItem, dlIndex) => {
if(dlItem.variable !== '选择' && dlItem.CheckData) {
dataPool.push({
resList.push({
urlType: 'status',
assemblyKey: `${index}-${dlIndex}`,
assemblyKey: `${index}-${dlIndex}-${dlItem.CheckData.name}`,
statusDataDTO: {
deviceId: dlItem.CheckData.equipmentId ? dlItem.CheckData.equipmentId : dlItem.CheckData.equipmentid,
variableId: dlItem.CheckData.id,
......@@ -973,9 +994,9 @@ function handleControlListInArray(sliceNum) {
variableCode: vc.name
}
})
dataPool.push({
resList.push({
urlType: 'pieChartOrPanel',
assemblyKey: `${index}`,
assemblyKey: `${index}-${item.Name}`,
pieChartOrPanel
})
}
......@@ -987,9 +1008,9 @@ function handleControlListInArray(sliceNum) {
if (dashItem.name === item.Name) {
if (dashItem.defaultDataConfig.datatype === '实时数据') {
let VariableCheckDataObj = dashItem.option?.Variable?.CheckData || {}
dataPool.push({
resList.push({
urlType: 'pieChartOrPanel',
assemblyKey: `${index}`,
assemblyKey: `${index}-${item.Name}`,
pieChartOrPanel: [{
deviceId: VariableCheckDataObj.equipmentId ? VariableCheckDataObj.equipmentId : VariableCheckDataObj.equipmentid,
variableId: VariableCheckDataObj.id,
......@@ -1001,36 +1022,25 @@ function handleControlListInArray(sliceNum) {
})
break
case 'linechart':
Controls.Data.LineChartItemList.forEach(pieItem => {
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
}
})
})
}
}
})
line_bar_handleRequestData('LineChartItemList')
break
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.defaultDataConfig.datatype === '实时数据') {
let list = pieItem.option?.Variables || []
list.forEach((variableItem, variableIndex) => {
let vc = variableItem.CheckData
dataPool.push({
resList.push({
urlType: 'limit',
assemblyKey: `${index}-${variableIndex}`,
assemblyKey: `${index}-${variableIndex}-${item.Name}`,
limitData: {
deviceId: vc.equipmentId ? vc.equipmentId : vc.equipmentid,
variableId: vc.id,
......@@ -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) {
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