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} skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
New file @@ -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; } } 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; } } 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; } }