Commit 56017eec authored by 莫坚培's avatar 莫坚培

feat: 增加变量值缓存

parent 3f349bc5
......@@ -32,6 +32,10 @@ let requestLoopWaitingTime = 1000 // 每一个请求的间隔时间,减轻服
let requestLoopGroupSliceNum = 30 // 请求池requestLoopDataPool分组,每组多少个
let requestLoopGroupSliceRes = [] // 分组结果
let requestLoopVaribleCache = {} // 每一批(一批多组)轮询的变量数据缓存。
// 背景是同一个变量,可能会在多个组都有请求,后面的请求拿到的结果可能跟前面拿到的结果不一致,导致明明同一个变量,但是显示不同的值
// 这里的处理是同一批次的请求,每个变量只取第一次的结果
// 添加定时器
var timer1 = null
var app = {
......@@ -938,6 +942,7 @@ function startRequestLoop() {
}
// 每一轮都把标记清除
requestLoopVaribleCache = {}
Object.values(Controls.dataPoolMap).forEach(item => {
item.isHasMeetVariable = false
})
......@@ -1072,6 +1077,15 @@ function loopRenderBarchart(poolData, resData, resCode) {
return i
})
// 取对应变量缓存过的值
let cacheKey = `${k.CheckData.equipmentId || k.CheckData.equipmentid}-${k.CheckData.id}`
if(requestLoopVaribleCache[cacheKey] === undefined) {
requestLoopVaribleCache[cacheKey] = dataList
} else {
console.log('柱状图缓存', requestLoopVaribleCache[cacheKey])
dataList = requestLoopVaribleCache[cacheKey]
}
let obj = {
name: variablesList[ki].DimensionName,
data: dataList,
......@@ -1160,6 +1174,15 @@ function loopRenderLinechart(poolData, resData, resCode) {
return item1
})
// 取对应变量缓存过的值
let cacheKey = `${k.CheckData.equipmentId || k.CheckData.equipmentid}-${k.CheckData.id}`
if(requestLoopVaribleCache[cacheKey] === undefined) {
requestLoopVaribleCache[cacheKey] = dataList
} else {
console.log('折线图缓存', requestLoopVaribleCache[cacheKey])
dataList = requestLoopVaribleCache[cacheKey]
}
serireData.push({
name: chartOption.legend[0].data[ki],
data: dataList,
......@@ -1192,6 +1215,33 @@ function loopRenderLinechart(poolData, resData, resCode) {
}
}
// 把折线图、柱状图的请求数据推到请求池
function handleRequestDataLineAndBar(label, item, index) {
let lineAndBarItem = Controls.Data[label].find(dItem => dItem.name === item.Name)
if (lineAndBarItem && lineAndBarItem.defaultDataConfig.datatype === '实时数据') {
let list = lineAndBarItem.option?.Variables || []
requestLoopDataPool.push({
urlType: 'limit',
assemblyKey: `${index}-${item.Name}`,
limitData: {
limit: lineAndBarItem.DataCount,
variableSearchList: list.map(lItem => {
return {
deviceId: lItem.CheckData.equipmentId || lItem.CheckData.equipmentid,
variableId: lItem.CheckData.id,
variableName: lItem.CheckData.name
}
})
}
})
Controls.dataPoolMap[index] = lineAndBarItem
Controls.dataPoolMap[index].ControlType = item.ControlType
Controls.dataPoolMap[index].dataPoolMapIndex = index
}
}
// 渲染仪表盘
function loopRenderDashboardchart(poolData, resData, resCode) {
// 清空数据
......@@ -1215,6 +1265,15 @@ function loopRenderDashboardchart(poolData, resData, resCode) {
if (resValue) {
let value = resValue[variableInfo.CheckData.equipmentId || variableInfo.CheckData.equipmenid][variableInfo.CheckData.name]
// 取对应变量缓存过的值
let cacheKey = `${variableInfo.CheckData.equipmentId || variableInfo.CheckData.equipmentid}-${variableInfo.CheckData.id}`
if(requestLoopVaribleCache[cacheKey] === undefined) {
requestLoopVaribleCache[cacheKey] = value
} else {
console.log('仪表盘缓存', requestLoopVaribleCache[cacheKey])
value = requestLoopVaribleCache[cacheKey]
}
serireData.push({
value
})
......@@ -1227,6 +1286,28 @@ function loopRenderDashboardchart(poolData, resData, resCode) {
}
}
// 把仪表盘的请求数据推到请求池
function handleRequestDataDashboard(item, index) {
let dashboardItem = Controls.Data.DashBoardChartItemList.find(dItem => dItem.name === item.Name)
if (dashboardItem && dashboardItem.defaultDataConfig.datatype === '实时数据') {
let VariableCheckDataObj = dashboardItem.option?.Variable?.CheckData || {}
requestLoopDataPool.push({
urlType: 'pieChartOrPanel',
assemblyKey: `${index}-${item.Name}`,
pieChartOrPanel: [{
deviceId: VariableCheckDataObj.equipmentId || VariableCheckDataObj.equipmentid,
variableId: VariableCheckDataObj.id,
variableCode: VariableCheckDataObj.name
}]
})
Controls.dataPoolMap[index] = dashboardItem
Controls.dataPoolMap[index].ControlType = item.ControlType
Controls.dataPoolMap[index].dataPoolMapIndex = index
}
}
// 渲染饼图
function loopRenderPiechart(poolData, resData, resCode) {
// 清空数据
......@@ -1246,12 +1327,21 @@ function loopRenderPiechart(poolData, resData, resCode) {
}
let resValue = JSON.parse(resData[key])
if (resValue) {
let variablesList = poolData.option.Variables
variablesList.forEach((vItem, vIndex) => {
let value = resValue[vItem.CheckData.equipmentId || vItem.CheckData.equipmentid][vItem.CheckData.name]
value && (value = value.toFixed(vItem.d || 0))
// 取对应变量缓存过的值
let cacheKey = `${vItem.CheckData.equipmentId || vItem.CheckData.equipmentid}-${vItem.CheckData.id}`
if(requestLoopVaribleCache[cacheKey] === undefined) {
requestLoopVaribleCache[cacheKey] = value
} else {
console.log('饼图缓存', requestLoopVaribleCache[cacheKey])
value = requestLoopVaribleCache[cacheKey]
}
serireData.push({
value,
name: chartOption.legend[0].data[vIndex],
......@@ -1271,6 +1361,33 @@ function loopRenderPiechart(poolData, resData, resCode) {
}
}
// 把饼图的请求数据推到请求池
function handleRequestDataPie(item, index) {
let pieItem = Controls.Data.PieChartItemList.find(dItem => dItem.name === item.Name)
if (pieItem && pieItem.defaultDataConfig.datatype === '实时数据') {
let list = pieItem.option?.Variables || []
let pieChartOrPanel = list.map(variableItem => {
let vc = variableItem.CheckData
return {
deviceId: vc.equipmentId || vc.equipmentid,
variableId: vc.id,
variableCode: vc.name
}
})
requestLoopDataPool.push({
urlType: 'pieChartOrPanel',
assemblyKey: `${index}-${item.Name}`,
pieChartOrPanel
})
Controls.dataPoolMap[index] = pieItem
Controls.dataPoolMap[index].ControlType = item.ControlType
Controls.dataPoolMap[index].dataPoolMapIndex = index
}
}
// 渲染动态图片、动态文本
function loopRenderImage(poolData, resData, label) {
if(poolData.isHasMeetVariable) {
......@@ -1281,30 +1398,39 @@ function loopRenderImage(poolData, resData, label) {
image: 'presetText'
}
let flagItem = poolData.DataList.find((item, index) => {
let flagItem = null
poolData.DataList.forEach((dlItem, dlIndex) => {
// 拼装跟返回的数据一样的key,然后找到对应的数据
let key = `${poolData.dataPoolMapIndex}-${index}-${item.variable}`
let key = `${poolData.dataPoolMapIndex}-${dlIndex}-${dlItem.variable}`
if (!resData.hasOwnProperty(key) || Object.prototype.toString.call(JSON.parse(resData[key])) !== '[object Object]') {
return false
}
let itemResData = JSON.parse(resData[key])
let itemValue = itemResData[item.variable]
let flag = transFlag(item.flag)
let itemValue = itemResData && itemResData[dlItem.variable]
if(!itemResData) {
return false
// 取对应变量缓存过的值
let cacheKey = `${dlItem.CheckData.equipmentId || dlItem.CheckData.equipmentid}-${dlItem.CheckData.id}`
if(requestLoopVaribleCache[cacheKey] === undefined) {
requestLoopVaribleCache[cacheKey] = itemValue
} else {
itemValue = requestLoopVaribleCache[cacheKey]
}
return (
(flag === '=' && itemValue == item[labelMap[label]]) ||
(flag === '>=' && itemValue >= item[labelMap[label]]) ||
(flag === '<=' && itemValue <= item[labelMap[label]]) ||
(flag === '>' && itemValue > item[labelMap[label]]) ||
(flag === '<' && itemValue < item[labelMap[label]]) ||
(flag === '!=' && itemValue != item[labelMap[label]])
let flag = transFlag(dlItem.flag)
let isMeet = (
(flag === '=' && itemValue == dlItem[labelMap[label]]) ||
(flag === '>=' && itemValue >= dlItem[labelMap[label]]) ||
(flag === '<=' && itemValue <= dlItem[labelMap[label]]) ||
(flag === '>' && itemValue > dlItem[labelMap[label]]) ||
(flag === '<' && itemValue < dlItem[labelMap[label]]) ||
(flag === '!=' && itemValue != dlItem[labelMap[label]])
)
if(isMeet && !flagItem) {
flagItem = dlItem
}
})
if (!flagItem) {
......@@ -1318,6 +1444,7 @@ function loopRenderImage(poolData, resData, label) {
}
return
}
// 只要有一个满足条件,则渲染该条件
if (label === 'image') {
$(`#image-img${poolData.dataPoolMapIndex}`).attr('src', flagItem.img)
......@@ -1326,18 +1453,120 @@ function loopRenderImage(poolData, resData, label) {
$(`#dynamictext-text${poolData.dataPoolMapIndex}`).text(flagItem.presetText)
$(`#dynamictext-text${poolData.dataPoolMapIndex}`).css('color', flagItem.backColor)
}
poolData.isHasMeetVariable = true
}
}
// 渲染数值显示、读写框
function loopRenderDatatextblock(poolData, resData, label) {
// 渲染矩形、圆形状态灯 label: commonlamp矩形状态灯 ellipselamp圆形状态灯
function loopRenderLamp(poolData, resData, label) {
if(poolData.isHasMeetVariable) {
return
}
let flagItem = null
let isSameGroup = true
poolData.DataList.forEach((dlItem, dlIndex) => {
let key = `${poolData.dataPoolMapIndex}-${dlIndex}-${dlItem.variable}`
// 只要DataList中有一个变量没有在resData找到对应的key,则说明这个组件的请求数据不是在同一组的
if (!resData.hasOwnProperty(key) || Object.prototype.toString.call(JSON.parse(resData[key])) !== '[object Object]') {
isSameGroup = false
return
}
let itemResData = JSON.parse(resData[key])
let itemValue = itemResData && itemResData[dlItem.variable]
// 取对应变量缓存过的值
let cacheKey = `${dlItem.CheckData.equipmentId || dlItem.CheckData.equipmentid}-${dlItem.CheckData.id}`
if(requestLoopVaribleCache[cacheKey] === undefined) {
requestLoopVaribleCache[cacheKey] = itemValue
} else {
itemValue = requestLoopVaribleCache[cacheKey]
}
let flag = transFlag(dlItem.flag)
let isMeet = (
(flag === '=' && itemValue == dlItem.num) ||
(flag === '>=' && itemValue >= dlItem.num) ||
(flag === '<=' && itemValue <= dlItem.num) ||
(flag === '>' && itemValue > dlItem.num) ||
(flag === '<' && itemValue < dlItem.num) ||
(flag === '!=' && itemValue != dlItem.num)
)
if(isMeet && !flagItem) {
flagItem = dlItem
}
})
if (!flagItem) {
// 给默认颜色、闪烁
$(`#${label}${poolData.dataPoolMapIndex}`).css('background-color', poolData.DefaultColor)
if (poolData.DefaultFlashing) { // 默认闪烁
$(`#${label}${poolData.dataPoolMapIndex}`).addClass('animated-flash')
} else {
$(`#${label}${poolData.dataPoolMapIndex}`).removeClass('animated-flash')
}
return
}
// 只要有一个满足条件,则渲染该条件的颜色
$(`#${label}${poolData.dataPoolMapIndex}`).css('background-color', flagItem.backColor)
if(flagItem.flashing) {
$(`#${label}${poolData.dataPoolMapIndex}`).addClass('animated-flash')
} else {
$(`#${label}${poolData.dataPoolMapIndex}`).removeClass('animated-flash')
}
poolData.isHasMeetVariable = true
}
// 把有DataList的组件的请求数据推到请求池
function handleRequestDataDataList(item, index) {
Controls.dataPoolMap[index] = item
Controls.dataPoolMap[index].dataPoolMapIndex = index
item.DataList.forEach((dlItem, dlIndex) => {
if (dlItem.variable !== '选择' && dlItem.CheckData) {
requestLoopDataPool.push({
urlType: 'status',
assemblyKey: `${index}-${dlIndex}-${dlItem.CheckData.name}`,
statusDataDTO: {
deviceId: dlItem.CheckData.equipmentId || dlItem.CheckData.equipmentid,
variableId: dlItem.CheckData.id,
variableCode: dlItem.CheckData.name
}
})
}
})
}
// 渲染数值显示、读写框
function loopRenderDatatextblock(poolData, resData, label) {
let dight = poolData.DecimalDigits === null ? 0 : poolData.DecimalDigits
let valueInfo = JSON.parse(resData[Object.keys(resData)[0]])
let resDataValue = valueInfo[poolData.CheckData.name]
// 取对应变量缓存过的值
let cacheKey = `${poolData.CheckData.equipmentId || poolData.CheckData.equipmentid}-${poolData.CheckData.id}`
if(requestLoopVaribleCache[cacheKey] === undefined) {
requestLoopVaribleCache[cacheKey] = resDataValue
} else {
resDataValue = requestLoopVaribleCache[cacheKey]
}
// 给读写框赋值、默认颜色
if (label === 'datatextblock') {
resDataValue = resDataValue.toFixed(Number(dight))
$(`#datatextblock${poolData.dataPoolMapIndex}`).text(resDataValue)
$(`#datatextblock${poolData.dataPoolMapIndex}`).css('color', '#000')
} else {
$(`#rwtextbox-text${poolData.dataPoolMapIndex}`).val(resDataValue)
$(`#rwtextbox-text${poolData.dataPoolMapIndex}`).css('color', '#000')
}
if(!['number', 'string'].includes(typeof resDataValue)) {
return
......@@ -1356,70 +1585,29 @@ function loopRenderDatatextblock(poolData, resData, label) {
})
if(!flagItem) {
// 给读写框赋值、默认颜色
if (label === 'datatextblock') {
resDataValue = resDataValue.toFixed(Number(dight))
$(`#datatextblock${poolData.dataPoolMapIndex}`).text(resDataValue)
$(`#datatextblock${poolData.dataPoolMapIndex}`).css('color', '#000')
} else {
$(`#rwtextbox-text${poolData.dataPoolMapIndex}`).val(resDataValue)
$(`#rwtextbox-text${poolData.dataPoolMapIndex}`).css('color', '#000')
}
return
}
// 只要有一个满足条件,则渲染该条件的颜色
if (flagItem && poolData.conCheck) {
$(`#${label === 'datatextblock' ? 'datatextblock' : 'rwtextbox-text'}${poolData.dataPoolMapIndex}`).css('color', flagItem.backColor)
poolData.isHasMeetVariable = true
}
}
// 渲染矩形、圆形状态灯 label: commonlamp矩形状态灯 ellipselamp圆形状态灯
function loopRenderLamp(poolData, resData, label) {
if(poolData.isHasMeetVariable) {
return
}
let flagItem = poolData.DataList.find((item, index) => {
let key = `${poolData.dataPoolMapIndex}-${index}-${item.variable}`
if (!resData.hasOwnProperty(key) || Object.prototype.toString.call(JSON.parse(resData[key])) !== '[object Object]') {
return false
// 把有读写框、数值显示的请求数据推到请求池
function handleRequestDataText(item, index) {
requestLoopDataPool.push({
urlType: 'status',
assemblyKey: `${index}-${item.CheckData.name}`,
statusDataDTO: {
deviceId: item.CheckData.equipmentId || item.CheckData.equipmentid,
variableId: item.CheckData.id,
variableCode: item.CheckData.name
}
let itemResData = JSON.parse(resData[key])
let itemValue = itemResData[item.variable]
let flag = transFlag(item.flag)
return (
(flag === '=' && itemValue == item.num) ||
(flag === '>=' && itemValue >= item.num) ||
(flag === '<=' && itemValue <= item.num) ||
(flag === '>' && itemValue > item.num) ||
(flag === '<' && itemValue < item.num) ||
(flag === '!=' && itemValue != item.num)
)
})
if (!flagItem) {
// 给默认颜色、闪烁
$(`#${label}${poolData.dataPoolMapIndex}`).css('background-color', poolData.DefaultColor)
if (poolData.DefaultFlashing) { // 默认闪烁
$(`#${label}${poolData.dataPoolMapIndex}`).addClass('animated-flash')
} else {
$(`#${label}${poolData.dataPoolMapIndex}`).removeClass('animated-flash')
}
return
}
// 只要有一个满足条件,则渲染该条件的颜色
$(`#${label}${poolData.dataPoolMapIndex}`).css('background-color', flagItem.backColor)
if(flagItem.flashing) {
$(`#${label}${poolData.dataPoolMapIndex}`).addClass('animated-flash')
} else {
$(`#${label}${poolData.dataPoolMapIndex}`).removeClass('animated-flash')
}
poolData.isHasMeetVariable = true
Controls.dataPoolMap[index] = item
Controls.dataPoolMap[index].dataPoolMapIndex = index
}
// 整合所有组件的请求数据,放到一个数组里
......@@ -1453,120 +1641,6 @@ function collectRequestLoopData() {
})
}
// 把有读写框、数值显示的请求数据推到请求池
function handleRequestDataText(item, index) {
requestLoopDataPool.push({
urlType: 'status',
assemblyKey: `${index}-${item.CheckData.name}`,
statusDataDTO: {
deviceId: item.CheckData.equipmentId ? item.CheckData.equipmentId : item.CheckData.equipmentid,
variableId: item.CheckData.id,
variableCode: item.CheckData.name
}
})
Controls.dataPoolMap[index] = item
Controls.dataPoolMap[index].dataPoolMapIndex = index
}
// 把有DataList的组件的请求数据推到请求池
function handleRequestDataDataList(item, index) {
Controls.dataPoolMap[index] = item
Controls.dataPoolMap[index].dataPoolMapIndex = index
item.DataList.forEach((dlItem, dlIndex) => {
if (dlItem.variable !== '选择' && dlItem.CheckData) {
requestLoopDataPool.push({
urlType: 'status',
assemblyKey: `${index}-${dlIndex}-${dlItem.CheckData.name}`,
statusDataDTO: {
deviceId: dlItem.CheckData.equipmentId ? dlItem.CheckData.equipmentId : dlItem.CheckData.equipmentid,
variableId: dlItem.CheckData.id,
variableCode: dlItem.CheckData.name
}
})
}
})
}
// 把饼图的请求数据推到请求池
function handleRequestDataPie(item, index) {
let pieItem = Controls.Data.PieChartItemList.find(dItem => dItem.name === item.Name)
if (pieItem && pieItem.defaultDataConfig.datatype === '实时数据') {
let list = pieItem.option?.Variables || []
let pieChartOrPanel = list.map(variableItem => {
let vc = variableItem.CheckData
return {
deviceId: vc.equipmentId ? vc.equipmentId : vc.equipmentid,
variableId: vc.id,
variableCode: vc.name
}
})
requestLoopDataPool.push({
urlType: 'pieChartOrPanel',
assemblyKey: `${index}-${item.Name}`,
pieChartOrPanel
})
Controls.dataPoolMap[index] = pieItem
Controls.dataPoolMap[index].ControlType = item.ControlType
Controls.dataPoolMap[index].dataPoolMapIndex = index
}
}
// 把仪表盘的请求数据推到请求池
function handleRequestDataDashboard(item, index) {
let dashboardItem = Controls.Data.DashBoardChartItemList.find(dItem => dItem.name === item.Name)
if (dashboardItem && dashboardItem.defaultDataConfig.datatype === '实时数据') {
let VariableCheckDataObj = dashboardItem.option?.Variable?.CheckData || {}
requestLoopDataPool.push({
urlType: 'pieChartOrPanel',
assemblyKey: `${index}-${item.Name}`,
pieChartOrPanel: [{
deviceId: VariableCheckDataObj.equipmentId ? VariableCheckDataObj.equipmentId : VariableCheckDataObj.equipmentid,
variableId: VariableCheckDataObj.id,
variableCode: VariableCheckDataObj.name
}]
})
Controls.dataPoolMap[index] = dashboardItem
Controls.dataPoolMap[index].ControlType = item.ControlType
Controls.dataPoolMap[index].dataPoolMapIndex = index
}
}
// 把折线图、柱状图的请求数据推到请求池
function handleRequestDataLineAndBar(label, item, index) {
let lineAndBarItem = Controls.Data[label].find(dItem => dItem.name === item.Name)
if (lineAndBarItem && lineAndBarItem.defaultDataConfig.datatype === '实时数据') {
let list = lineAndBarItem.option?.Variables || []
requestLoopDataPool.push({
urlType: 'limit',
assemblyKey: `${index}-${item.Name}`,
limitData: {
limit: lineAndBarItem.DataCount,
variableSearchList: list.map(lItem => {
return {
deviceId: lItem.CheckData.equipmentId ? lItem.CheckData.equipmentId : lItem.CheckData.equipmentid,
variableId: lItem.CheckData.id,
variableName: lItem.CheckData.name
}
})
}
})
Controls.dataPoolMap[index] = lineAndBarItem
Controls.dataPoolMap[index].ControlType = item.ControlType
Controls.dataPoolMap[index].dataPoolMapIndex = index
}
}
// 对requestLoopDataPool进行分组
function sliceRequestLoopData(num) {
requestLoopGroupSliceRes = []
......
......@@ -3,7 +3,7 @@
* @description: 文件描述
* @Date: 2021-09-16 18:33:55
* @LastEditors: 莫靓仔
* @LastEditTime: 2021-09-28 10:24:42
* @LastEditTime: 2021-09-28 14:57:07
*/
let setObj = {
// 厂家大佬
......
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