/**
|
* 异常数据相关逻辑代理
|
*/
|
import index from '@/utils/exception_common_function/index.js'
|
|
function findPeriod(dataList, exceptionCheck, specilOption) {
|
let start,
|
last = undefined
|
let isException = false
|
const res = []
|
dataList.forEach((e) => {
|
// 判断前后相邻两个数据的时间点是否超过15分钟
|
if (last && !isException) {
|
if (typeof specilOption === 'function' && specilOption(last, e)) {
|
res.push([last.lst, e.lst])
|
}
|
}
|
|
if (typeof exceptionCheck === 'function' && exceptionCheck(e)) {
|
if (!isException) {
|
start = e
|
isException = true
|
}
|
} else {
|
if (isException) {
|
res.push([start.lst, last.lst])
|
isException = false
|
}
|
}
|
|
last = e
|
})
|
return res
|
}
|
|
export default {
|
/**
|
* 获取数据的异常时段数组
|
* @param {*} beginTime
|
* @param {*} endTime
|
* @param {*} dataList
|
* @param {*} exceptionType
|
* @returns
|
*/
|
getExceptionArea(beginTime, endTime, dataList, exceptionType) {
|
if (dataList.length == 0) {
|
return []
|
}
|
const d1 = dataList[0].lst
|
const d2 = dataList[dataList.length - 1].lst
|
switch (exceptionType) {
|
// 有效率异常
|
case '8':
|
// 统计数据缺失时段和数据标识不为N的时段
|
return findPeriod(
|
dataList,
|
(data) => {
|
return data.flag != 'N'
|
},
|
(last, data) => {
|
return index.diffFiftyMinutesNum(last.lst, data.lst) > 1
|
}
|
)
|
//单日超标次数临界异常
|
case '6':
|
return findPeriod(dataList, (data) => {
|
return data.dustValue > 1
|
})
|
//数据超低
|
//超标
|
//数据长时段无波动
|
//量级突变
|
//临近超标异常
|
//变化趋势异常
|
case '1':
|
case '2':
|
case '3':
|
case '4':
|
case '5':
|
case '7':
|
return [[d1, d2]]
|
//数据缺失异常
|
case '0':
|
return [[beginTime, endTime]]
|
}
|
}
|
}
|