zmc
2023-12-01 f4062e41dfbe26ca7664a963357cc0b9bea37b44
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import dayjs from 'dayjs'
export default  {
 
 
 
 
    /**
     * description:返回时间数组,间隔15分钟。
     * @param: 异常的开始,异常结束时间
     * @createTime:2023-08-17
     * @returns:比如12:00:00-13:00:00 所以返回的数组元素是 12:00:00 ,12:15:00,12:30:00,12:45:00,13:00:00
     */
    descFiftyTime(begin, end) {
        let time = [];
        if (begin == end) {
          time.push(begin);
          return time;
        }
        time.push(begin);
        let temp = dayjs(begin).add(15, 'minute').format('YYYY-MM-DD HH:mm:ss');
        while (temp >= end) {
          time.push(temp);
          temp = dayjs(temp).add(15, 'minute').format('YYYY-MM-DD HH:mm:ss');
        }
        // 加上异常的结束时间
        time.push(temp);
        return time;
      },
 
      /**
     * description:返回开始时间的前45分钟的时间点,结束时间后45分钟的时间点
     * @param: 异常的开始时间,异常的结束时间。
     * @returns:数组。time[0],time[1],time[2],time[3]分别代表异常区间前45分钟的时间点,前15分钟的时间点,后15分钟的时间点,后45分钟的时间点
     */
    before45AndAfter45(begin, end) {
        let time = [];
        // 前一段的开始时间
        const before45MinBegin = dayjs(begin)
          .subtract(45, 'minute')
          .format('YYYY-MM-DD HH:mm:ss');
        // 前一段的结束时间
        const before15MinBegin = dayjs(begin)
          .subtract(15, 'minute')
          .format('YYYY-MM-DD HH:mm:ss');
  
        // 后一段的开始时间
        const after15MinBegin = dayjs(end)
          .add(15, 'minute')
          .format('YYYY-MM-DD HH:mm:ss');
        // 往后40分钟
        const after45MinEnd = dayjs(end)
          .add(45, 'minute')
          .format('YYYY-MM-DD HH:mm:ss');
        time.push(before45MinBegin);
        time.push(before15MinBegin);
        time.push(after15MinBegin);
        time.push(after45MinEnd);
        return time;
      },
 
       /**
     * description:返回某站点在该时段历史数据的get请求参数
     * @param: 站点名称, 开始时间, 结束时间
     * @returns:对象
     */
    requestGetParms(name, begin, end) {
        return {
          siteName: name,
          beginTime: begin,
          endTime: end
        };
      },
      /**
     * description:相差多少个15分钟  计算中包括开始时间,结束时间。
     * @param: 异常开始时间,异常结束时间
     * @returns:整数
     */
    diffFiftyMinutesNum(beginNormal, endNormal) {
        // 将开始时间和结束时间转换为dayjs对象
        const start = dayjs(beginNormal).subtract(15, 'minute');
        const end = dayjs(endNormal);
  
        // 计算结束时间减去开始时间中间相差多少个十分钟
        const diffInMinutes = end.diff(start, 'minute');
        const diffInTenMinutes = Math.floor(diffInMinutes / 15);
        return diffInTenMinutes;
      },
       /**
     * description:判断data中是否有该日期时间,存在返回该时间对应的浓度值,否则返回-1
     * @param: 加上前后区间的异常数据,时间字符串
     * @returns:
     */
    findTimeInExceptionData(data, time) {
        for (let i = 0; i < data.length; i++) {
          if (data[i] == null) {
            continue;
          }
          if (data[i]['lst'] == time) {
            return data[i]['dustValue'];
          }
        }
        return -1;
      },
      /**
     * description:根据开始和结束时间,返回以15分钟为间隔的时间和对应的值
     * @param: 前区间的开始时间, 后区间的结束时间, 加上前后区间的总时间段的异常数据的对象数组
     * @returns:对象。包含了折线图的x轴,y轴的配置数据
     */
    keepContinuousByEachFiftyMinutes(
        intervalStarTime,
        intervalEndTime,
        headAndTailExceptionData
      ) {
        let xAxis = [];
        let yAxis = [];
        let obj = {};
        let current = intervalStarTime;
        let tail = dayjs(intervalEndTime)
          .add(15, 'minute')
          .format('YYYY-MM-DD HH:mm:ss');
        while (current != tail) {
          let value = this.findTimeInExceptionData(
            headAndTailExceptionData,
            current
          );
          if (value != -1) {
            xAxis.push(current);
            yAxis.push(value);
          } else {
            xAxis.push(current);
            yAxis.push(null);
          }
          current = dayjs(current)
            .add(15, 'minute')
            .format('YYYY-MM-DD HH:mm:ss');
        }
        obj['xAxis'] = xAxis;
        obj['yAxis'] = yAxis;
        return obj;
      },
 
}