package cn.gistack.alerts.notice.service.impl;
|
|
import cn.gistack.alerts.alarmRule.entity.AlarmRecord;
|
import cn.gistack.alerts.alarmRule.entity.AlarmRule;
|
import cn.gistack.alerts.alarmRule.service.AlarmRecordService;
|
import cn.gistack.alerts.alarmRule.service.AlarmRuleService;
|
import cn.gistack.alerts.notice.constant.ZtConfigConstant;
|
import cn.gistack.alerts.sms.service.ISmsTemplateService;
|
import cn.gistack.common.utils.SpringContextUtil;
|
import cn.gistack.alerts.notice.constant.PtInfoConstant;
|
import cn.gistack.alerts.notice.constant.ZtApiDataColumnConstant;
|
import cn.gistack.alerts.notice.constant.ZtApiUrlConstant;
|
import cn.gistack.alerts.notice.enums.PersonEnum;
|
import cn.gistack.alerts.notice.util.FormatUtil;
|
import cn.gistack.sm.sjztmd.vo.PersonVO;
|
import cn.gistack.sm.sjztmd.feign.IAttResManagePersonClient;
|
import cn.gistack.alerts.sms.entity.SmsTemplate;
|
import cn.gistack.alerts.sms.service.SmsService;
|
import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import org.jetbrains.annotations.NotNull;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpMethod;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.MultiValueMap;
|
import org.springframework.web.client.RestTemplate;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.UUID;
|
|
/**
|
* 通知策略
|
*
|
* @author zhongrj
|
* @date 2023-05-30
|
*/
|
@Component
|
public class NoticeStrategyImpl {
|
|
@Autowired
|
private SmsService smsService;
|
|
@Autowired
|
private AlarmRuleService alarmRuleService;
|
|
@Autowired
|
private NoticeHandle noticeHandle;
|
|
@Autowired
|
private AsyncNoticeHandle asyncNoticeHandle;
|
|
|
|
|
/**
|
* 默认实现
|
*
|
* @param arg1 告警规则名称
|
* @param arg2
|
* @return
|
*/
|
public String doSomethingDefault(String arg1, String arg2) {
|
// 默认业务逻辑处理...
|
return "默认实现";
|
}
|
|
/**
|
* 策略1: 水位信息接收不到
|
*
|
* @param arg1 告警规则名称
|
* @param arg2
|
* @return
|
*/
|
public String waterInfoNotHandle(String arg1, String arg2) {
|
String templateId = "2431012216668";
|
String uuid = templateId + UUID.randomUUID().toString();
|
// 查询当前策略对应的告警规则信息
|
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
|
if (null!=alarmRule) {
|
// 调用中台服务接口查询数据
|
JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_null_api);
|
// 只发短信,将发短信信息组装好
|
SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,null);
|
// 拼接内容后面的联系方式,当前模板拼接平台服务电话
|
// 遍历,拼接平台服务电话
|
for (List<String> list : smsRequestTemplate.getTemplateContent()) {
|
// 保存告警记录信息
|
AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
|
if (null != alarmRecord) {
|
list.add(alarmRecord.getId().toString());
|
}
|
}
|
// 调用短信服务
|
smsService.sendSignMsg(smsRequestTemplate);
|
}
|
// 返回
|
return "水位信息接收不到";
|
}
|
|
/**
|
* 策略2: 水位数据异常
|
*
|
* @param arg1 告警规则名称
|
* @param arg2
|
* @return
|
*/
|
public String waterDataExcHandle(String arg1, String arg2) {
|
String templateId = "2431012248591";
|
String uuid = templateId + UUID.randomUUID().toString();
|
// 查询当前策略对应的告警规则信息
|
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
|
if (null!=alarmRule) {
|
// 调用中台服务接口查询数据
|
JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
|
// 只发短信,将发短信信息组装好
|
SmsRequestTemplate smsRequestTemplate
|
= noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false,null);
|
// 拼接后面内容
|
for (List<String> list : smsRequestTemplate.getTemplateContent()) {
|
// 保存告警记录信息
|
AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
|
if (null != alarmRecord) {
|
list.add(alarmRecord.getId().toString());
|
}
|
}
|
// 调用短信服务
|
smsService.sendSignMsg(smsRequestTemplate);
|
}
|
// 返回
|
return "水位数据异常";
|
}
|
|
/**
|
* 策略3: 水位超低于死水位(水库技术责任人、巡查责任人)
|
*
|
* @param arg1 告警规则名称
|
* @param arg2
|
* @return
|
*/
|
public String waterLessDeadHandle(String arg1, String arg2) {
|
String templateId = "2431012248594";
|
String uuid = templateId + UUID.randomUUID().toString();
|
// 查询当前策略对应的告警规则信息
|
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
|
if (null!=alarmRule) {
|
// 调用中台服务接口查询数据
|
JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
|
// 只发短信,将发短信信息组装好
|
SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
|
// 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
|
// 遍历,拼接县水利部人员电话
|
for (List<String> list : smsRequestTemplate.getTemplateContent()) {
|
// 查询县水利部人员(通过水库编号)
|
// list.add("测试:13112341234");
|
// 保存告警记录信息
|
AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
|
if (null != alarmRecord) {
|
list.add(alarmRecord.getId().toString());
|
}
|
}
|
// 调用短信服务
|
Map<String, Object> map = smsService.sendSignMsg(smsRequestTemplate);
|
// 返回
|
return "本次-水位初次超汛限告警短信成功通知数量:" + map.get("smsRecord");
|
}
|
// 返回
|
return "水位超低于死水位";
|
}
|
|
|
|
/**
|
* 策略4: 水位高于死水位,低于旱警水位
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterMoreDeadLessHJHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略5: 水位接近汛限告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterComeOverHandle(String arg1, String arg2) {
|
String templateId = "znxsw10000001";
|
String uuid = templateId + UUID.randomUUID().toString();
|
// 查询当前策略对应的告警规则信息
|
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
|
if (null!=alarmRule) {
|
// 调用中台服务接口查询数据
|
JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
|
// 只发送站内信
|
SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
|
// 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
|
// 遍历,拼接县水利部人员电话
|
for (List<String> list : smsRequestTemplate.getTemplateContent()) {
|
// 后面依次拼接 巡查责任人姓名,技术责任人姓名,市县水利部门人员姓名电话(暂时不要)
|
noticeHandle.addPatrolTechnologyInfo(list);
|
// 市县水利部门人员姓名电话(暂时不要)
|
// list.add("测试:13112341234");
|
// 保存告警记录信息
|
AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
|
if (null != alarmRecord) {
|
list.add(alarmRecord.getId().toString());
|
// list.add("999");
|
}
|
}
|
// 保存站内信记录信息
|
smsService.saveInStationInfo(smsRequestTemplate);
|
}
|
return "水位接近汛限告警";
|
}
|
|
|
|
/**
|
* 策略6: 水位初次超汛限告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterFirstOverHandle(String arg1, String arg2) {
|
String adCode = "421303000000";
|
String templateId = "2431012216671";
|
String uuid = templateId + UUID.randomUUID().toString();
|
// 查询当前策略对应的告警规则信息
|
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
|
if (null!=alarmRule) {
|
// 调用中台服务接口查询数据
|
JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_z_res_api);
|
// 只发短信,将发短信信息组装好
|
SmsRequestTemplate smsRequestTemplate
|
= noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true,adCode);
|
// 拼接后面内容
|
if (smsRequestTemplate.getPersonVOList().size()>0) {
|
for (List<String> list : smsRequestTemplate.getTemplateContent()) {
|
// 依次拼接巡查责任人,技术责任人姓名
|
noticeHandle.addPatrolTechnologyInfo(list);
|
// 拼接市县水利部人员姓名及联系方式
|
noticeHandle.addCityCountyBusinessPersonInfo(list);
|
// 保存告警记录信息
|
AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
|
if (null != alarmRecord) {
|
list.add(alarmRecord.getId().toString());
|
// list.add("999");
|
}
|
}
|
// 调用短信服务
|
Map<String, Object> map = smsService.sendSignMsg(smsRequestTemplate);
|
// 返回
|
return "本次-水位初次超汛限告警短信成功通知数量:" + map.get("smsRecord");
|
}
|
}
|
// 返回
|
return "水位初次超汛限告警";
|
}
|
|
|
/**
|
* 策略7: 水位小幅超汛限告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterSmallScaleOverHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略8: 水位大幅超汛限告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterBigScaleOverHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略9: 水位接近设计洪水位告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterComeDesignHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略10: 水位超设计洪水位告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterMoreDesignHandle(String arg1, String arg2) {
|
String templateId = "2431012248604";
|
String uuid = templateId + UUID.randomUUID().toString();
|
// 查询当前策略对应的告警规则信息
|
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
|
if (null!=alarmRule) {
|
// 异步处理,暂时解决超时重置问题
|
Map<String, Object> map = asyncNoticeHandle.handleAlarmInfo(templateId, uuid, alarmRule);
|
// 返回
|
return "水位超设计洪水位告警";
|
}
|
// 返回
|
return "水位超设计洪水位告警";
|
}
|
|
/**
|
* 策略11: 水位超校核洪水位告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterMoreCheckHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略12: 近1h水位陡升
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterComeOneHourUpHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略13: 近1h水位陡降
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String waterComeOneHourDownHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略14: 暴雨降雨预警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String rainstormHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略15: 已降大雨告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String alreadyHeavyRainHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略16: 已降暴雨告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String alreadyRainstormHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略17: 2小时降雨告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String twoHourRainHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
/**
|
* 策略18: 6小时降雨告警
|
*
|
* @param arg1
|
* @param arg2
|
* @return
|
*/
|
public String sixHourRainHandle(String arg1, String arg2) {
|
// 业务逻辑处理 2...
|
return "";
|
}
|
|
}
|