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