1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
 * 异常数据相关逻辑代理
 */
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]]
    }
  }
}