亚控KingFusion工业库查询数据处理
//时间分段
function dtArr(DT) {
let st = (new Date(DT[0])).getTime(),
et = (new Date(DT[1])).getTime();
let re = [];
let i = 0;
while (st + i * DT[2] < et) {
re.push(st + i * DT[2]);
// re.push($Function.dateFormat('YYYY-mm-dd HH:MM:SS', new Date(st + i * DT[2])));
i++;
}
re.push(et);
// re.push($Function.dateFormat('YYYY-mm-dd HH:MM:SS', new Date(et)));
console.log('时间分段:', re);
return re;
}
// 分段查询
// ghdkSubsection
var ghdkSubsection = function() {
let DT = $Function.DateTimeCalculation('', "CD");
DT.push(3600000 * 24); //查询时间间隔ms
let par = {
dataSourceName: 'KH',
tagNames: ['SSYJN_COD1', 'SSYJN_COD2', 'SSYJN_NH3', 'SSYJN_SumP', 'SSYJN_SumN', 'SSYJN_PH'],
startTime: DT[0],
endTime: DT[1],
queryType: 1,
samplingInterval: DT[2],
};
GetHistoryDatasKH351(
par.dataSourceName,
par.tagNames,
par.startTime,
par.endTime,
par.queryType,
function(data) {
// optionRadar(dataStatistics(data, DT));
console.log('分组结果:', dataStatistics(data, DT));
},
par.samplingInterval
);
};
//数据统计
//返回查询结果集的最大值、最小值、平均值
var dataStatistics = function(data, DT) {
console.log('data:', data);
let spitTime = dtArr(DT);
let ret = {};
let tagCount = data.Body.length;
for (let i = 0; i < tagCount; i++) {
let val = [];
let items = data.Body[i].records[4];
let itemsLen = items.length;
let flag = [];
for (let j = 0; j < itemsLen; j++) {
let tp = (new Date(items[j][2])).getTime();
let index;
for (let k = 1; k < spitTime.length; k++) {
if (tp < spitTime[k]) {
index = k - 1;
break;
}
}
if (items[j][1] === 'Good') {
if (flag[index] === undefined) {
val[index] = {
max: items[j][0],
min: items[j][0],
sum: items[j][0],
avg: items[j][0],
startTime: $Function.dateFormat('YYYY-mm-dd HH:MM:SS', new Date(spitTime[index])),
endTime: $Function.dateFormat('YYYY-mm-dd HH:MM:SS', new Date(spitTime[index + 1])),
count: 1
};
flag[index] = true;
} else {
val[index].max = val[index].max > items[j][0] ? val[index].max : items[j][0];
val[index].min = val[index].min < items[j][0] ? val[index].min : items[j][0];
val[index].sum += items[j][0];
val[index].count++;
val[index].avg = val[index].sum / val[index].count;
}
}
}
if (val.length > 0) {
ret[data.Body[i].records[0]] = val;
}
}
console.log('ret:', ret);
return ret;
};
ghdkSubsection();