From b47270f832387263cdafd30ce5b4f056a18492aa Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Mon, 03 Jul 2023 15:50:13 +0800
Subject: [PATCH] 水位初次超汛限告警修改,短信批量发送超过1000条报错逻辑调整

---
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java |  177 ++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 103 insertions(+), 74 deletions(-)

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 f77b057..7720fff 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
@@ -32,6 +32,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 /**
  * 通知策略
@@ -108,47 +109,51 @@
 		List<PersonVO> personLists = new ArrayList<>();
 		List<List<String>> lists = new ArrayList<>();
 		for (int i = 0; i < jsonArray.size(); i++) {
-			// 根据水库编号,所在区域查询需要发送的人员手机号及设置
-			String res_cd = jsonArray.getJSONObject(i).getString("res_cd");
-			// 判断时间是否存在
-			String tm = jsonArray.getJSONObject(i).getString("tm");
-			String day = "";
-			String hour = "";
-			String minute = "";
-			if (null!=tm && !tm.equals("") && flag){
-				flag = true;
-				// 加入天,时,分
-				day = tm.substring(8,10);
-				hour = tm.substring(11,13);
-				minute = tm.substring(14,16);
-			}else {
-				flag = false;
-			}
-			// 查询告警人员信息
-			List<PersonVO> personVOList = getPersonListByResGuid(res_cd,alarmRule);
-			if (personVOList.size() > 0) {
-				for (PersonVO personVO : personVOList) {
-					List<String> list = new ArrayList<>();
-					list.add(res_cd);
-					list.add(personVO.getPhone());
-					if (flag) {
-						list.add(day);
-						list.add(hour);
-						list.add(minute);
-					}
-					// 变量将值放入集合中
-					for (String column : columnsList) {
-						String[] split = column.split(",");
-						String format = "";
-						for (String s : split) {
-							format = format + jsonArray.getJSONObject(i).getString(s);
-						}
-						list.add(format);
-					}
-					lists.add(list);
+			String county_cd = jsonArray.getJSONObject(i).getString("county_cd");
+			// city_cd,county_cd
+			if (county_cd.equals("421223000000")) {
+				// 根据水库编号,所在区域查询需要发送的人员手机号及设置
+				String res_cd = jsonArray.getJSONObject(i).getString("res_cd");
+				// 判断时间是否存在
+				String tm = jsonArray.getJSONObject(i).getString("tm");
+				String day = "";
+				String hour = "";
+				String minute = "";
+				if (null != tm && !tm.equals("") && flag) {
+					flag = true;
+					// 加入天,时,分
+					day = tm.substring(8, 10);
+					hour = tm.substring(11, 13);
+					minute = tm.substring(14, 16);
+				} else {
+					flag = false;
 				}
+				// 查询告警人员信息
+				List<PersonVO> personVOList = getPersonListByResGuid(res_cd, alarmRule);
+				if (personVOList.size() > 0) {
+					for (PersonVO personVO : personVOList) {
+						List<String> list = new ArrayList<>();
+						list.add(res_cd);
+						list.add(personVO.getPhone());
+						if (flag) {
+							list.add(day);
+							list.add(hour);
+							list.add(minute);
+						}
+						// 变量将值放入集合中
+						for (String column : columnsList) {
+							String[] split = column.split(",");
+							String format = "";
+							for (String s : split) {
+								format = format + jsonArray.getJSONObject(i).getString(s);
+							}
+							list.add(format);
+						}
+						lists.add(list);
+					}
+				}
+				personLists.addAll(personVOList);
 			}
-			personLists.addAll(personVOList);
 		}
 		// 设置信息
 		smsRequestTemplate.setPersonVOList(personLists);
@@ -159,18 +164,30 @@
 	 * 保存告警记录信息
 	 * @param list
 	 * @param alarmRule 告警规则
+	 * @param uuid 临时id
 	 * @return
 	 */
-	private AlarmRecord saveAlarmRecord(List<String> list,AlarmRule alarmRule) {
-		AlarmRecord alarmRecord = new AlarmRecord();
-		// 设置相关信息
-		alarmRecord.setAlarmRuleId(alarmRule.getId().toString());
-		alarmRecord.setReservoirNumber(list.get(0));
-		alarmRecord.setAlarmCondition(alarmRule.getRuleRemark());
-		// 新增
-		boolean save = alarmRecordService.save(alarmRecord);
-		if (save){
+	private AlarmRecord saveAlarmRecord(List<String> list,AlarmRule alarmRule,String uuid) {
+		AlarmRecord alarmRecord = alarmRecordService.getOne(new QueryWrapper<AlarmRecord>()
+			.eq("temp_code",uuid)
+			.eq("alarm_rule_id",alarmRule.getId())
+			.eq("reservoir_number",list.get(0))
+		);
+		if (null!=alarmRecord) {
 			return alarmRecord;
+		}else {
+			AlarmRecord alarm = new AlarmRecord();
+			// 设置相关信息
+			alarm.setAlarmRuleId(alarmRule.getId().toString());
+
+			alarm.setReservoirNumber(list.get(0));
+			alarm.setAlarmCondition(alarmRule.getRuleRemark());
+			alarm.setTempCode(uuid);
+			// 新增
+			boolean save = alarmRecordService.save(alarm);
+			if (save) {
+				return alarm;
+			}
 		}
 		// 返回
 		return null;
@@ -235,9 +252,9 @@
 			list.add(jszrr);
 		}else {
 			// 巡查责任人姓名
-			list.add("?");
+			list.add("");
 			// 技术责任人姓名
-			list.add("?");
+			list.add("");
 		}
 	}
 
@@ -258,7 +275,7 @@
 			// 拼接水利部人员信息
 			list.add(builder.substring(0,builder.length()-1));
 		}else {
-			list.add("?");
+			list.add("");
 		}
 	}
 
@@ -282,20 +299,22 @@
 	 * @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 = getZtData("", ZtApiUrlConstant.res_z_null_api);
 			// 只发短信,将发短信信息组装好
-			SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, "2431012216668",alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false);
+			SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false);
 			// 拼接内容后面的联系方式,当前模板拼接平台服务电话
 			// 遍历,拼接平台服务电话
 			for (List<String> list : smsRequestTemplate.getTemplateContent()) {
 				// 添加平台电话
 				list.add(PtInfoConstant.serverPhone);
 				// 保存告警记录信息
-				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
+				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
 				if (null != alarmRecord) {
 					list.add(alarmRecord.getId().toString());
 				}
@@ -315,6 +334,8 @@
 	 * @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) {
@@ -322,11 +343,11 @@
 			JSONArray ztData = getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
 			// 只发短信,将发短信信息组装好
 			SmsRequestTemplate smsRequestTemplate
-				= getSendSmsTemplate(ztData, "2431012248591",alarmRule, ZtApiDataColumnConstant.waterDataExcList,false);
+				= getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false);
 			// 拼接后面内容
 			for (List<String> list : smsRequestTemplate.getTemplateContent()) {
 				// 保存告警记录信息
-				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
+				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
 				if (null != alarmRecord) {
 					list.add(alarmRecord.getId().toString());
 				}
@@ -346,20 +367,22 @@
 	 * @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 = getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
 			// 只发短信,将发短信信息组装好
-			SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, "2431012248594",alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true);
+			SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true);
 			// 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
 			// 遍历,拼接县水利部人员电话
 			for (List<String> list : smsRequestTemplate.getTemplateContent()) {
 				// 查询县水利部人员(通过水库编号)
 //				list.add("测试:13112341234");
 				// 保存告警记录信息
-				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
+				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
 				if (null != alarmRecord) {
 					list.add(alarmRecord.getId().toString());
 				}
@@ -393,13 +416,15 @@
 	 * @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 = getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
 			// 只发送站内信
-			SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, "znxsw10000001",alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true);
+			SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true);
 			// 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
 			// 遍历,拼接县水利部人员电话
 			for (List<String> list : smsRequestTemplate.getTemplateContent()) {
@@ -408,7 +433,7 @@
 				// 市县水利部门人员姓名电话(暂时不要)
 //				list.add("测试:13112341234");
 				// 保存告警记录信息
-				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
+				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule,uuid);
 				if (null != alarmRecord) {
 					list.add(alarmRecord.getId().toString());
 //					list.add("999");
@@ -430,6 +455,8 @@
 	 * @return
 	 */
 	public String waterFirstOverHandle(String arg1, String arg2) {
+		String templateId = "2431012216671";
+		String uuid = templateId + UUID.randomUUID().toString();
 		// 查询当前策略对应的告警规则信息
 		AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
 		if (null!=alarmRule) {
@@ -437,24 +464,26 @@
 			JSONArray ztData = getZtData("", ZtApiUrlConstant.over_z_res_api);
 			// 只发短信,将发短信信息组装好
 			SmsRequestTemplate smsRequestTemplate
-				= getSendSmsTemplate(ztData, "2431012216671",alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true);
+				= getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true);
 			// 拼接后面内容
-			for (List<String> list : smsRequestTemplate.getTemplateContent()) {
-				// 依次拼接巡查责任人,技术责任人姓名
-				addPatrolTechnologyInfo(list);
-				// 拼接市县水利部人员姓名及联系方式
-				addCityCountyBusinessPersonInfo(list);
-				// 保存告警记录信息
-				AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
-				if (null != alarmRecord) {
-					list.add(alarmRecord.getId().toString());
-//					list.add("999");
+			if (smsRequestTemplate.getPersonVOList().size()>0) {
+				for (List<String> list : smsRequestTemplate.getTemplateContent()) {
+					// 依次拼接巡查责任人,技术责任人姓名
+					addPatrolTechnologyInfo(list);
+					// 拼接市县水利部人员姓名及联系方式
+					addCityCountyBusinessPersonInfo(list);
+					// 保存告警记录信息
+					AlarmRecord alarmRecord = 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");
 			}
-			// 调用短信服务
-			Map<String, Object> map = smsService.sendSignMsg(smsRequestTemplate);
-			// 返回
-			return "本次-水位初次超汛限告警短信成功通知数量:" + map.get("smsRecord");
 		}
 		// 返回
 		return "水位初次超汛限告警";

--
Gitblit v1.9.3