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