zrj
2024-07-11 6e4c8d00a3e745fdb910c2325840e3b88f634d21
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -1,35 +1,23 @@
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.entity.AlarmRuleDetail;
import cn.gistack.alerts.alarmRule.service.AlarmRuleDetailService;
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.notice.constant.PtInfoConstant;
import cn.gistack.alerts.notice.constant.ZtApiDataColumnConstant;
import cn.gistack.alerts.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 cn.gistack.resource.feign.ITextualResearchAttachClient;
import cn.gistack.resource.vo.AlertTextualResearchAttachVO;
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.springblade.core.tool.utils.StringUtil;
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;
import java.util.UUID;
/**
 * 通知策略
@@ -41,173 +29,20 @@
public class NoticeStrategyImpl {
   @Autowired
   private SmsService smsService;
   @Autowired
   private AlarmRuleService alarmRuleService;
   @Autowired
   private AlarmRecordService alarmRecordService;
   private AlarmRuleDetailService alarmRuleDetailService;
   @Autowired
   private ISmsTemplateService smsTemplateService;
   private NoticeHandle noticeHandle;
   @Autowired
   private RestTemplate restTemplate;
   private AsyncNoticeHandle asyncNoticeHandle;
   @Autowired
   private IAttResManagePersonClient attResManagePersonClient;
   private ITextualResearchAttachClient textualResearchAttachClient;
   /**
    * 短信发送数据组装
    *
    * @param jsonArray
    * @param templateId
    * @param alarmRule
    * @param columnsList 列名集合信息
    * @param flag
    * @return
    */
   private SmsRequestTemplate getSendSmsTemplate(JSONArray jsonArray,
                                      String templateId,
                                      AlarmRule alarmRule,
                                      List<String> columnsList,
                                      Boolean flag) {
      // 通过模板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,alarmRule,flag);
         //返回
         return smsRequestTemplate;
      }
      return null;
   }
   /**
    * 列名数据转换
    * @param jsonArray
    * @param columnsList
    * @param smsRequestTemplate
    * @param flag
    * @return
    */
   private void getColumnData(JSONArray jsonArray,
                        List<String> columnsList,
                        SmsRequestTemplate smsRequestTemplate,
                        AlarmRule alarmRule,
                        Boolean flag) {
      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");
         // 判断时间是否存在
         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;
         }
         // 查询告警人员信息
         List<PersonVO> personVOList = getPersonListByResGuid(res_cd,alarmRule);
         if (personVOList.size() > 0) {
            for (PersonVO personVO : personVOList) {
               List<String> list = new ArrayList<>();
               list.add(res_cd);
               list.add(personVO.getPhone());
               if (flag) {
                  list.add(day);
                  list.add(hour);
                  list.add(minute);
               }
               // 变量将值放入集合中
               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 alarmRule
    * @return
    */
   private List<PersonVO> getPersonListByResGuid(String res_cd,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);
         }
      }
      // 根据角色,水库编号查询对应的告警人员信息
      List<PersonVO> list = new ArrayList<>();
      //1. 根据水库编号查询除责任人之外的人员信息
      if (areaList.size() > 0) {
         List<PersonVO> personVOList = attResManagePersonClient.getUserListByResGuid(res_cd);
         list.addAll(personVOList);
      }
      //2. 根据水库编号及责任人类型查询相关责任人信息
      List<PersonVO> personVOList1 = attResManagePersonClient.getPersonListByResGuid(res_cd,String.join(",",personList));
      // 合并人员数据
      list.addAll(personVOList1);
      // 返回数据
      return list;
   }
   /**
    * 默认实现
@@ -229,26 +64,24 @@
    * @return
    */
   public String waterInfoNotHandle(String arg1, String arg2) {
      //String adCode = "421181000000";
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      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,false);
         // 拼接内容后面的联系方式,当前模板拼接平台服务电话
         // 遍历,拼接平台服务电话
         for (List<String> list : smsRequestTemplate.getTemplateContent()) {
            // 添加平台电话
            list.add(PtInfoConstant.serverPhone);
            // 保存告警记录信息
            AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
            if (null != alarmRecord) {
               list.add(alarmRecord.getId().toString());
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.no_z_last_api_all);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterInfoNotHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterInfoNotList, false, adCode, false);
               }
            }
         }
         // 调用短信服务
         smsService.sendSignMsg(smsRequestTemplate);
      }
      // 返回
      return "水位信息接收不到";
@@ -262,24 +95,24 @@
    * @return
    */
   public String waterDataExcHandle(String arg1, String arg2) {
      //String adCode = "421181000000";
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      if (null!=alarmRule) {
         // 调用中台服务接口查询数据
         JSONArray ztData = getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
         // 只发短信,将发短信信息组装好
         SmsRequestTemplate smsRequestTemplate
            = getSendSmsTemplate(ztData, "2431012248591",alarmRule, ZtApiDataColumnConstant.waterDataExcList,false);
         // 拼接后面内容
         for (List<String> list : smsRequestTemplate.getTemplateContent()) {
            // 保存告警记录信息
            AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
            if (null != alarmRecord) {
               list.add(alarmRecord.getId().toString());
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterInfoNotHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterDataExcList, false, adCode, false);
               }
            }
         }
         // 调用短信服务
         smsService.sendSignMsg(smsRequestTemplate);
      }
      // 返回
      return "水位数据异常";
@@ -293,30 +126,29 @@
    * @return
    */
   public String waterLessDeadHandle(String arg1, String arg2) {
      String adCode = "420881000000";
//      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      if (null!=alarmRule) {
         // 调用中台服务接口查询数据
         JSONArray ztData = getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
         // 只发短信,将发短信信息组装好
         SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, "2431012248594",alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true);
         // 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
         // 遍历,拼接县水利部人员电话
         for (List<String> list : smsRequestTemplate.getTemplateContent()) {
            // 查询县水利部人员(通过水库编号)
//            list.add("测试:13112341234");
            // 保存告警记录信息
            AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
            if (null != alarmRecord) {
               list.add(alarmRecord.getId().toString());
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterLessDeadHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterLessDeadList, true, adCode, false);
               }
            }
         }
         // 调用短信服务
         smsService.sendSignMsg(smsRequestTemplate);
      }
      // 返回
      return "水位超低于死水位";
   }
   /**
    * 策略4: 水位高于死水位,低于旱警水位
@@ -331,66 +163,68 @@
   }
   /**
    * 策略5: 水位接近汛限告警
    * 策略5: 水位接近汛限告警(站内信)
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String waterComeOverHandle(String arg1, String arg2) {
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      if (null!=alarmRule) {
         // 调用中台服务接口查询数据
         JSONArray ztData = getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
         // 只发送站内信
         SmsRequestTemplate smsRequestTemplate = getSendSmsTemplate(ztData, "znxsw10000001",alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true);
         // 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
         // 遍历,拼接县水利部人员电话
         for (List<String> list : smsRequestTemplate.getTemplateContent()) {
            // 后面依次拼接 巡查责任人姓名,技术责任人姓名,市县水利部门人员姓名电话(暂时不要)
            // 查询巡查责任人姓名,技术责任人姓名信息
            List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(0),"4,5");
            String xczrr = "";
            String jszrr = "";
            for (PersonVO personVO : personVOList) {
               if (personVO.getType().equals("5")){
                  xczrr = personVO.getName();
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_is_warn_over_flse_api);
      //过滤不告警水库
      JSONArray resultData = filterNoAlertRes(ztData, arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.waterComeOverHandle(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.waterComeOverList, true, adCode, true);
               }
               if (personVO.getType().equals("4")){
                  jszrr = personVO.getName();
               }
            }
            // 巡查责任人姓名
            list.add(xczrr);
            // 技术责任人姓名
            list.add(jszrr);
            // 市县水利部门人员姓名电话(暂时不要)
//            list.add("测试:13112341234");
            // 保存告警记录信息
            AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
            if (null != alarmRecord) {
               list.add(alarmRecord.getId().toString());
//               list.add("999");
            }
         }
         // 保存站内信记录信息
         smsService.saveInStationInfo(smsRequestTemplate);
      }
      return "水位接近汛限告警";
   }
   /**
    * 策略6: 水位初次超汛限告警
    * 策略6: 水位初次超汛限告警(当前测试发送站内信)
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String waterFirstOverHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      String adCode = "421303000000";
//      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_z_res_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterFirstOverHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterFirstOverList, true, adCode, true);
               }
            }
         }
      }
      // 返回
      return "水位初次超汛限告警";
   }
   /**
    * 策略7: 水位小幅超汛限告警
@@ -400,8 +234,63 @@
    * @return
    */
   public String waterSmallScaleOverHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
//      String adCode = "421303000000";
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_over_z_small_over_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            if (alarmRuleDetailList.get(0).getAlarmMode().equals("短信")) {
               asyncNoticeHandle.waterSmallScaleOverHandle1(alarmRule, alarmRuleDetailList.get(0), ztData, ZtApiDataColumnConstant.waterSmallScaleOverList, true, adCode, false, uuid);
            }
            if (alarmRuleDetailList.get(1).getAlarmMode().equals("短信")) {
               asyncNoticeHandle.waterSmallScaleOverHandle2(alarmRule, alarmRuleDetailList.get(1), ztData, ZtApiDataColumnConstant.waterSmallScaleOverList, true, adCode, false, uuid);
            }
         }
      }
      // 返回
      return "水位小幅超汛限告警";
   }
   /**
    * 策略7.1: 水位小幅超汛限告警2--水位高于汛限水位20cm
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String waterSmallScaleOver20Handle(String arg1, String arg2) {
//      String adCode = "421303000000";
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("?diff_value=0.2", ZtApiUrlConstant.res_over_z_small_over_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            if (alarmRuleDetailList.get(0).getAlarmMode().equals("短信")) {
               asyncNoticeHandle.waterSmallScaleOverHandle1(alarmRule, alarmRuleDetailList.get(0), ztData, ZtApiDataColumnConstant.waterSmallScaleOverList, true, adCode, false, uuid);
            }
            if (alarmRuleDetailList.get(1).getAlarmMode().equals("短信")) {
               asyncNoticeHandle.waterSmallScaleOverHandle2(alarmRule, alarmRuleDetailList.get(1), ztData, ZtApiDataColumnConstant.waterSmallScaleOverList, true, adCode, false, uuid);
            }
         }
      }
      // 返回
      return "水位小幅超汛限告警";
   }
   /**
@@ -412,8 +301,29 @@
    * @return
    */
   public String waterBigScaleOverHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      //String adCode = "421303000000";
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_over_z_big_over_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            if (alarmRuleDetailList.get(0).getAlarmMode().equals("短信")) {
               asyncNoticeHandle.waterBigScaleOverHandle1(alarmRule, alarmRuleDetailList.get(0), ztData, ZtApiDataColumnConstant.waterBigScaleOverList1, true, adCode, false, uuid);
            }
            if (alarmRuleDetailList.get(1).getAlarmMode().equals("短信")) {
               asyncNoticeHandle.waterBigScaleOverHandle2(alarmRule, alarmRuleDetailList.get(1), ztData, ZtApiDataColumnConstant.waterBigScaleOverList2, true, adCode, false, uuid);
            }
         }
      }
      // 返回
      return "水位大幅超汛限告警";
   }
   /**
@@ -424,8 +334,35 @@
    * @return
    */
   public String waterComeDesignHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_over_des_is_warn_api);
      //过滤不告警水库
      JSONArray resultData = filterNoAlertRes(ztData, arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterComeDesignHandleBySms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.waterComeDesignList1, true, adCode, false, uuid);
               }
//               if (alarmRuleDetail.getAlarmMode().equals("电话")) {
//                  asyncNoticeHandle.outCallHandleCall(alarmRule, alarmRuleDetail, ztData,ZtApiDataColumnConstant.waterComeDesignList2,true, adCode, false,uuid);
//               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.waterComeDesignHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.waterComeDesignList3, true, adCode, true, uuid);
               }
            }
         }
      }
      return "水位接近设计洪水位告警";
   }
   /**
@@ -436,8 +373,30 @@
    * @return
    */
   public String waterMoreDesignHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("?is_show=1", ZtApiUrlConstant.over_des_rz_warn_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterMoreDesignHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterMoreDesignList, true, adCode, false, uuid);
               }
//               if (alarmRuleDetail.getAlarmMode().equals("电话")) {
//                  asyncNoticeHandle.outCallHandleCall(alarmRule, alarmRuleDetail, ztData,ZtApiDataColumnConstant.waterMoreDesignList,true, adCode, false,uuid);
//               }
            }
         }
      }
      // 返回
      return "水位超设计洪水位告警";
   }
   /**
@@ -448,8 +407,30 @@
    * @return
    */
   public String waterMoreCheckHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("?is_show=1", ZtApiUrlConstant.res_over_chec_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterMoreCheckHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterMoreCheckList, true, adCode, false, uuid);
               }
//               if (alarmRuleDetail.getAlarmMode().equals("电话")) {
//                  asyncNoticeHandle.outCallHandleCall(alarmRule, alarmRuleDetail, ztData,ZtApiDataColumnConstant.waterMoreCheckList,true, adCode, false,uuid);
//               }
            }
         }
      }
      // 返回
      return "水位超校核洪水位告警";
   }
   /**
@@ -460,8 +441,27 @@
    * @return
    */
   public String waterComeOneHourUpHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_diff_up_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterComeOneHourUpHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterComeOneHourUpList, true, adCode, false, uuid);
               }
            }
         }
      }
      // 返回
      return "近1h水位陡升";
   }
   /**
@@ -472,8 +472,27 @@
    * @return
    */
   public String waterComeOneHourDownHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_diff_down_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.waterComeOneHourDownHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.waterComeOneHourDownList, true, adCode, false, uuid);
               }
            }
         }
      }
      // 返回
      return "近1h水位陡降";
   }
   /**
@@ -496,8 +515,27 @@
    * @return
    */
   public String alreadyHeavyRainHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      //String adCode = "420607000000";
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_rain_dy_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.alreadyHeavyRainHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.alreadyHeavyRainList, false, adCode, false);
               }
            }
         }
      }
      // 返回
      return "已降大雨告警";
   }
   /**
@@ -508,8 +546,27 @@
    * @return
    */
   public String alreadyRainstormHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      //String adCode = "420607000000";
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_rain_by_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.alreadyRainstormHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.alreadyRainstormList, false, adCode, false);
               }
            }
         }
      }
      // 返回
      return "已降暴雨告警";
   }
   /**
@@ -532,37 +589,1306 @@
    * @return
    */
   public String sixHourRainHandle(String arg1, String arg2) {
      // 业务逻辑处理 2...
      return "";
      //String adCode = "420607000000";
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_rain_6_over_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.sixHourRainHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.sixHourRainList, false, adCode, false, uuid);
               }
//               if (alarmRuleDetail.getAlarmMode().equals("电话")) {
//                  asyncNoticeHandle.outCallHandleCall(alarmRule, alarmRuleDetail, ztData,ZtApiDataColumnConstant.sixHourRainList,true, adCode, false,uuid);
//               }
            }
         }
      }
      // 返回
      return "6小时降雨告警";
   }
   /**
    * 调用中台接口查询数据
    * 策略18: 6小时降雨告警2
    *
    * @param params
    * @param url
    * @param arg1
    * @param arg2
    * @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();
   public String sixHourRainHandle2(String arg1, String arg2) {
      //String adCode = "420607000000";
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("?drp=50", ZtApiUrlConstant.alarm_rain_only_6_over_api);
      // 外呼对应数据
      JSONArray whztData = noticeHandle.getZtData("?drp=100", ZtApiUrlConstant.alarm_rain_only_6_over_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.sixHourRainHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.sixHourRainList, false, adCode, false, uuid);
               }
               if (alarmRuleDetail.getAlarmMode().equals("电话")) {
                  asyncNoticeHandle.outCallHandleCall(alarmRule, alarmRuleDetail, whztData,ZtApiDataColumnConstant.sixHourRainList,false, adCode, false,uuid);
               }
            }
         }
      }
      return null;
      // 返回
      return "6小时降雨告警";
   }
   /**
    * 策略19: 大坝安全监测告警-数据缺失
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetyHandle(String arg1, String arg2) {
      //String adCode = "420607000000";
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetyHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.damSafetyList, true, adCode, false, uuid,arg2);
               }
            }
         }
      }
      // 返回
      return "大坝安全监测告警";
   }
   /**
    * 策略20: 大坝安全监测告警-渗压管水位大于校核洪水位
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyHandle(String arg1, String arg2) {
      //String adCode = "420607000000";
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("?is_alarm=1", ZtApiUrlConstant.alarm_db_sy_api);
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(ztData,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyHandle(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.damSafetySyList, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      // 返回
      return "大坝安全监测告警";
   }
   /**
    * 策略21: 大坝安全监测告警-渗压数据缺失
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyNoneHandle(String arg1, String arg2) {
      //String adCode = "420607000000";
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息,根据名称获取告警信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_none_api);
      JSONArray resultData = filterNoAlertRes(ztData, arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetyHandle(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.damSafetyList, false, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyNoneHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.damSafetyList, false, adCode, true, uuid,arg2);
               }
            }
         }
      }
      // 返回
      return "大坝安全监测告警";
   }
   /**
    * 策略22: 大坝安全监测告警-渗流数据缺失
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySlNoneHandle(String arg1, String arg2) {
      //String adCode = "420607000000";
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sl_none_api);
      JSONArray resultData = filterNoAlertRes(ztData, arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetyHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.damSafetyList, false, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyNoneHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.damSafetyList, false, adCode, true, uuid,arg2);
               }
            }
         }
      }
      // 返回
      return "大坝安全监测告警";
   }
   /**
    * 策略23: 大坝安全监测告警-位移数据缺失
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetyWyNoneHandle(String arg1, String arg2) {
      //String adCode = "420607000000";
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_wy_none_api);
      JSONArray resultData = filterNoAlertRes(ztData, arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetyHandle(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.damSafetyList, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyNoneHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.damSafetyList, false, adCode, true, uuid,arg2);
               }
            }
         }
      }
      // 返回
      return "大坝安全监测告警";
   }
   /**
    * 策略24:渗压基础数据缺失
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyDataMissingHandle(String arg1, String arg2) {
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      //调用本地服务获取数据
      List<AlertTextualResearchAttachVO> syDataMissing = textualResearchAttachClient.getSyDataMissing();
      JSONArray data = JSON.parseArray(JSON.toJSONString(syDataMissing));
      JSONArray resultData = filterNoAlertRes(data, arg1);
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyDataMissingHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syDataMissingList, false, adCode, true, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("短信")){
                  asyncNoticeHandle.damSafetySyDataMissingHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syDataMissingList, false, adCode, false, uuid,arg2);
               }
            }
         }
      }
      return "大坝安全监测渗压资料缺失告警";
   }
   /**
    * 策略25:变形基础数据缺失
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetyBxDataMissingHandle(String arg1, String arg2) {
      String uuid = UUID.randomUUID().toString();
      String adCode = null;
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      //调用本地服务获取数据
      List<AlertTextualResearchAttachVO> syDataMissing = textualResearchAttachClient.getBxDataMissing();
      JSONArray data = JSON.parseArray(JSON.toJSONString(syDataMissing));
      JSONArray resultData = filterNoAlertRes(data, arg1);
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyDataMissingHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.bxDataMissingList, false, adCode, true, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("短信")){
                  asyncNoticeHandle.damSafetySyDataMissingHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.bxDataMissingList, false, adCode, false, uuid,arg2);
               }
            }
         }
      }
      return "大坝安全监测变形资料缺失告警";
   }
   /**
    * 策略26:水位低于管底高程
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyLessThenPipeHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_less_or_higher_api);
      JSONArray array = lessOrHigher(ztData, "less");
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(array,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySyLessThenPipeHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syLessThenPipe, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyLessThenPipeHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syLessThenPipe, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "水位低于管底高程告警";
   }
   /**
    * 策略27:水位高于管口高程
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyHigherThenNozzleHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_less_or_higher_api);
      JSONArray array = lessOrHigher(ztData, "higher");
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(array,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySyHigherThenNozzleHandleSms(alarmRule, alarmRuleDetail, resultData,ZtApiDataColumnConstant.syHigherThenNozzle,true, adCode, false,uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyHigherThenNozzleHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syHigherThenNozzle, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "水位高于管口高程告警";
   }
   /**
    * 策略28:水位高于坝顶高程
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyHigherThenBdElevationHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_higher_then_bdElevation_api);
      //这里需要对数据进行过滤
      JSONArray resultData1 = filterNoAlertRes(ztData,arg1);
      JSONArray resultData = setMonitorData(resultData1, "max_value");
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySyHigherThenBdElevationHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syHigherThenBdElevation, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyHigherThenBdElevationHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syHigherThenBdElevation, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "水位高于坝顶高程告警";
   }
   /**
    * 水位高于库水位告警
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyHigherThenWaterLevelHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_higher_then_water_level_api);
      //这里需要对数据进行过滤
      JSONArray resultData1 = filterNoAlertRes(ztData,arg1);
      JSONArray resultData = setMonitorData(resultData1, "max_value");
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySyHigherThenWaterLevelHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syHigherThenWaterLevel, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyHigherThenWaterLevelHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syHigherThenWaterLevel, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "水位高于库水位告警";
   }
   /**
    * 水位长期不变,五日变幅小于5cm,十日变幅大于5cm小于8cm,三十日变幅大于8cm小于10cm
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyYellowChangeHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_rz_change_api);
      JSONArray data = changeRange(ztData, "1");
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(data,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySyYellowChangeHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syYellowRzChange, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyYellowChangeHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syYellowRzChange, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "水位五日变幅小于5cm,十日变幅大于5cm小于8cm,三十日变幅大于8cm小于10cm告警";
   }
   /**
    * 渗压水位一日变幅大于0.5米小于1米,五日变幅大于1米小于2米,十日变幅大于2米小于5米,三十日变幅大于5米小于10米
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyOrangeChangeHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_rz_change_api);
      JSONArray data = changeRange(ztData, "2");
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(data,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySyOrangeChangeHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syOrangeRzChange, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyOrangeChangeHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syOrangeRzChange, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "水位一日变幅大于0.5米小于1米,五日变幅大于1米小于2米,十日变幅大于2米小于5米,三十日变幅大于5米小于10米告警";
   }
   /**
    * 渗压水位一日变幅大于1米小于2米,五日变幅大于2米小于5米,十日变幅大于5米小于10米,三十日变幅大于10米
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyRedChangeHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_rz_change_api);
      JSONArray data = changeRange(ztData, "3");
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(data,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySyRedChangeHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syRedRzChange, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyRedChangeHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syRedRzChange, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "水位一日变幅大于0.5米小于1米,五日变幅大于1米小于2米,十日变幅大于2米小于5米,三十日变幅大于5米小于10米告警";
   }
   /**
    * 近1h水位陡降
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySyRz1hChangeHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sy_rz_1h_change_api);
      // 处理数据
      JSONArray data = judgeType(ztData);
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(data,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySyRz1hChangeHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syRz1hChange, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySyRz1hChangeHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.syRz1hChange, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "近1h水位陡降告警";
   }
   /**
    * 变形值大于20mm小于50mm
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetyWyOver2Less5Handle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_wy_value_api);
      JSONArray data = judgeDirection(ztData, "1");
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(data,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetyWyOver2Less5HandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.wyOver2Less5, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetyWyOver2Less5HandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.wyOver2Less5, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "变形值大于2cm小于5cm告警";
   }
   /**
    * 变形值大于50mm小于100mm
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetyWyOver5Less10Handle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_wy_value_api);
      JSONArray data = judgeDirection(ztData, "2");
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(data,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetyWyOver5Less10HandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.wyOver5Less10, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetyWyOver5Less10HandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.wyOver5Less10, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "变形值大于5cm小于10cm告警";
   }
   /**
    * 变形值大于100mm
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetyWyOver10Handle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_wy_value_api);
      JSONArray data = judgeDirection(ztData, "3");
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(data,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetyWyOver10HandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.wyOver10, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetyWyOver10HandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.wyOver10, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "变形值大于10cm告警";
   }
   /**
    * 近1h变形值大于10cm以上
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetyWy1hChangeOver10Handle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_wy_value_1h_change_over_10_api);
      JSONArray data = judgeDirectionV2(ztData);
      //这里需要对数据进行过滤
      JSONArray resultData = filterNoAlertRes(data,arg1);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetyWy1hChangeOver10HandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.wy1hChangeOver10, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetyWy1hChangeOver10HandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.wy1hChangeOver10, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "近1h变形值大于10cm以上告警";
   }
   /**
    * 渗流量一日大于5L小于8L,连续3日增加
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySlOver5Less8Handle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sl_value_change_api);
      JSONArray data = filterData(ztData,"1");
      //这里需要对数据进行过滤
      JSONArray resultData1 = filterNoAlertRes(data,arg1);
      JSONArray resultData = setMonitorData(resultData1, "value");
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySlOverLessHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.slOverLess, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySlOverLessHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.slOverLess, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "渗流量一日大于5L小于8L,连续3日增加告警";
   }
   /**
    * 渗流量一日大于8L小于10L,连续3日增加
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySlOver8Less10Handle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sl_value_change_api);
      JSONArray data = filterData(ztData,"2");
      //这里需要对数据进行过滤
      JSONArray resultData1 = filterNoAlertRes(data,arg1);
      JSONArray resultData = setMonitorData(resultData1, "value");
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySlOverLessHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.slOverLess, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySlOverLessHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.slOverLess, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "渗流量一日大于5L小于8L,连续3日增加告警";
   }
   /**
    * 渗流量一日大于10L,连续3日增加
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String damSafetySlOver10Handle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_db_sl_value_change_api);
      JSONArray data = filterData(ztData,"3");
      //这里需要对数据进行过滤
      JSONArray resultData1 = filterNoAlertRes(data,arg1);
      JSONArray resultData = setMonitorData(resultData1, "value");
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.damSafetySlOverLessHandleSms(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.slOverLess, true, adCode, false, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.damSafetySlOverLessHandleStation(alarmRule, alarmRuleDetail, resultData, ZtApiDataColumnConstant.slOverLess, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      return "渗流量一日大于10L告警";
   }
   /**
    * 视频离线
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String videoOfflineHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtDataV2("", ZtApiUrlConstant.alarm_video_offline_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.videoOfflineHandleStation(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.videoOffline, false, adCode, true, uuid,arg2);
               }
               if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                  asyncNoticeHandle.videoOfflineHandleSms(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.videoOffline, false, adCode, false, uuid,arg2);
               }
            }
         }
      }
      return "视频信息缺失告警";
   }
   /**
    * 策略42: 水位防洪高水位告警
    *
    * @param arg1
    * @param arg2
    * @return
    */
   public String topLevOfFloAlertHandle(String arg1, String arg2) {
      String adCode = null;
      String uuid = UUID.randomUUID().toString();
      // 查询当前策略对应的告警规则信息
      AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
      // 调用中台服务接口查询数据
      JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_flpr_rz_warn_api);
      // 获取告警规则详情,判断告警类型(短信,电话,站内信)
      if (null != alarmRule) {
         // 查询告警详情信息
         List<AlarmRuleDetail> alarmRuleDetailList = alarmRuleDetailService.list(new QueryWrapper<AlarmRuleDetail>().eq("alarm_rule_id", alarmRule.getId()));
         if (alarmRuleDetailList.size() > 0) {
            // 遍历
            for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
               if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                  asyncNoticeHandle.topLevOfFloAlertHandleStation(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.topLevOfFloAlertList, true, adCode, true, uuid,arg2);
               }
            }
         }
      }
      // 返回
      return "水位防洪高水位告警";
   }
   private JSONArray filterData(JSONArray ztData, String level) {
      JSONArray array = new JSONArray();
      for (int i = 0; i < ztData.size(); i++) {
         JSONObject jsonObject = ztData.getJSONObject(i);
         String dataLevel = jsonObject.getString("level");
         if (dataLevel.equals(level)) {
            array.add(jsonObject);
         }
      }
      return array;
   }
   /**
    * 判断方向
    *
    * @param ztData
    * @return
    */
   private JSONArray judgeDirectionV2(JSONArray ztData) {
      JSONArray array = new JSONArray();
      for (int i = 0; i < ztData.size(); i++) {
         JSONObject jsonObject = ztData.getJSONObject(i);
         //上下游方向
         Double diffDe = jsonObject.getDouble("diff_de");
         //左右岸方向
         Double diffDn = jsonObject.getDouble("diff_dn");
         //垂直
         Double diffDu = jsonObject.getDouble("diff_du");
         String direction = "";
         String val = "";
         //近1h变形值大于10cm以上
         if (diffDe > 100) {
            direction = "上下游方向";
            val = diffDe.toString();
         } else if (diffDn > 100) {
            direction = "左右岸方向";
            val = diffDn.toString();
         } else if (diffDu > 100) {
            direction = "垂直";
            val = diffDu.toString();
         }
         jsonObject.put("direction", direction);
         jsonObject.put("val", val);
         jsonObject.put("monitorData",val);
         array.add(jsonObject);
      }
      return array;
   }
   /**
    * 判断方向
    *
    * @param ztData
    * @return
    */
   private JSONArray judgeDirection(JSONArray ztData, String level) {
      JSONArray array = new JSONArray();
      for (int i = 0; i < ztData.size(); i++) {
         JSONObject jsonObject = ztData.getJSONObject(i);
         String dataLevel = jsonObject.getString("level");
         //上下游方向
         Double deVal = jsonObject.getDouble("de_val");
         //左右岸方向
         Double dnVal = jsonObject.getDouble("dn_val");
         //垂直
         Double duValue = jsonObject.getDouble("垂直位移");
         String direction = "";
         String val = "";
         if (dataLevel.equals(level)) {
            if (level.equals("1")) {
               //变形值大于20mm小于50mm
               if (20 < deVal && deVal < 50) {
                  direction = "上下游方向";
                  val = deVal.toString();
               } else if (20 < dnVal && dnVal < 50) {
                  direction = "左右岸方向";
                  val = dnVal.toString();
               } else if (20 < duValue && duValue < 50) {
                  direction = "垂直";
                  val = duValue.toString();
               }
            } else if (level.equals("2")) {
               //变形值大于50mm小于100mm
               if (50 < deVal && deVal < 100) {
                  direction = "上下游方向";
                  val = deVal.toString();
               } else if (50 < dnVal && dnVal < 100) {
                  direction = "左右岸方向";
                  val = dnVal.toString();
               } else if (50 < duValue && duValue < 100) {
                  direction = "垂直";
                  val = duValue.toString();
               }
            } else if (level.equals("3")) {
               //变形值大于100mm
               if (deVal > 100) {
                  direction = "上下游方向";
                  val = deVal.toString();
               } else if (dnVal > 100) {
                  direction = "左右岸方向";
                  val = dnVal.toString();
               } else if (duValue > 100) {
                  direction = "垂直";
                  val = duValue.toString();
               }
            }
            jsonObject.put("direction", direction);
            jsonObject.put("val", val);
            jsonObject.put("monitorData",val);
            array.add(jsonObject);
         }
      }
      return array;
   }
   private JSONArray judgeType(JSONArray ztData) {
      JSONArray array = new JSONArray();
      for (int i = 0; i < ztData.size(); i++) {
         JSONObject jsonObject = ztData.getJSONObject(i);
         Double syVal = jsonObject.getDouble("sy_val");
         Double leadVal = jsonObject.getDouble("lead_val");
         String type = "";
         if (syVal > leadVal) {
            //当前水位大于1h
            type = "陡升";
         } else {
            type = "陡降";
         }
         jsonObject.put("type", type);
         jsonObject.put("monitorData",jsonObject.getString("sy_val"));
         array.add(jsonObject);
      }
      return array;
   }
   /**
    * 根据数据过滤不同程度的变幅
    *
    * @param ztData
    * @param level  1黄、2橙、3红
    * @return
    */
   private JSONArray changeRange(JSONArray ztData, String level) {
      JSONArray array = new JSONArray();
      for (int i = 0; i < ztData.size(); i++) {
         JSONObject jsonObject = ztData.getJSONObject(i);
         String dataLevel = jsonObject.getString("level");
         //一日变幅
         Double diff2 = jsonObject.getDouble("diff_2");
         //五日变幅
         Double diff5 = jsonObject.getDouble("diff_5");
         //十日变幅
         Double diff10 = jsonObject.getDouble("diff_10");
         //三十日变幅
         Double diff30 = jsonObject.getDouble("diff_30");
         String dayNum = "";
         String diffVal = "";
         if (dataLevel.equals(level)) {
            if (level.equals("1")) {
               //水位长期不变,五日变幅小于5cm,十日变幅大于5cm小于8cm,三十日变幅大于8cm小于10cm
               if (diff5 < 0.05) {
                  dayNum = "五";
                  diffVal = diff5.toString();
               } else if (0.05 < diff10 && diff10 < 0.08) {
                  dayNum = "十";
                  diffVal = diff10.toString();
               } else if (0.08 < diff30 && diff30 < 0.1) {
                  dayNum = "三十";
                  diffVal = diff30.toString();
               }
            } else if (level.equals("2")) {
               //渗压水位一日变幅大于0.5米小于1米,五日变幅大于1米小于2米,十日变幅大于2米小于5米,三十日变幅大于5米小于10米
               if (0.5 < diff2 && diff2 < 1) {
                  dayNum = "一";
                  diffVal = diff2.toString();
               } else if (1 < diff5 && diff5 < 2) {
                  dayNum = "五";
                  diffVal = diff5.toString();
               } else if (2 < diff10 && diff10 < 5) {
                  dayNum = "十";
                  diffVal = diff10.toString();
               } else if (5 < diff30 && diff30 < 10) {
                  dayNum = "三十";
                  diffVal = diff30.toString();
               }
            } else if (level.equals("3")) {
               //渗压水位一日变幅大于1米小于2米,五日变幅大于2米小于5米,十日变幅大于5米小于10米,三十日变幅大于10米
               if (1 < diff2 && diff2 < 2) {
                  dayNum = "一";
                  diffVal = diff2.toString();
               } else if (2 < diff5 && diff5 < 5) {
                  dayNum = "五";
                  diffVal = diff5.toString();
               } else if (5 < diff10 && diff10 < 10) {
                  dayNum = "十";
                  diffVal = diff10.toString();
               } else if (10 < diff30) {
                  dayNum = "三十";
                  diffVal = diff30.toString();
               }
            }
            jsonObject.put("dayNum", dayNum);
            if (diffVal.equals("0.0")) {
               diffVal = "0";
            }
            jsonObject.put("diff_val", diffVal);
            jsonObject.put("monitorData",jsonObject.getString("val1"));
            array.add(jsonObject);
         }
      }
      return array;
   }
   /**
    * 过滤低于管底高程数据或高于管口高程数据
    *
    * @param ztData
    * @param flag
    * @return
    */
   private JSONArray lessOrHigher(JSONArray ztData, String flag) {
      JSONArray array = new JSONArray();
      for (int i = 0; i < ztData.size(); i++) {
         JSONObject jsonObject = ztData.getJSONObject(i);
         //获取低于管底高程数据min_value < tbbtel  即 min_value - tbbtel <0  即diff_tbb_val <0
         if (flag == "less") {
            Double differ = jsonObject.getDouble("diff_tbb_val");
            if (differ < 0) {
               //加进一个绝对值方便展示
               jsonObject.put("diff_tbb_val_abs", Math.abs(differ));
               jsonObject.put("monitorData",jsonObject.getString("min_value"));
               array.add(jsonObject);
            }
         } else if (flag == "higher") {
            //获取高于管口高程数据,即 max_value > tbttel 即 max_value - tbttel >0 即 diff_tbt_val >0
            Double differ = jsonObject.getDouble("diff_tbt_val");
            if (differ > 0) {
               jsonObject.put("monitorData",jsonObject.getString("max_value"));
               array.add(jsonObject);
            }
         }
      }
      return array;
   }
   //过滤不需要告警的水库
   public JSONArray filterNoAlertRes(JSONArray jsonArray,String ruleName){
      JSONArray result = new JSONArray();
      //获取要过滤的水库数据
      String noAlertRes= noticeHandle.getNoAlertRes(ruleName);
      if (StringUtil.isBlank(noAlertRes)){
         //如果没有需要过滤的数据
         return jsonArray;
      }
      for (int i = 0; i < jsonArray.size(); i++) {
         JSONObject jsonObject = jsonArray.getJSONObject(i);
         String resCd = jsonObject.getString("res_cd");
         //判断水库是否在不告警水库列表中
         boolean contains = noAlertRes.contains(resCd);
         if (!contains){
            //不在则往结果集中加入数据
            result.add(jsonObject);
         }
      }
      return  result;
   }
   //给数组赋值监测值,便于后面记录监测值
   public JSONArray setMonitorData(JSONArray source,String monitorName){
      JSONArray result = new JSONArray();
      for (int i = 0; i < source.size(); i++) {
         JSONObject jsonObject = source.getJSONObject(i);
         String  data = jsonObject.getString(monitorName);
         jsonObject.put("monitorData",data);
         result.add(jsonObject);
      }
      return result;
   }
}