From 2a8f13fe78fbf4b74bd93bd43ae7b7e3e9211e79 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 05 Jul 2023 10:18:48 +0800
Subject: [PATCH] 超设计告警修改为异步执行,暂时解决超时任务重试问题
---
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java | 53 +++++++++++++
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java | 81 +++----------------
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml | 2
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java | 63 +++++++++++++++
4 files changed, 130 insertions(+), 69 deletions(-)
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
index 229bfba..293c278 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
@@ -14,7 +14,7 @@
left join SJZT_MD."att_ad_base" aab on aab."guid" = arb."interior_ad_guid"
where sar.is_deleted = 0
<if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''">
- and sar.reservoir_name like concat(concat('%',#{alarmRecord.reservoirName}),'%')
+ and arb."name" like concat('%',#{alarmRecord.reservoirName},'%')
</if>
<if test="alarmRecord.type!=null and alarmRecord.type!=''">
and sar1.type = #{alarmRecord.type}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
new file mode 100644
index 0000000..644da6f
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
@@ -0,0 +1,63 @@
+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.notice.constant.ZtApiDataColumnConstant;
+import cn.gistack.alerts.notice.constant.ZtApiUrlConstant;
+import cn.gistack.alerts.sms.service.SmsService;
+import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
+import com.alibaba.fastjson.JSONArray;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class AsyncNoticeHandle {
+
+
+ @Autowired
+ private NoticeHandle noticeHandle;
+
+ @Autowired
+ private SmsService smsService;
+
+ /**
+ * 异步发送告警信息
+ * @param templateId
+ * @param uuid
+ * @param alarmRule
+ * @return
+ */
+ @Async
+ public Map<String, Object> handleAlarmInfo(String templateId, String uuid, AlarmRule alarmRule) {
+ Map<String, Object> map = new HashMap<>();
+ // 调用中台服务接口查询数据
+ JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_des_rz_warn_api);
+ // 只发短信,将发短信信息组装好
+ SmsRequestTemplate smsRequestTemplate
+ = noticeHandle.getSendSmsTemplate(ztData, templateId, alarmRule, ZtApiDataColumnConstant.waterMoreDesignList, true, null);
+ // 拼接后面内容
+ if (smsRequestTemplate.getPersonVOList().size() > 0) {
+ for (List<String> list : smsRequestTemplate.getTemplateContent()) {
+ // 依次添加行政责任人,主管部门责任人,技术责任人,巡查责任人信息(姓名,联系电话)
+ noticeHandle.addWaterMoreDesignPatrolTechnologyInfo(list, "1,2,4,5");
+ // 拼接市县水利部人员姓名及联系方式
+ noticeHandle.addCityCountyBusinessPersonInfo(list);
+ // 保存告警记录信息
+ AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid);
+ if (null != alarmRecord) {
+ list.add(alarmRecord.getId().toString());
+ }
+ }
+ map = smsService.sendSignMsg(smsRequestTemplate);
+ // 调用短信服务
+ return map;
+ }
+ return map;
+ }
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
index dd48a1a..89e51b2 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -3,19 +3,30 @@
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.notice.constant.ZtApiUrlConstant;
+import cn.gistack.alerts.notice.constant.ZtConfigConstant;
import cn.gistack.alerts.notice.enums.PersonEnum;
import cn.gistack.alerts.notice.util.FormatUtil;
import cn.gistack.alerts.sms.entity.SmsTemplate;
import cn.gistack.alerts.sms.service.ISmsTemplateService;
import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
+import cn.gistack.common.utils.SpringContextUtil;
import cn.gistack.sm.sjztmd.feign.IAttResManagePersonClient;
import cn.gistack.sm.sjztmd.vo.PersonVO;
import cn.gistack.system.feign.ISysClient;
+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;
@@ -30,12 +41,14 @@
@Autowired
private ISmsTemplateService smsTemplateService;
-
@Autowired
private IAttResManagePersonClient attResManagePersonClient;
@Autowired
private ISysClient sysClient;
+
+ @Autowired
+ private RestTemplate restTemplate;
/**
@@ -349,4 +362,42 @@
}
}
}
+
+
+ /**
+ * 调用中台接口查询数据
+ *
+ * @param params
+ * @param url
+ * @return
+ */
+ public JSONArray getZtData(String params, String url) {
+ // 获取环境
+ String activeProfile = SpringContextUtil.getActiveProfile();
+ if (activeProfile.equals("dev")){
+ url = ZtApiUrlConstant.url_prefix_dev + url;
+ }
+ if (activeProfile.equals("prod")){
+ url = ZtApiUrlConstant.url_prefix_prod + url;
+ }
+ //设置请求头
+ HttpHeaders headers = new HttpHeaders();
+ headers.add(ZtConfigConstant.header_key, ZtConfigConstant.header_value);
+ //封装请求头
+ HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<MultiValueMap<String, Object>>(headers);
+ try {
+ //有请求头,有参数请求
+ ResponseEntity<String> responseEntity =
+ restTemplate.exchange(url + params,
+ HttpMethod.GET,
+ formEntity,
+ String.class);
+ JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
+ // 返回
+ return JSONArray.parseArray(jsonObject.get("data").toString());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
index 882a2d7..9eec07a 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -51,10 +51,10 @@
private AlarmRuleService alarmRuleService;
@Autowired
- private RestTemplate restTemplate;
+ private NoticeHandle noticeHandle;
@Autowired
- private NoticeHandle noticeHandle;
+ private AsyncNoticeHandle asyncNoticeHandle;
@@ -85,7 +85,7 @@
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
if (null!=alarmRule) {
// 调用中台服务接口查询数据
- JSONArray ztData = getZtData("", ZtApiUrlConstant.res_z_null_api);
+ JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_null_api);
// 只发短信,将发短信信息组装好
SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,null);
// 拼接内容后面的联系方式,当前模板拼接平台服务电话
@@ -118,7 +118,7 @@
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
if (null!=alarmRule) {
// 调用中台服务接口查询数据
- JSONArray ztData = getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
+ JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
// 只发短信,将发短信信息组装好
SmsRequestTemplate smsRequestTemplate
= noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false,null);
@@ -151,7 +151,7 @@
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
if (null!=alarmRule) {
// 调用中台服务接口查询数据
- JSONArray ztData = getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
+ JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
// 只发短信,将发短信信息组装好
SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
// 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
@@ -166,13 +166,15 @@
}
}
// 调用短信服务
- Map<String,Object> map = smsService.sendSignMsg(smsRequestTemplate);
+ Map<String, Object> map = smsService.sendSignMsg(smsRequestTemplate);
// 返回
return "本次-水位初次超汛限告警短信成功通知数量:" + map.get("smsRecord");
}
// 返回
return "水位超低于死水位";
}
+
+
/**
* 策略4: 水位高于死水位,低于旱警水位
@@ -200,7 +202,7 @@
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
if (null!=alarmRule) {
// 调用中台服务接口查询数据
- JSONArray ztData = getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
+ JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
// 只发送站内信
SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
// 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
@@ -240,7 +242,7 @@
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
if (null!=alarmRule) {
// 调用中台服务接口查询数据
- JSONArray ztData = getZtData("", ZtApiUrlConstant.over_z_res_api);
+ JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_z_res_api);
// 只发短信,将发短信信息组装好
SmsRequestTemplate smsRequestTemplate
= noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true,adCode);
@@ -318,29 +320,10 @@
// 查询当前策略对应的告警规则信息
AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
if (null!=alarmRule) {
- // 调用中台服务接口查询数据
- JSONArray ztData = getZtData("", ZtApiUrlConstant.over_des_rz_warn_api);
- // 只发短信,将发短信信息组装好
- SmsRequestTemplate smsRequestTemplate
- = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterMoreDesignList,true,null);
- // 拼接后面内容
- if (smsRequestTemplate.getPersonVOList().size()>0) {
- for (List<String> list : smsRequestTemplate.getTemplateContent()) {
- // 依次添加行政责任人,主管部门责任人,技术责任人,巡查责任人信息(姓名,联系电话)
- noticeHandle.addWaterMoreDesignPatrolTechnologyInfo(list,"1,2,4,5");
- // 拼接市县水利部人员姓名及联系方式
- noticeHandle.addCityCountyBusinessPersonInfo(list);
- // 保存告警记录信息
- 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");
- }
+ // 异步处理,暂时解决超时重置问题
+ Map<String, Object> map = asyncNoticeHandle.handleAlarmInfo(templateId, uuid, alarmRule);
+ // 返回
+ return "水位超设计洪水位告警";
}
// 返回
return "水位超设计洪水位告警";
@@ -442,40 +425,4 @@
return "";
}
- /**
- * 调用中台接口查询数据
- *
- * @param params
- * @param url
- * @return
- */
- private JSONArray getZtData(String params, String url) {
- // 获取环境
- String activeProfile = SpringContextUtil.getActiveProfile();
- if (activeProfile.equals("dev")){
- url = ZtApiUrlConstant.url_prefix_dev + url;
- }
- if (activeProfile.equals("prod")){
- url = ZtApiUrlConstant.url_prefix_prod + url;
- }
- //设置请求头
- HttpHeaders headers = new HttpHeaders();
- headers.add(ZtConfigConstant.header_key, ZtConfigConstant.header_value);
- //封装请求头
- HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<MultiValueMap<String, Object>>(headers);
- try {
- //有请求头,有参数请求
- ResponseEntity<String> responseEntity =
- restTemplate.exchange(url + params,
- HttpMethod.GET,
- formEntity,
- String.class);
- JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
- // 返回
- return JSONArray.parseArray(jsonObject.get("data").toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
}
--
Gitblit v1.9.3