riku
2024-04-26 5efebb555efd984f3dd35de83e465cd53aaf8175
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
const DataSummary = {
  _selectFactorId: ['1', '2', '3'],
  _factorDatas: undefined,
  /**
   * 输出一组数据的总结
   * 包括均值和范围
   * @param factorDatas @see FactorDatas
   */
  summary(elementId, factorDatas) {
    if (factorDatas) {
      this._factorDatas = factorDatas;
    }
 
    const summarys = [];
    for (const key in this._factorDatas.factor) {
      const f = this._factorDatas.factor[key];
      if (
        this._selectFactorId.indexOf(f.factorId) == -1 ||
        this.notRequiredFactor(f.factorName)
      )
        continue;
      const datas = f.datas;
      const { min, max, avg } = this._avgAndRange(datas);
      // summarys.set(
      //   f.factorName,
      //   `${f.factorName}均值为 ${avg}μg/m<sup>3</sup>, 浓度范围为 ${min}-${max}μg/m<sup>3</sup>`
      // );
      const unit = Util.factorUnit['type0'][f.factorId];
      summarys.push(
        `${f.factorName}: 均值为 ${avg}${unit},范围为 ${min}-${max}${unit}`
      );
    }
    let html = '';
    summarys.forEach((s) => {
      html += `<div>${s}</div>`;
    });
    $('#history_table_summary').html(html);
 
    return summarys;
  },
  onChangeFactor(elementId, index, add) {
    if (add) {
      this._selectFactorId.push(index);
    } else {
      var i = this._selectFactorId.indexOf(index);
      this._selectFactorId.splice(i, 1);
    }
 
    return this.summary(elementId);
  },
 
  /**
   * 不需要显示的监测因子
   * @param {*} factorName
   * @returns
   */
  notRequiredFactor(factorName) {
    return factorName == 'LNG' || factorName == 'LAT';
  },
 
  _avgAndRange(datas) {
    let min, max;
    let total = 0;
    let count = 0;
    datas.forEach((d) => {
      if (min == undefined || min > d.factorData) {
        min = d.factorData;
      }
      if (max == undefined || max < d.factorData) {
        max = d.factorData;
      }
      total += d.factorData;
      count++;
    });
    let avg = 0;
    if (count > 0) {
      avg = Math.round((total / count) * 10) / 10;
    }
    return { min, max, avg };
  },
};