zhongrj
2023-07-05 2a8f13fe78fbf4b74bd93bd43ae7b7e3e9211e79
超设计告警修改为异步执行,暂时解决超时任务重试问题
3 files modified
1 files added
195 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java 63 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 53 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 77 ●●●● patch | view | raw | blame | history
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);
            // 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
@@ -173,6 +173,8 @@
        // 返回
        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);
            // 异步处理,暂时解决超时重置问题
            Map<String, Object> map = asyncNoticeHandle.handleAlarmInfo(templateId, uuid, alarmRule);
                // 返回
                return "本次-水位初次超汛限告警短信成功通知数量:" + map.get("smsRecord");
            }
            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;
    }
}