From f2bfb4490106abcb41e3c7e09159e89a0f7219c0 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Thu, 13 Jul 2023 16:07:26 +0800
Subject: [PATCH] 水位缺失预警调整,重复水库进行去重,合并水库最多30个发送

---
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java       |  100 +++++++++++++-------------------
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java |    7 +-
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java           |   11 +++
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java                 |    7 ++
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java  |   10 +-
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java        |   44 ++++++++++----
 6 files changed, 100 insertions(+), 79 deletions(-)

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
index f9cd5e6..ea0910a 100644
--- 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
@@ -36,9 +36,9 @@
 	 */
 	public void waterInfoNotHandle(AlarmRule alarmRule, String templateId, String uuid, String adCode,Boolean isSendStation) {
 		// 调用中台服务接口查询数据
-		JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_null_api);
+		JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.no_z_last_api_all);
 		// 只发短信,将发短信信息组装好
-		SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,adCode);
+		SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,adCode,uuid);
 		// 遍历
 		for (List<String> list : smsRequestTemplate.getTemplateContent()) {
 			// 保存告警记录信息
@@ -64,7 +64,7 @@
 		// 调用中台服务接口查询数据
 		JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
 		// 只发送站内信
-		SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
+		SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null,uuid);
 		// 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
 		// 遍历,拼接县水利部人员电话
 		for (List<String> list : smsRequestTemplate.getTemplateContent()) {
@@ -100,7 +100,7 @@
 		JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_z_res_api);
 		// 只发短信,将发短信信息组装好
 		SmsRequestTemplate smsRequestTemplate
-			= noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true,adCode);
+			= noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true,adCode,uuid);
 		smsRequestTemplate.setIsSendStation(isSendStation);
 
 		// 拼接后面内容
@@ -137,7 +137,7 @@
 		JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_des_rz_warn_api);
 		// 只发短信,将发短信信息组装好
 		SmsRequestTemplate smsRequestTemplate
-			= noticeHandle.getSendSmsTemplate(ztData, templateId, alarmRule, ZtApiDataColumnConstant.waterMoreDesignList, true, null);
+			= noticeHandle.getSendSmsTemplate(ztData, templateId, alarmRule, ZtApiDataColumnConstant.waterMoreDesignList, true, null,uuid);
 		// 拼接后面内容
 		if (smsRequestTemplate.getPersonVOList().size() > 0) {
 			for (List<String> list : smsRequestTemplate.getTemplateContent()) {
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 11f15b9..a8882e5 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
@@ -75,6 +75,7 @@
 	 * @param columnsList 列名集合信息
 	 * @param flag 是否包含日期
 	 * @param adCode 行政区编号
+	 * @param uuid 本次执行临时编号
 	 * @return
 	 */
 	public SmsRequestTemplate getSendSmsTemplate(JSONArray jsonArray,
@@ -82,7 +83,8 @@
 												  AlarmRule alarmRule,
 												  List<String> columnsList,
 												  Boolean flag,
-												  String adCode) {
+												  String adCode,
+												  String uuid) {
 		// 通过模板id 查询模板相关信息
 		SmsTemplate smsTemplate = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("template_id",templateId).eq("is_deleted",0));
 		if (null != smsTemplate) {
@@ -93,7 +95,7 @@
 			// 解析模板并设置 title
 			smsRequestTemplate.setTitle(FormatUtil.composeMessage(smsTemplate.getContent()));
 			// 列名数据转换
-			getColumnData(jsonArray, columnsList,smsRequestTemplate,alarmRule,flag,adCode);
+			getColumnData(jsonArray, columnsList,smsRequestTemplate,alarmRule,flag,adCode,uuid);
 			//返回
 			return smsRequestTemplate;
 		}
@@ -107,6 +109,7 @@
 	 * @param smsRequestTemplate
 	 * @param flag
 	 * @param adCode
+	 * @param uuid
 	 * @return
 	 */
 	private void getColumnData(JSONArray jsonArray,
@@ -114,59 +117,25 @@
 							   SmsRequestTemplate smsRequestTemplate,
 							   AlarmRule alarmRule,
 							   Boolean flag,
-							   String adCode) {
+							   String adCode,
+							   String uuid) {
 		List<PersonVO> personLists = new ArrayList<>();
 		List<List<String>> lists = new ArrayList<>();
+		Set<String> set = new HashSet<>();
 		for (int i = 0; i < jsonArray.size(); i++) {
 			if (null!=adCode){
 				// city_cd,county_cd 过滤数据
 				String county_cd = jsonArray.getJSONObject(i).getString("county_cd");
 				if (null!= county_cd && county_cd.equals(adCode)) {
-					jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i);
+					jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i,uuid,set);
 				}
 			}else {
-				jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i);
+				jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i,uuid,set);
 			}
 		}
 		// 设置信息
 		smsRequestTemplate.setPersonVOList(personLists);
 		smsRequestTemplate.setTemplateContent(lists);
-	}
-
-	/**
-	 * 列名数据转换-- 需合并水库名称
-	 * @param jsonArray
-	 * @param columnsList
-	 * @param smsRequestTemplate
-	 * @param flag
-	 * @param adCode
-	 * @return
-	 */
-	private void getMergeColumnData(JSONArray jsonArray,
-							   List<String> columnsList,
-							   SmsRequestTemplate smsRequestTemplate,
-							   AlarmRule alarmRule,
-							   Boolean flag,
-							   String adCode) {
-		Set<String> resCdSet = new HashSet<>();
-		for (int i = 0; i < jsonArray.size(); i++) {
-			String res_cd = jsonArray.getJSONObject(i).getString("res_cd");
-			resCdSet.add(res_cd);
-		}
-		// 查询对应的人员
-		getPersonListByResList(resCdSet,alarmRule);
-		// 设置信息
-//		smsRequestTemplate.setPersonVOList(personLists);
-//		smsRequestTemplate.setTemplateContent(lists);
-	}
-
-	/**
-	 * 查询对应的用户及水库信息
-	 * @param resCdSet
-	 * @param alarmRule
-	 */
-	private void getPersonListByResList(Set<String> resCdSet, AlarmRule alarmRule) {
-		// 查询对应的用户及水库信息
 	}
 
 	/**
@@ -180,27 +149,40 @@
 	 * @param i
 	 * @return
 	 */
-	private void jointData(JSONArray jsonArray, List<String> columnsList, AlarmRule alarmRule, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i) {
+	private void jointData(JSONArray jsonArray,
+						   List<String> columnsList,
+						   AlarmRule alarmRule,
+						   Boolean flag,
+						   List<PersonVO> personLists,
+						   List<List<String>> lists,
+						   int i,
+						   String uuid,
+						   Set<String> set) {
 		// 根据水库编号,所在区域查询需要发送的人员手机号及设置
 		String res_cd = jsonArray.getJSONObject(i).getString("res_cd");
-		// 取出测站编码
-		String stcd = jsonArray.getJSONObject(i).getString("stcd");
-		// 判断时间是否存在
-		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;
+		String tempStr = uuid + res_cd;
+		// 去重水库操作,如果有重复的水库则不操作
+		if (!set.contains(tempStr)) {
+			set.add(tempStr);
+			// 取出测站编码
+			String stcd = jsonArray.getJSONObject(i).getString("stcd");
+			// 判断时间是否存在
+			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;
+			}
+			// 获取告警人员信息
+			getAlarmPersonList(jsonArray, columnsList, alarmRule, flag, personLists, lists, i, res_cd, day, hour, minute, stcd);
 		}
-		// 获取告警人员信息
-		getAlarmPersonList(jsonArray, columnsList, alarmRule, flag, personLists, lists, i, res_cd, day, hour, minute,stcd);
 	}
 
 	/**
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 cd01956..06b2e02 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
@@ -80,7 +80,8 @@
 	 */
 	public String waterInfoNotHandle(String arg1, String arg2) {
 		String templateId = "2431012216668";
-		String adCode = "421303000000";
+//		String adCode = "421181000000";
+		String adCode = null;
 		String uuid = templateId + UUID.randomUUID().toString();
 		// 查询当前策略对应的告警规则信息
 		AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
@@ -108,7 +109,7 @@
 			JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
 			// 只发短信,将发短信信息组装好
 			SmsRequestTemplate smsRequestTemplate
-				= noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false,null);
+				= noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false,null,uuid);
 			// 拼接后面内容
 			for (List<String> list : smsRequestTemplate.getTemplateContent()) {
 				// 保存告警记录信息
@@ -140,7 +141,7 @@
 			// 调用中台服务接口查询数据
 			JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
 			// 只发短信,将发短信信息组装好
-			SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
+			SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null,uuid);
 			// 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
 			// 遍历,拼接县水利部人员电话
 			for (List<String> list : smsRequestTemplate.getTemplateContent()) {
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java
index 917994c..d05baee 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java
@@ -211,4 +211,15 @@
 		// 导入并返回
 		return R.data(smsService.importSendRainSms(list,startTime,endTime));
 	}
+
+	/**
+	 * 批量发送短信(集合数据)
+	 * @param map (保护参数 1:短信模板id  2:数据集合 list<Map<String,Object>>)
+	 * @return
+	 */
+	@PostMapping("/batch-send-sms")
+	public R batchSendSms(@RequestBody Map<String,Object> map){
+		// 导入并返回
+		return R.data(smsService.batchSendSms(map));
+	}
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java
index 26871d2..a21a3e2 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java
@@ -98,4 +98,11 @@
 	 * @param smsRequestTemplate
 	 */
 	void sendMergeSignMsg(SmsRequestTemplate smsRequestTemplate);
+
+	/**
+	 * 批量发送短信(集合数据)
+	 * @param map (保护参数 1:短信模板id  2:数据集合 list<Map<String,Object>>)
+	 * @return
+	 */
+    Object batchSendSms(Map<String, Object> map);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
index c8a7038..83e5087 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -779,19 +779,13 @@
 		Map<String, List<Temp>> listMap = tempList.stream().collect(Collectors.groupingBy(Temp::getPhone));
 		// 遍历 map 发送短信
 		listMap.forEach((s, temps) -> {
-
-			List<AlarmRecordDetailVO> alarmRecordDetailList = new ArrayList<>();
 			StringBuilder builder = new StringBuilder();
 			StringBuilder smsRecordBuilder = new StringBuilder();
 			builder.append(s).append(",");
-			// 水库去重
-//			List<Temp> tempListNew = temps.stream().collect(
-//				Collectors.collectingAndThen(
-//					Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Temp::getReservoirCode))), ArrayList::new)
-//			);
 			// 如果一人对应水库数量超过30个,则分批发送
 			List<List<Temp>> lists = Lists.partition(new ArrayList<>(temps), 30);
 			for (List<Temp> list : lists) {
+				List<AlarmRecordDetailVO> alarmRecordDetailList = new ArrayList<>();
 				// 遍历
 				for (Temp temp : list) {
 					builder.append(temp.getReservoirName()).append(",");
@@ -830,17 +824,43 @@
 				SmsRecord smsRecord = saveSendRecord(request, resultComResult.getCode().toString(), resultComResult.getMsg(), smsResult.getId());
 				//保存告警记录详情信息
 				if (null != smsRecord) {
+					List<AlarmRecordDetail> alarmRecordDetailArrayList = new ArrayList<>();
 					for (AlarmRecordDetailVO alarmRecordDetail : alarmRecordDetailList) {
+						AlarmRecordDetail alarmRecordDetail1 = new AlarmRecordDetail();
 						// 短信内容拼接(完成发送的结果信息)
 						String formatContent = String.format(str, alarmRecordDetail.getReservoirName().split(","));
-						alarmRecordDetail.setAlarmContent(formatContent);
-						alarmRecordDetail.setSendRecordId(smsRecord.getId());
-						alarmRecordDetail.setCreateTime(new Date());
-						// 保存告警记录详情信息
-						boolean save = alarmRecordDetailService.save(alarmRecordDetail);
+						alarmRecordDetail1.setAlarmContent(formatContent);
+						alarmRecordDetail1.setSendRecordId(smsRecord.getId());
+						alarmRecordDetail1.setCreateTime(new Date());
+						alarmRecordDetail1.setReservoirNumber(alarmRecordDetail.getReservoirNumber());
+						alarmRecordDetail1.setAlarmRecordId(alarmRecordDetail.getAlarmRecordId());
+						alarmRecordDetail1.setAlarmMode(alarmRecordDetail.getAlarmMode());
+						alarmRecordDetail1.setPhone(alarmRecordDetail.getPhone());
+						alarmRecordDetailArrayList.add(alarmRecordDetail1);
 					}
+					// 保存告警记录详情信息
+					boolean save = alarmRecordDetailService.saveBatch(alarmRecordDetailArrayList);
 				}
 			}
 		});
 	}
+
+	/**
+	 * 批量发送短信(集合数据)
+	 * @param map (保护参数 1:短信模板id  2:数据集合 list<Map<String,Object>>)
+	 * @return
+	 */
+	@Override
+	public Object batchSendSms(Map<String, Object> map) {
+		// 获取模板id
+		String templateId = map.get("templateId").toString();
+		// 获取集合数据
+		List<Map<String,Object>> list = (List<Map<String,Object>>) map.get("list");
+		List<String> columnList = (List<String>) map.get("columnList");
+		// 遍历
+		for (Map<String, Object> param : list) {
+			// 放入集合数据
+		}
+		return null;
+	}
 }

--
Gitblit v1.9.3