From da5605b69bfc5772465e17d7166ce5bab3490e76 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Fri, 02 Jun 2023 16:16:41 +0800
Subject: [PATCH] 缺失代码补充
---
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/entity/Notice.java | 31 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/controller/NoticeTypeController.java | 28 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/controller/NoticeController.java | 34 ++
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/InStationNoticeServiceImpl.java | 24 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/SmsNoticeServiceImpl.java | 30 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/NoticeStrategyContext.java | 60 +++
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/TelNoticeServiceImpl.java | 24 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/NoticeTypeStrategyContext.java | 30 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java | 16 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java | 23 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtConfigConstant.java | 20 +
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/util/FormatUtil.java | 56 +++
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java | 462 ++++++++++++++++++++++++++++
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/PtInfoConstant.java | 15
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/INoticeService.java | 18 +
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/notice/enums/PersonEnum.java | 57 +++
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/vo/PersonVO.java | 27 +
17 files changed, 955 insertions(+), 0 deletions(-)
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/notice/enums/PersonEnum.java b/skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/notice/enums/PersonEnum.java
new file mode 100644
index 0000000..54c678b
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/notice/enums/PersonEnum.java
@@ -0,0 +1,57 @@
+package cn.gistack.alerts.notice.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 责任人枚举类
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum PersonEnum {
+
+ /**
+ * 行政责任人
+ */
+ AREA_TYPE("行政责任人",1),
+ /**
+ * 主管部门责任人
+ */
+ SUPERVISOR_TYPE("主管部门责任人",2),
+ /**
+ * 管理单位责任人
+ */
+ MANAGE_TYPE("管理单位责任人",3),
+ /**
+ * 技术责任人
+ */
+ TECHNOLOGY_TYPE("技术责任人",4),
+
+ /**
+ * 巡查责任人
+ */
+ PERSON_TYPE("巡查责任人",5),
+ ;
+
+ final String name;
+
+ final Integer type;
+
+ /**
+ * findByType
+ * @param name
+ * @return
+ */
+ public static PersonEnum findByName(String name) {
+ //循环遍历对应的 PersonEnum
+ for (PersonEnum item : values()) {
+ if(item.getName().equals(name)) {
+ return item;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/vo/PersonVO.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/vo/PersonVO.java
new file mode 100644
index 0000000..6ea54a8
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/vo/PersonVO.java
@@ -0,0 +1,27 @@
+package cn.gistack.sm.sjztmd.vo;
+
+import lombok.Data;
+
+/**
+ * 人员信息vo
+ * @author zhongrj
+ * @date 2023-05-31
+ */
+@Data
+public class PersonVO {
+
+ /**
+ * 姓名
+ */
+ private String name;
+
+ /**
+ * 角色
+ */
+ private String roleName;
+
+ /**
+ * 手机号
+ */
+ private String phone;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/PtInfoConstant.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/PtInfoConstant.java
new file mode 100644
index 0000000..f223c65
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/PtInfoConstant.java
@@ -0,0 +1,15 @@
+package cn.gistack.alerts.alarmRule.notice.constant;
+
+/**
+ * 平台服务信息常量
+ * @author zhongrj
+ * @since 2023-04-21
+ */
+public class PtInfoConstant {
+
+ /**
+ * 平台服务电话
+ */
+ public static final String serverPhone = "01234567890";
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java
new file mode 100644
index 0000000..41533c2
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java
@@ -0,0 +1,23 @@
+package cn.gistack.alerts.alarmRule.notice.constant;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 中台接口响应列常量
+ * @author zhongrj
+ * @since 2023-04-21
+ */
+public class ZtApiDataColumnConstant {
+
+
+ /**
+ * 水位数据缺失字段(不包含责任人相关信息)
+ */
+ public static List<String> waterInfoNotList = new ArrayList<String>()
+ {{
+ add("county_nm,town_nm");
+ add("res_nm");
+ }};
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java
new file mode 100644
index 0000000..7c853e1
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java
@@ -0,0 +1,16 @@
+package cn.gistack.alerts.alarmRule.notice.constant;
+
+/**
+ * 中台接口请求信息常量
+ * @author zhongrj
+ * @since 2023-04-21
+ */
+public class ZtApiUrlConstant {
+
+
+ /**
+ * 水位数据缺失
+ */
+ public static final String res_z_null_api = "http://10.42.6.192/services/1234567890ABCDEFGHIJKLMN/res/z_null";
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtConfigConstant.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtConfigConstant.java
new file mode 100644
index 0000000..a043eaa
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtConfigConstant.java
@@ -0,0 +1,20 @@
+package cn.gistack.alerts.alarmRule.notice.constant;
+
+/**
+ * 中台接口请求信息常量
+ * @author zhongrj
+ * @since 2023-04-21
+ */
+public class ZtConfigConstant {
+
+ /**
+ * 请求头 key
+ */
+ public static final String header_key = "apiKey";
+
+ /**
+ * 请求头 value
+ */
+ public static final String header_value = "F1DBECD719108635189480CF60E6553ADB3109616426BD537F25A430DFC613B491A025C4A51E77FD08C6E5B7CBE05917A461286E7B6D69F1AB1B14F946149D2065B0C675F8FEDF4B9B05C1496881BC5A";
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/controller/NoticeController.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/controller/NoticeController.java
new file mode 100644
index 0000000..e5e5d00
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/controller/NoticeController.java
@@ -0,0 +1,34 @@
+package cn.gistack.alerts.notice.controller;
+
+import cn.gistack.alerts.notice.strategy.NoticeStrategyContext;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 通知信息控制层
+ * @author zhongrj
+ * @date 2023-05-29
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/notice/notice")
+public class NoticeController {
+
+ private final NoticeStrategyContext applicationContext;
+
+ /**
+ * 调用任务通知
+ * @param type 策略分类
+ * @param name 任务名称
+ * @param content 内容(可以不传)
+ * @return
+ */
+ @GetMapping("/toNotice")
+ public Object toNotice(String type,String name,String content){
+ return applicationContext.doSomethingByStrategy(name, content, type);
+ }
+
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/controller/NoticeTypeController.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/controller/NoticeTypeController.java
new file mode 100644
index 0000000..5c1e50c
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/controller/NoticeTypeController.java
@@ -0,0 +1,28 @@
+package cn.gistack.alerts.notice.controller;
+
+import cn.gistack.alerts.notice.entity.Notice;
+import cn.gistack.alerts.notice.strategy.NoticeTypeStrategyContext;
+import cn.gistack.alerts.notice.strategy.service.INoticeService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 通知信息控制层
+ * @author zhongrj
+ * @date 2023-05-29
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/noticeType/noticeType")
+public class NoticeTypeController {
+
+ private final NoticeTypeStrategyContext applicationContext;
+
+ @GetMapping("/toNotice")
+ public Object toNotice(Notice notice){
+ INoticeService noticeService = applicationContext.getResource(notice);
+ return noticeService.toNotice(notice);
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/entity/Notice.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/entity/Notice.java
new file mode 100644
index 0000000..fe9fbe4
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/entity/Notice.java
@@ -0,0 +1,31 @@
+package cn.gistack.alerts.notice.entity;
+
+import cn.gistack.alerts.sms.entity.SmsTemplate;
+import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 通知类
+ * @author zhongrj
+ * @date 2023-05-29
+ */
+@Data
+public class Notice implements Serializable {
+
+ /**
+ * 通知类型
+ */
+ private String type;
+
+ /**
+ * 通知内容
+ */
+ private String content;
+
+ /**
+ * 短信通知发送模板
+ */
+ private SmsRequestTemplate smsRequestTemplate;
+}
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
new file mode 100644
index 0000000..1e97ecc
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -0,0 +1,462 @@
+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.alarmRule.service.AlarmRecordService;
+import cn.gistack.alerts.alarmRule.service.AlarmRuleService;
+import cn.gistack.alerts.sms.service.ISmsTemplateService;
+import cn.gistack.sm.intelligentCall.constant.ZtConstant;
+import cn.gistack.alerts.alarmRule.notice.constant.PtInfoConstant;
+import cn.gistack.alerts.alarmRule.notice.constant.ZtApiDataColumnConstant;
+import cn.gistack.alerts.alarmRule.notice.constant.ZtApiUrlConstant;
+import cn.gistack.alerts.notice.enums.PersonEnum;
+import cn.gistack.alerts.notice.util.FormatUtil;
+import cn.gistack.sm.sjztmd.vo.PersonVO;
+import cn.gistack.sm.sjztmd.feign.IAttResManagePersonClient;
+import cn.gistack.alerts.sms.entity.SmsTemplate;
+import cn.gistack.alerts.sms.service.SmsService;
+import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
+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.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;
+
+/**
+ * 通知策略
+ *
+ * @author zhongrj
+ * @date 2023-05-30
+ */
+@Component
+public class NoticeStrategyImpl {
+
+ @Autowired
+ private SmsService smsService;
+
+ @Autowired
+ private AlarmRuleService alarmRuleService;
+
+ @Autowired
+ private AlarmRecordService alarmRecordService;
+
+ @Autowired
+ private ISmsTemplateService smsTemplateService;
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Autowired
+ private IAttResManagePersonClient attResManagePersonClient;
+
+
+ /**
+ * 短信发送数据组装
+ *
+ * @param jsonArray
+ * @param templateId
+ * @param columnsList 列名集合信息
+ * @return
+ */
+ private SmsRequestTemplate getSendSmsTemplate(JSONArray jsonArray, String templateId,AlarmRule alarmRule,List<String> columnsList) {
+ // 通过模板id 查询模板相关信息
+ SmsTemplate smsTemplate = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("template_id",templateId).eq("is_deleted",0));
+ if (null != smsTemplate) {
+ SmsRequestTemplate smsRequestTemplate = new SmsRequestTemplate();
+ // 设置短信模板信息
+ smsRequestTemplate.setSmsTemplate(smsTemplate);
+ // 解析模板并设置 title
+ smsRequestTemplate.setTitle(FormatUtil.composeMessage(smsTemplate.getContent()));
+ getColumnData(jsonArray, columnsList,smsRequestTemplate,templateId,alarmRule);
+ //返回
+ return smsRequestTemplate;
+ }
+ return null;
+ }
+
+ /**
+ * 列名数据转换
+ * @param jsonArray
+ * @param columnsList
+ * @param smsRequestTemplate
+ * @param templateId
+ * @return
+ */
+ private void getColumnData(JSONArray jsonArray,
+ List<String> columnsList,
+ SmsRequestTemplate smsRequestTemplate,
+ String templateId,
+ AlarmRule alarmRule) {
+ 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");
+ // 查询告警人员信息
+ List<PersonVO> personVOList = getPersonListByResGuid(res_cd,templateId,alarmRule);
+ if (personVOList.size() > 0) {
+ for (PersonVO personVO : personVOList) {
+ List<String> list = new ArrayList<>();
+ list.add(res_cd);
+ list.add(personVO.getPhone());
+ // 变量将值放入集合中
+ 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);
+ }
+ // 设置信息
+ smsRequestTemplate.setPersonVOList(personLists);
+ smsRequestTemplate.setTemplateContent(lists);
+ }
+
+ /**
+ * 保存告警记录信息
+ * @param list
+ * @param alarmRule 告警规则
+ * @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){
+ return alarmRecord;
+ }
+ // 返回
+ return null;
+ }
+
+ /**
+ * 查询告警人员信息
+ * @param res_cd 水库 guid
+ * @param templateId
+ * @param alarmRule
+ * @return
+ */
+ private List<PersonVO> getPersonListByResGuid(String res_cd,String templateId,AlarmRule alarmRule) {
+ // 查询对应的角色信息
+ String roles = alarmRule.getAlarmPerson();
+ String[] roleArray = roles.split(",");
+ List<String> personList = new ArrayList<>();
+ List<String> areaList = new ArrayList<>();
+ // 遍历
+ for (String role : roleArray) {
+ if (role.contains("责任人")){
+ personList.add(PersonEnum.findByName(role).getType().toString());
+ }else {
+ areaList.add(role);
+ }
+ }
+ // 根据角色,水库编号查询对应的告警人员信息
+ //1. 根据水库编号查询除责任人之外的人员信息
+ List<PersonVO> personVOList = attResManagePersonClient.getUserListByResGuid(res_cd);
+ //2. 根据水库编号及责任人类型查询相关责任人信息
+ List<PersonVO> personVOList1 = attResManagePersonClient.getPersonListByResGuid(res_cd,String.join(",",personList));
+ // 合并人员数据
+ personVOList.addAll(personVOList1);
+ // 返回数据
+ return personVOList;
+ }
+
+ /**
+ * 默认实现
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String doSomethingDefault(String arg1, String arg2) {
+ // 默认业务逻辑处理...
+ return "默认实现";
+ }
+
+ /**
+ * 策略1: 水位信息接收不到
+ *
+ * @param arg1 告警规则名称
+ * @param arg2
+ * @return
+ */
+ public String waterInfoNotHandle(String arg1, String arg2) {
+ // 查询当前策略对应的告警规则信息
+ 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);
+ // 拼接内容后面的联系方式,当前模板拼接平台服务电话
+ // 遍历,拼接平台服务电话
+ for (List<String> list : smsRequestTemplate.getTemplateContent()) {
+ // 添加平台电话
+ list.add(PtInfoConstant.serverPhone);
+ // 保存告警记录信息
+// AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
+// if (null != alarmRecord) {
+// list.add(alarmRecord.getId().toString());
+ list.add("1123");
+// }
+ }
+ // 调用短信服务
+ smsService.sendSignMsg(smsRequestTemplate);
+ }
+ // 保存预警记录
+ return "水位信息接收不到";
+ }
+
+ /**
+ * 策略2: 水位数据异常
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterDataExcHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "水位数据异常";
+ }
+
+ /**
+ * 策略3: 水位超低于死水位
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterLessDeadHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略4: 水位高于死水位,低于旱警水位
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterMoreDeadLessHJHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略5: 水位接近汛限告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterComeOverHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略6: 水位初次超汛限告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterFirstOverHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略7: 水位小幅超汛限告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterSmallScaleOverHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略8: 水位大幅超汛限告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterBigScaleOverHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略9: 水位接近设计洪水位告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterComeDesignHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略10: 水位超设计洪水位告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterMoreDesignHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略11: 水位超校核洪水位告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterMoreCheckHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略12: 近1h水位陡升
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterComeOneHourUpHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略13: 近1h水位陡降
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String waterComeOneHourDownHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略14: 暴雨降雨预警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String rainstormHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略15: 已降大雨告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String alreadyHeavyRainHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略16: 已降暴雨告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String alreadyRainstormHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略17: 2小时降雨告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String twoHourRainHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 策略18: 6小时降雨告警
+ *
+ * @param arg1
+ * @param arg2
+ * @return
+ */
+ public String sixHourRainHandle(String arg1, String arg2) {
+ // 业务逻辑处理 2...
+ return "";
+ }
+
+ /**
+ * 调用中台接口查询数据
+ *
+ * @param params
+ * @param url
+ * @return
+ */
+ private JSONArray getZtData(String params, String url) {
+ //设置请求头
+ HttpHeaders headers = new HttpHeaders();
+ headers.add(ZtConstant.header_key, ZtConstant.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());
+ JSONArray jsonArray = JSONArray.parseArray(jsonObject.get("data").toString());
+ // 返回
+ return jsonArray;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/NoticeStrategyContext.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/NoticeStrategyContext.java
new file mode 100644
index 0000000..178823a
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/NoticeStrategyContext.java
@@ -0,0 +1,60 @@
+package cn.gistack.alerts.notice.strategy;
+
+import cn.gistack.alerts.notice.service.impl.NoticeStrategyImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.BiFunction;
+
+/**
+ * 通知方式策略
+ * @author zhongrj
+ * @date 2023-05-29
+ *
+ */
+@Service
+@Slf4j
+public class NoticeStrategyContext {
+
+ /**
+ * 存放所有策略.
+ */
+ private Map<String, BiFunction<String, String, String>> strategyMap = new HashMap<>(18);
+
+ /**
+ * 具体的策略细节.
+ */
+ @Autowired
+ private NoticeStrategyImpl noticeStrategyImpl;
+
+ /**
+ * 加载所有策略
+ */
+ @PostConstruct
+ public void initStrategies() {
+ strategyMap.put("waterInfoNotHandle", (arg1, arg2) -> noticeStrategyImpl.waterInfoNotHandle(arg1, arg2));
+ strategyMap.put("waterDataExcHandle", (arg1, arg2) -> noticeStrategyImpl.waterDataExcHandle(arg1, arg2));
+ }
+
+ /**
+ * 指派具体的策略去执行.
+ *
+ * @param arg1 参数1
+ * @param arg2 参数2
+ * @param key 根据key 来获取不同的策略
+ * @return
+ */
+ public String doSomethingByStrategy(String arg1, String arg2, String key) {
+ BiFunction<String, String, String> biFunction = strategyMap.get(key);
+ if (Objects.isNull(biFunction)) {
+ // 没有找到特定的策略,则采用默认实现(一般只有加了新的类型,但是没有配置对应的处理策略才会走到这里)
+ log.warn("========= 没有配置该处理策略,采用默认实现,key {} ====== " + key);
+ return noticeStrategyImpl.doSomethingDefault(arg1, arg2);
+ }
+ return biFunction.apply(arg1, arg2);
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/NoticeTypeStrategyContext.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/NoticeTypeStrategyContext.java
new file mode 100644
index 0000000..f232bb8
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/NoticeTypeStrategyContext.java
@@ -0,0 +1,30 @@
+package cn.gistack.alerts.notice.strategy;
+
+import cn.gistack.alerts.notice.entity.Notice;
+import cn.gistack.alerts.notice.strategy.service.INoticeService;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 通知策略
+ * @author zhongrj
+ * @date 2023-05-30
+ * @Description : 利用Spring的发现机制,将实现了NoticeStrategyService的类都put到noticeStrategyMap里面。
+ * 后面只需要根据type对应好 各个实现类的注解 如: @Component("tel") 就可以取出不同的业务实现类
+ */
+@Service
+public class NoticeTypeStrategyContext {
+
+ private final Map<String, INoticeService> noticeStrategyMap = new ConcurrentHashMap<>();
+
+ public NoticeTypeStrategyContext(Map<String, INoticeService> strategyMap) {
+ this.noticeStrategyMap.clear();
+ strategyMap.forEach((k, v)-> this.noticeStrategyMap.put(k, v));
+ }
+
+ public INoticeService getResource(Notice notice){
+ return noticeStrategyMap.get(notice.getType());
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/INoticeService.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/INoticeService.java
new file mode 100644
index 0000000..a37550a
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/INoticeService.java
@@ -0,0 +1,18 @@
+package cn.gistack.alerts.notice.strategy.service;
+
+import cn.gistack.alerts.notice.entity.Notice;
+
+/**
+ * 通知策略接口
+ * @author zhongrj
+ * @date 2023-05-29
+ */
+public interface INoticeService {
+
+ /**
+ * 通知接口
+ * @param notice
+ * @return
+ */
+ Object toNotice(Notice notice);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/InStationNoticeServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/InStationNoticeServiceImpl.java
new file mode 100644
index 0000000..976115a
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/InStationNoticeServiceImpl.java
@@ -0,0 +1,24 @@
+package cn.gistack.alerts.notice.strategy.service.impl;
+
+import cn.gistack.alerts.notice.entity.Notice;
+import cn.gistack.alerts.notice.strategy.service.INoticeService;
+import org.springframework.stereotype.Component;
+
+/**
+ * 站内信通知
+ * @author zhongrj
+ * @date 2023-05-29
+ */
+@Component("inStation")
+public class InStationNoticeServiceImpl implements INoticeService {
+
+ /**
+ * 站内信通知实现
+ * @param notice
+ * @return
+ */
+ @Override
+ public Object toNotice(Notice notice) {
+ return "inStation";
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/SmsNoticeServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/SmsNoticeServiceImpl.java
new file mode 100644
index 0000000..7feb9a8
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/SmsNoticeServiceImpl.java
@@ -0,0 +1,30 @@
+package cn.gistack.alerts.notice.strategy.service.impl;
+
+import cn.gistack.alerts.notice.entity.Notice;
+import cn.gistack.alerts.notice.strategy.service.INoticeService;
+import cn.gistack.alerts.sms.service.SmsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 短信通知
+ * @author zhongrj
+ * @date 2023-05-29
+ */
+@Component("sms")
+public class SmsNoticeServiceImpl implements INoticeService {
+
+ @Autowired
+ private SmsService smsService;
+
+ /**
+ * 短信通知实现
+ * @param notice
+ * @return
+ */
+ @Override
+ public Object toNotice(Notice notice) {
+ // 短信发送
+ return smsService.sendSignMsg(notice.getSmsRequestTemplate());
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/TelNoticeServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/TelNoticeServiceImpl.java
new file mode 100644
index 0000000..3051ad6
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/strategy/service/impl/TelNoticeServiceImpl.java
@@ -0,0 +1,24 @@
+package cn.gistack.alerts.notice.strategy.service.impl;
+
+import cn.gistack.alerts.notice.entity.Notice;
+import cn.gistack.alerts.notice.strategy.service.INoticeService;
+import org.springframework.stereotype.Component;
+
+/**
+ * 电话通知
+ * @author zhongrj
+ * @date 2023-05-29
+ */
+@Component("tel")
+public class TelNoticeServiceImpl implements INoticeService {
+
+ /**
+ * 电话通知实现
+ * @param notice
+ * @return
+ */
+ @Override
+ public Object toNotice(Notice notice) {
+ return "tel";
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/util/FormatUtil.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/util/FormatUtil.java
new file mode 100644
index 0000000..380cf10
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/util/FormatUtil.java
@@ -0,0 +1,56 @@
+package cn.gistack.alerts.notice.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 格式化转换工具
+ * @author zhongrj
+ * @date 2023-05-31
+ */
+public class FormatUtil {
+
+ /**
+ * 取出{}中的内容
+ * @param content
+ * @return
+ */
+ public static String composeMessage(String content){
+ // 正则 ,匹配 {}及内所有内容
+ String regex = "\\{.+?\\}";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(content);
+ List<String> list = new ArrayList<>();
+ list.add("手机号码");
+ while (matcher.find()) {
+ // 键名
+ String key = matcher.group();
+ // 去除首尾大括号
+ String title = key.substring(1,key.length()-1).split(",")[0];
+ // 放入集合
+ list.add(title);
+ }
+ // 转换为以逗号分隔的字符串
+ return String.join(",",list);
+ }
+
+
+
+// public static void main(String[] args) {
+// String data = "黄色预警:{日期,2}日{小时,2}时{分钟,2}分,{乡镇,10}乡镇{村,10}村{水库名称,25}水位{水库水位值,6}米过去一小时陡降{水位降值,6}米。过去24小时坝前点雨量{雨量值,6}毫米。请巡查责任人{姓名,4}做好巡查值守,发现险情及时上报;请技术责任人{姓名,4}密切关注。如为数据误报,请及时联系市县水利部门人员{姓名联系电话,16}(电话号码)。";
+// String message = composeMessage(data);
+// System.out.println("message = " + message);
+//
+// String s = "黄色预警:{日期,2}{小时,2}{分钟,2}分数据误报,";
+// String s1 = s.replaceAll("\\{.+?\\}", "%s");
+// System.out.println(s1);
+//
+// String s2 = "1,2,3";
+//
+//
+// String format = String.format(s1, Arrays.asList(s2.split(",")));
+// System.out.println("format = " + format);
+// }
+}
--
Gitblit v1.9.3