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
 
 
export default {
    /**
     * 由单条月度值计算风险值
     * @param: 
     * @returns:
     */
    calRiskValue(monthlyRiskData) {
        // 风险值
        let riskValue = monthlyRiskData.onlineRisk*0.1 + monthlyRiskData.validRisk*0.2 + monthlyRiskData.exceedRisk*0.2 + monthlyRiskData.exceptionTypeAggregation*0.2 + monthlyRiskData.typicalExceptionRepetitionRate*0.3
        return riskValue
    },
    
 
    /**
     * 计算月度风险值
     * @param: 
     * @returns:
     */
    calMonthlyRiskValue(exceptionRiskValue){
        // 保存月度风险值
        let monthlyRiskValue = []
        // 计算每个站点的月度风险值
        for(let item in exceptionRiskValue){
            let risk = this.calRiskValue(item)
            monthlyRiskValue.push(risk)
        }
 
        // 降序排列
        monthlyRiskValue.sort((a, b) => b - a)
        
        return monthlyRiskValue 
    },
 
    /**
     * 组装成表格的行
     * @param: 站点的月度分险数据,该站点的月度风险值
     * @returns:
     */
    organizeTableRow(monthlyRiskData,riskValue) {
        let obj = {}
        obj.siteName = monthlyRiskData.name
        obj.region = '金山区'
        obj.mnCode = monthlyRiskData.mnCode
        obj.monitorType = '扬尘'
        obj.riskValue = riskValue
        obj.beginTime = monthlyRiskData.lst
        obj.endTime = monthlyRiskData.lst
 
        // 根据月度风险值,返回对应的风险等级和风险建议
        let riskGradeAndAdvice  = this.judgeRiskGradeAndAdvice(riskValue)
        obj.riskGrade = riskGradeAndAdvice[0]
        obj.riskAdvice = riskGradeAndAdvice[1]
 
        return obj
    },
 
    /**
     * 根据月度风险值,返回对应的风险等级和风险建议 
     * @param: 月度风险值
     */
    judgeRiskGradeAndAdvice(monthlyRiskValue){
        let temp = []
        // 低风险
        if(monthlyRiskValue < 0.15) {
            temp.push('低风险')
            let advice =  '1.建议及时提醒该站点所属单位进行应急维护;\n2.若同时存在超标、临界超标、量级突变等异常时,建议将该站点移交环境执法大队开展现场执法检查;\n3.若持续两月及以上为高风险,建议将该站点纳入年度抽测比对清单;'
            temp.push(advice)
        }
        // 中风险
        if (monthlyRiskValue <= 0.6 && monthlyRiskValue >= 0.15) {
            temp.push('中风险')
            let advice =  '1.建议通过守法服务小程序、监测监管微信群等线上方式提示站点所属单位,聚焦当前存在的问题或隐患,及时开展自查自纠;\n2.若同时存在在线率或有效率月度不达标,建议电话通知该站点所属单位进行应急维护,并进行专项审核;'
            temp.push(advice)
        }
        // 高风险
        if (monthlyRiskValue > 0.6) {
            temp.push('高风险')
            let advice = '1.若不涉及超标或在线率、有效率异常,常态数据审核即可;\n2.若涉及超标或在线率、有效率等异常,建议通过守法服务小程序、监测监管微信群等线上方式提示站点所属单位,及时开展自查自纠;'
            temp.push(advice)
        }
        return temp
    },
 
 
    // 遍历对每条月度异常风险值
        // 计算综合风险值
        // 拼接新的对象
    // 返回表格对象
 
    /**
     * 返回综合风险排名的表格数据
     * @param: 各站点月度分险数据
     * @returns:表格数据
     */
   backComprehensiveRiskTableData(allExceptionData){
        let tableData = []
        // 遍历对每条月度异常风险
        allExceptionData.forEach(element => {
            
            // 计算得到月度风险值
            let monthlyRiskValue = this.calRiskValue(element)
            // 组成表格行的字段
            let tableRow = this.organizeTableRow(element,monthlyRiskValue.toFixed(2))
 
            tableData.push(tableRow)
        });
 
        return tableData
   }
 
 
 
   
 
 
}