zmc
2023-11-23 cc890f987b770e5a73f5ef12d41b25f6bb448fcd
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
import dayjs from 'dayjs'
import { time } from 'echarts'
 
export default {
  // 获取该月份天数
  // 根据起始时间构建x轴
  // 根据天数遍历
  // 日期天数+1
  // 添加到x轴数组
  // 直到遍历的次数
  // 根据天数遍历
  // 对为空的的天数数据 进行补充 y轴数据为null
 
  /**
   * 根据传入的统计数据,起始时间,返回完整的x,y轴数据
   * @param: 统计数据,开始时间,结束时间
   * @returns:x,y轴数据
   */
  getLineChartXYData(analysisData, beginTime, endTime) {
    // x轴
    let xData = []
    // y轴的平均值
    let yAvg = []
    //  y轴的在线率
    let yOnline = []
    //  y轴的有效值
    let yValid = []
    //  y轴的超标率
    let yExceed = []
    // 保存x,y轴值
    let obj = {}
 
    // 开始日期为
    let dateBegin = dayjs(beginTime).subtract(1, 'day').format('YYYY-MM-DD')
    let dateEnd = dayjs(endTime).format('YYYY-MM-DD')
 
    //  当前的日期为开始日期的前一天
    let currentDate = dateBegin
    // 对无数据的日期进行填充
    while (currentDate < dateEnd) {
      // 当前日期增加1天
      currentDate = dayjs(currentDate).add(1, 'day').format('YYYY-MM-DD')
 
      // 根据日期查找对应数据
      let tempData = this.findDate(analysisData, currentDate)
      // 找到对应日期的数据,
      if (tempData) {
        xData.push(tempData.lst)
        yAvg.push(tempData.dayAvg)
        yOnline.push(this.deleteLastStr(tempData.dayOnline))
        yValid.push(this.deleteLastStr(tempData.dayValid))
        yExceed.push(this.deleteLastStr(tempData.dayExceeding))
        continue
      }
 
      // 未发现该日期的数据
      xData.push(currentDate)
      yAvg.push(null)
      yOnline.push(null)
      yValid.push(null)
      yExceed.push(null)
    }
 
    obj.xData = xData
    obj.yAvg = yAvg
    obj.yOnline = yOnline
    obj.yValid = yValid
    obj.yExceed = yExceed
    return obj
  },
 
  /**
   * 获取月天数
   * @param:
   * @returns:
   */
  backMonthDayNums(time) {
    return dayjs(time).daysInMonth()
  },
 
  /**
   * 返回无数据的时间段
   * @param:
   * @returns:
   */
  backNoDataInteval(dataBeginTime, dataEndTime) {
    const result = []
    // 数据开始时间
    const start = dayjs(dataBeginTime)
    // 数据结束时间
    const end = dayjs(dataEndTime)
    // 该月的1号
    const monthStart = start.startOf('month')
    // 该月最后一天
    const monthEnd = start.endOf('month')
 
    // 数据起始不等于月初 且 数据结束不等于月末
    if (!start.isSame(monthStart, 'day') && !end.isSame(monthEnd, 'day')) {
      result.push([monthStart.format('YYYY-MM-DD'), start.format('YYYY-MM-DD')])
      result.push([end.format('YYYY-MM-DD'), monthEnd.format('YYYY-MM-DD')])
    }
 
    // 数据起始等于月初 且 数据结束不等于月末
    if (start.isSame(monthStart, 'day') && !end.isSame(monthEnd, 'day')) {
      result.push([end.format('YYYY-MM-DD'), monthEnd.format('YYYY-MM-DD')])
    }
 
    // 数据起始不等于月初 且 数据结束等于月末
    if (!start.isSame(monthStart, 'day') && end.isSame(monthEnd, 'day')) {
      result.push([monthStart.format('YYYY-MM-DD'), start.format('YYYY-MM-DD')])
    }
 
    // 数据起始等于月初 且 数据结束等于月末  (这种情况没有空数据的时间间隔)
    return result
  },
 
  /**
   * 组成无数据区域
   * @param: 2维数组
   * @returns:
   */
  getMarkArea(timeInteval,describe='无数据') {
    let result = []
    for (let i = 0; i < timeInteval.length; i++) {
      let temp = []
      for (let j = 0; j < timeInteval[i].length; j++) {
        let obj = {}
        // 给第一个对象加上name属性
        if (j == 0) {
          obj.name = describe
        }
        obj.xAxis = timeInteval[i][j]
        temp.push(obj)
      }
      result.push(temp)
    }
    return result
  },
 
  /**
   * 找到对象数组中属性lstd的值
   * @param: 对象数组 ,mnCode等于value
   * @returns:
   */
  findDate(analysisData, date) {
    if (analysisData.length == 0) {
      return false
    }
 
    // 查找日期
    for (let i = 0; i < analysisData.length; i++) {
      if (analysisData[i].lst == date) {
        return analysisData[i]
      }
    }
 
    return false
  },
 
  /**
   * 去除字符串的百分号
   * @param:
   * @returns:
   */
  deleteLastStr(valueStr) {
    return valueStr.slice(0, -1)
  },
 
 
  /**
   * 指定时间区间的线段变颜色
   * @param: 
   * @returns:
   */
  getLineColor(timeInteval,xList){
    let result = []
 
    // 只取
    let temp = []
    for (let i = 0; i < timeInteval.length; i++){
      if(timeInteval[i][0]!=timeInteval[i][1]){
        temp.push(timeInteval[i])
      }
    } 
 
    // 无连续的数据 直接退出
    if(temp.length == 0){
      return []
    }
 
    // 取第一个连续的时段
    result.push(
      [
      {
        lte: temp[0][0],
        color: 'green'
      },
      {
        gt: temp[0][0],
        lte:temp[0][1],
        color: 'red'
      },
      {
        gt: temp[0][1],
        lte:xList[xList.length-1],
        color: 'green'
      }
    ]
    )
    return result[0]
  },
 
}