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));
|
//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
|
strategyMap.put("sixHourRainHandle", (arg1, arg2) -> noticeStrategyImpl.sixHourRainHandle(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));
|
}
|
|
/**
|
* 指派具体的策略去执行.
|
*
|
* @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);
|
}
|
}
|