zhangk
2024-06-26 723bfb3eda20ad768eb2efb1aedc08d5b82b2318
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
package cn.gistack.alerts.notice.strategy;
 
import cn.gistack.alerts.notice.service.impl.NoticeStrategyImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.function.BiFunction;
 
/**
 * 通知方式策略
 * @author zhongrj
 * @date 2023-05-29
 *
 */
@Service
@Slf4j
public class NoticeStrategyContext {
 
    /**
     * 存放所有策略.
     */
    private Map<String, BiFunction<String, String, String>> strategyMap = new HashMap<>(18);
 
    /**
     * 具体的策略细节.
     */
    @Autowired
    private NoticeStrategyImpl noticeStrategyImpl;
 
    /**
     * 加载所有策略
     */
    @PostConstruct
    public void initStrategies() {
        //1
        strategyMap.put("waterInfoNotHandle", (arg1, arg2) -> noticeStrategyImpl.waterInfoNotHandle(arg1, arg2));
        //2
        strategyMap.put("waterDataExcHandle", (arg1, arg2) -> noticeStrategyImpl.waterDataExcHandle(arg1, arg2));
        //3
        strategyMap.put("waterLessDeadHandle", (arg1, arg2) -> noticeStrategyImpl.waterLessDeadHandle(arg1, arg2));
        //4
        strategyMap.put("waterMoreDeadLessHJHandle", (arg1, arg2) -> noticeStrategyImpl.waterMoreDeadLessHJHandle(arg1, arg2));
        //5
        strategyMap.put("waterComeOverHandle", (arg1, arg2) -> noticeStrategyImpl.waterComeOverHandle(arg1, arg2));
        //6
        strategyMap.put("waterFirstOverHandle", (arg1, arg2) -> noticeStrategyImpl.waterFirstOverHandle(arg1, arg2));
        //7
        strategyMap.put("waterSmallScaleOverHandle", (arg1, arg2) -> noticeStrategyImpl.waterSmallScaleOverHandle(arg1, arg2));
        //7.1
        strategyMap.put("waterSmallScaleOver20Handle", (arg1, arg2) -> noticeStrategyImpl.waterSmallScaleOver20Handle(arg1, arg2));
        //8
        strategyMap.put("waterBigScaleOverHandle", (arg1, arg2) -> noticeStrategyImpl.waterBigScaleOverHandle(arg1, arg2));
        //9
        strategyMap.put("waterComeDesignHandle", (arg1, arg2) -> noticeStrategyImpl.waterComeDesignHandle(arg1, arg2));
        //10
        strategyMap.put("waterMoreDesignHandle", (arg1, arg2) -> noticeStrategyImpl.waterMoreDesignHandle(arg1, arg2));
        //11
        strategyMap.put("waterMoreCheckHandle", (arg1, arg2) -> noticeStrategyImpl.waterMoreCheckHandle(arg1, arg2));
        //12
        strategyMap.put("waterComeOneHourUpHandle", (arg1, arg2) -> noticeStrategyImpl.waterComeOneHourUpHandle(arg1, arg2));
        //13
        strategyMap.put("waterComeOneHourDownHandle", (arg1, arg2) -> noticeStrategyImpl.waterComeOneHourDownHandle(arg1, arg2));
        //14
        strategyMap.put("rainstormHandle", (arg1, arg2) -> noticeStrategyImpl.rainstormHandle(arg1, arg2));
        //15
        strategyMap.put("alreadyHeavyRainHandle", (arg1, arg2) -> noticeStrategyImpl.alreadyHeavyRainHandle(arg1, arg2));
        //16
        strategyMap.put("alreadyRainstormHandle", (arg1, arg2) -> noticeStrategyImpl.alreadyRainstormHandle(arg1, arg2));
        //17
        strategyMap.put("twoHourRainHandle", (arg1, arg2) -> noticeStrategyImpl.twoHourRainHandle(arg1, arg2));
        //18 6小时降雨告警
        strategyMap.put("sixHourRainHandle", (arg1, arg2) -> noticeStrategyImpl.sixHourRainHandle(arg1, arg2));
        //18 6小时降雨告警2
        strategyMap.put("sixHourRainHandle2", (arg1, arg2) -> noticeStrategyImpl.sixHourRainHandle2(arg1, arg2));
        //19 大坝安全监测告警-数据缺失
        strategyMap.put("damSafetyHandle", (arg1, arg2) -> noticeStrategyImpl.damSafetyHandle(arg1, arg2));
        //20 大坝安全监测告警-渗压管水位
        strategyMap.put("damSafetySyHandle", (arg1, arg2) -> noticeStrategyImpl.damSafetySyHandle(arg1, arg2));
        //21            渗压信息接收不到
        strategyMap.put("damSafetySyNoneHandle", (arg1, arg2) -> noticeStrategyImpl.damSafetySyNoneHandle(arg1, arg2));
        //22            渗流信息接收不到
        strategyMap.put("damSafetySlNoneHandle", (arg1, arg2) -> noticeStrategyImpl.damSafetySlNoneHandle(arg1, arg2));
        //23            位移信息接收不到
        strategyMap.put("damSafetyWyNoneHandle", (arg1, arg2) -> noticeStrategyImpl.damSafetyWyNoneHandle(arg1, arg2));
        //24            渗压资料缺失
        strategyMap.put("damSafetySyDataMissingHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyDataMissingHandle(arg1,arg2));
        //25            变形资料缺失
        strategyMap.put("damSafetyBxDataMissingHandle",(arg1,arg2)->noticeStrategyImpl.damSafetyBxDataMissingHandle(arg1,arg2));
        //26            水位低于管底高程
        strategyMap.put("damSafetySyLessThenPipeHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyLessThenPipeHandle(arg1,arg2));
        //27            水位高于管口高程
        strategyMap.put("damSafetySyHigherThenNozzleHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyHigherThenNozzleHandle(arg1,arg2));
        //28            水位高于坝顶高程
        strategyMap.put("damSafetySyHigherThenBdElevationHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyHigherThenBdElevationHandle(arg1,arg2));
        //29            水位大于库水位
        strategyMap.put("damSafetySyHigherThenWaterLevelHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyHigherThenWaterLevelHandle(arg1,arg2));
        //30            水位长期不变,五日变幅小于5cm,十日变幅大于5cm小于8cm,三十日变幅大于8cm小于10cm
        strategyMap.put("damSafetySyYellowChangeHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyYellowChangeHandle(arg1,arg2));
        //31            渗压水位一日变幅大于0.5米小于1米,五日变幅大于1米小于2米,十日变幅大于2米小于5米,三十日变幅大于5米小于10米
        strategyMap.put("damSafetySyOrangeChangeHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyOrangeChangeHandle(arg1,arg2));
        //32            渗压水位一日变幅大于1米小于2米,五日变幅大于2米小于5米,十日变幅大于5米小于10米,三十日变幅大于10米
        strategyMap.put("damSafetySyRedChangeHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyRedChangeHandle(arg1,arg2));
        //33            近1h水位陡降
        strategyMap.put("damSafetySyRz1hChangeHandle",(arg1,arg2)->noticeStrategyImpl.damSafetySyRz1hChangeHandle(arg1,arg2));
        //34            变形值大于20mm小于50mm
        strategyMap.put("damSafetyWyOver2Less5Handle",(arg1,arg2)->noticeStrategyImpl.damSafetyWyOver2Less5Handle(arg1,arg2));
        //35            变形值大于50mm小于100mm
        strategyMap.put("damSafetyWyOver5Less10Handle",(arg1,arg2)->noticeStrategyImpl.damSafetyWyOver5Less10Handle(arg1,arg2));
        //36            变形值大于100mm
        strategyMap.put("damSafetyWyOver10Handle",(arg1,arg2)->noticeStrategyImpl.damSafetyWyOver10Handle(arg1,arg2));
        //37            近1h变形值大于10cm以上
        strategyMap.put("damSafetyWy1hChangeOver10Handle",(arg1,arg2)->noticeStrategyImpl.damSafetyWy1hChangeOver10Handle(arg1,arg2));
        //38            渗流量一日大于5L小于8L,连续3日增加
        strategyMap.put("damSafetySlOver5Less8Handle",(arg1,arg2)->noticeStrategyImpl.damSafetySlOver5Less8Handle(arg1,arg2));
        //39            渗流量一日大于8L小于10L,连续3日增加
        strategyMap.put("damSafetySlOver8Less10Handle",(arg1,arg2)->noticeStrategyImpl.damSafetySlOver8Less10Handle(arg1,arg2));
        //40            渗流量一日大于10L以上,连续3日增加
        strategyMap.put("damSafetySlOver10Handle",(arg1,arg2)->noticeStrategyImpl.damSafetySlOver10Handle(arg1,arg2));
        //41            视频信息接收不到
        strategyMap.put("videoOfflineHandle",(arg1,arg2)->noticeStrategyImpl.videoOfflineHandle(arg1,arg2));
        //42            水位-超防洪高水位告警
        strategyMap.put("topLevOfFloAlertHandle",(arg1,arg2)->noticeStrategyImpl.topLevOfFloAlertHandle(arg1,arg2));
    }
 
    /**
     * 指派具体的策略去执行.
     *
     * @param arg1 参数1
     * @param arg2 参数2
     * @param key 根据key 来获取不同的策略
     * @return
     */
    public String doSomethingByStrategy(String arg1, String arg2, String key) {
        BiFunction<String, String, String> biFunction = strategyMap.get(key);
        if (Objects.isNull(biFunction)) {
            // 没有找到特定的策略,则采用默认实现(一般只有加了新的类型,但是没有配置对应的处理策略才会走到这里)
            log.warn("========= 没有配置该处理策略,采用默认实现,key {} ====== " + key);
            return noticeStrategyImpl.doSomethingDefault(arg1, arg2);
        }
        return biFunction.apply(arg1, arg2);
    }
}