guoshilong
2024-04-15 b3ec16fd6d3c61814d55465ccd1c39d9fc49fff4
视频告警
7 files modified
300 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 122 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 19 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java 123 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java
@@ -438,6 +438,6 @@
    public static List<String>  videoOffline = new ArrayList<String>()
    {{
        add("res_nm");
        add("cd_nm");
        add("video_name");
    }};
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java
@@ -169,6 +169,6 @@
    /**
     * 38. 大坝安全监测告警-渗流量变化
     */
    public static final String alarm_video_offline_api = "/services/1234567890ABCDEFGHIJKLMN/sl/alarm/api";
    public static final String alarm_video_offline_api = "/services/1234567890ABCDEFGHIJKLMN/wmst_not_online_list/api?pageNo=1&pageSize=9999";
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
@@ -2074,7 +2074,7 @@
                }
            }
            // 保存站内信记录信息
            noticeHandle.saveInStationInfoMerge(smsRequestTemplate,alarmRule);
            noticeHandle.saveInStationInfoMergeVideo(smsRequestTemplate,alarmRule);
        }
    }
@@ -2094,4 +2094,32 @@
        // 调用短信服务
        smsService.sendMergeSignMsg(smsRequestTemplate);
    }
    public Map<String, Object> videoOfflineHandleSms(AlarmRule alarmRule,
                                               AlarmRuleDetail alarmRuleDetail,
                                               JSONArray ztData,
                                               List<String> columnList,
                                               Boolean flag,
                                               String adCode,
                                               Boolean isSendStation,
                                               String uuid) {
        Map<String, Object> map = new HashMap<>();
        // 只发短信,将发短信信息组装好
        SmsRequestTemplate smsRequestTemplate
            = noticeHandle.getSendSmsTemplate(ztData,alarmRule,alarmRuleDetail,columnList ,flag,adCode,uuid,isSendStation);
        // 拼接后面内容
        if (smsRequestTemplate.getPersonVOList().size() > 0) {
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
            }
            map = smsService.sendSignMsgMergeCdVideo(smsRequestTemplate);
            // 调用短信服务
            return map;
        }
        return map;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -695,6 +695,50 @@
        return null;
    }
    /**
     * 调用中台接口查询数据,返回结果不同处理
     *
     * @param params
     * @param url
     * @return
     */
    public JSONArray getZtDataV2(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;
        }
        if (activeProfile.equals("test")) {
            url = ZtApiUrlConstant.url_prefix_test + 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());
            JSONObject data = jsonObject.getJSONObject("data");
            // 返回
            return JSONArray.parseArray(data.get("data").toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 保存站内信记录信息
     *
@@ -841,6 +885,84 @@
    }
    /**
     * 保存站内信记录(水库合并)
     *
     * @param smsRequestTemplate
     * @param alarmRule
     * @return
     */
    public Map<String, Object> saveInStationInfoMergeVideo(SmsRequestTemplate smsRequestTemplate, AlarmRule alarmRule) {
        // 取出数据
        SMSSendRequest request = new SMSSendRequest();
        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
        request.setTemplateId(smsTemplate.getTemplateId());
        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
        List<MessageRecord> messageRecordList = new ArrayList<>();
        List<Temp> tempList = new ArrayList<>();
        // 合并数据
        for (List<String> list : templateContent) {
            Temp temp = new Temp();
            temp.setPhone(list.get(1));
            temp.setReservoirCode(list.get(0));
            temp.setReservoirName(list.get(2));
            temp.setCdNm(list.get(3));
            temp.setAlarmRecordId(list.get(list.size() - 1));
            // 放入临时集合
            tempList.add(temp);
        }
        // 按手机号分组
        Map<String, List<Temp>> listMap = tempList.stream().collect(Collectors.groupingBy(Temp::getPhone));
        listMap.forEach((phone, temps) -> {
            MessageRecord messageRecord = new MessageRecord();
            messageRecord.setTheme(alarmRule.getRuleName());
            messageRecord.setSender(AuthUtil.getUserId().toString());
            messageRecord.setSource("智能告警");
            messageRecord.setStatus(0);
            messageRecord.setRecipient(phone);
            StringBuilder builder = new StringBuilder();
            Map<String, List<Temp>> resCollect = temps.stream().collect(Collectors.groupingBy(Temp::getReservoirCode));
            List<String> contentList = new ArrayList<>();
            resCollect.forEach((resCode, contentTemp) -> {
                List<String> cdNmList = new ArrayList<>();
                //凤凰水库(测点12170062992),大新众水库(测点12170063012、测点12170062998)
                //因为只能按编号分组,名称会有重复,所以拿第一条数据的名称就行
                String resName = contentTemp.get(0).getReservoirName();
                contentTemp.forEach(info -> {
                    //把测站加进测站集合里
                    cdNmList.add( info.getCdNm());
                });
                String cdNameListStr = String.join("、", cdNmList);
                contentList.add(StringUtil.format("{}({})", resName, cdNameListStr));
            });
            String contentListStr = String.join(",", contentList);
            //需要填充的数据
            List<String> fillList = new ArrayList<>();
            fillList.add(contentListStr);
            String sendContent = contentConvert(smsTemplate.getContent(), fillList);
            messageRecord.setContent(sendContent);
            messageRecordList.add(messageRecord);
        });
        // 保存告警记录详情信息
        if (smsRequestTemplate.getIsSendStation()) {
            saveMessageRecord(messageRecordList);
        }
        Map<String, Object> map = new HashMap<>(2);
        // 返回
        return map;
    }
    public Map<String, Object> saveInStationInfoMergeNoCd(SmsRequestTemplate smsRequestTemplate, AlarmRule alarmRule) {
        // 取出数据
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -775,7 +775,7 @@
                        asyncNoticeHandle.damSafetySyDataMissingHandleStation(alarmRule, alarmRuleDetail, data, ZtApiDataColumnConstant.syDataMissingList, false, adCode, true, uuid);
                    }
                    if (alarmRuleDetail.getAlarmMode().equals("短信")){
                        asyncNoticeHandle.damSafetySyDataMissingHandleSms(alarmRule, alarmRuleDetail, data, ZtApiDataColumnConstant.syDataMissingList, false, adCode, true, uuid);
                        asyncNoticeHandle.damSafetySyDataMissingHandleSms(alarmRule, alarmRuleDetail, data, ZtApiDataColumnConstant.syDataMissingList, false, adCode, false, uuid);
                    }
                }
            }
@@ -811,7 +811,7 @@
                        asyncNoticeHandle.damSafetySyDataMissingHandle(alarmRule, alarmRuleDetail, data, ZtApiDataColumnConstant.bxDataMissingList, false, adCode, true, uuid);
                    }
                    if (alarmRuleDetail.getAlarmMode().equals("短信")){
                        asyncNoticeHandle.damSafetySyDataMissingHandleSms(alarmRule, alarmRuleDetail, data, ZtApiDataColumnConstant.bxDataMissingList, false, adCode, true, uuid);
                        asyncNoticeHandle.damSafetySyDataMissingHandleSms(alarmRule, alarmRuleDetail, data, ZtApiDataColumnConstant.bxDataMissingList, false, adCode, false, uuid);
                    }
                }
            }
@@ -885,9 +885,9 @@
            if (alarmRuleDetailList.size() > 0) {
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
//                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
//                        asyncNoticeHandle.damSafetySyHigherThenNozzleHandleSms(alarmRule, alarmRuleDetail, array,ZtApiDataColumnConstant.syHigherThenNozzle,true, adCode, false,uuid);
//                    }
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.damSafetySyHigherThenNozzleHandleSms(alarmRule, alarmRuleDetail, array,ZtApiDataColumnConstant.syHigherThenNozzle,true, adCode, false,uuid);
                    }
                    if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                        asyncNoticeHandle.damSafetySyHigherThenNozzleHandleStation(alarmRule, alarmRuleDetail, array, ZtApiDataColumnConstant.syHigherThenNozzle, true, adCode, true, uuid);
                    }
@@ -1393,8 +1393,7 @@
        // 查询当前策略对应的告警规则信息
        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 ztData = noticeHandle.getZtDataV2("", ZtApiUrlConstant.alarm_video_offline_api);
        // 获取告警规则详情,判断告警类型(短信,电话,站内信)
        if (null != alarmRule) {
            // 查询告警详情信息
@@ -1403,8 +1402,12 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                        asyncNoticeHandle.videoOfflineHandleStation(alarmRule, alarmRuleDetail, data, ZtApiDataColumnConstant.wy1hChangeOver10, false, adCode, true, uuid);
                        asyncNoticeHandle.videoOfflineHandleStation(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.videoOffline, false, adCode, true, uuid);
                    }
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.videoOfflineHandleSms(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.videoOffline, false, adCode, false, uuid);
                    }
                }
            }
        }
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java
@@ -123,4 +123,6 @@
     * @return
     */
    Map<String, Object> sendSignMsgMergeCd(SmsRequestTemplate smsRequestTemplate);
    Map<String, Object> sendSignMsgMergeCdVideo(SmsRequestTemplate smsRequestTemplate);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -947,7 +947,8 @@
                    for (AlarmRecordDetailVO alarmRecordDetail : alarmRecordDetailList) {
                        AlarmRecordDetail alarmRecordDetail1 = new AlarmRecordDetail();
                        // 短信内容拼接(完成发送的结果信息)
                        String formatContent = String.format(str, alarmRecordDetail.getReservoirName().split(","));
//                        String formatContent = String.format(str, alarmRecordDetail.getReservoirName().split(","));
                        String formatContent = format;
                        alarmRecordDetail1.setAlarmContent(formatContent);
                        alarmRecordDetail1.setSendRecordId(smsRecord.getId());
                        alarmRecordDetail1.setCreateTime(new Date());
@@ -963,20 +964,122 @@
            }
        });
        return null;
    }
    @Override
    public Map<String, Object> sendSignMsgMergeCdVideo(SmsRequestTemplate smsRequestTemplate) {
        // 取出数据
        SMSSendRequest request = new SMSSendRequest();
        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
        request.setTemplateId(smsTemplate.getTemplateId());
        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
        List<Temp> tempList = new ArrayList<>();
        // 合并数据
        for (List<String> list : templateContent) {
            Temp temp = new Temp();
            temp.setPhone(list.get(1));
            temp.setReservoirCode(list.get(0));
            temp.setReservoirName(list.get(2));
            temp.setCdNm(list.get(3));
            temp.setAlarmRecordId(list.get(list.size()-1));
            // 放入临时集合
            tempList.add(temp);
        }
        // 按手机号分组
        Map<String, List<Temp>> listMap = tempList.stream().collect(Collectors.groupingBy(Temp::getPhone));
        // 遍历 map 发送短信
        listMap.forEach((s, temps) -> {
            StringBuilder builder = new StringBuilder();
            StringBuilder smsRecordBuilder = new StringBuilder();
            builder.append(s).append(",");
            //按水库再次分组,因为要把测点名称放进水库里
            Map<String, List<Temp>> resCollectGroup = temps.stream().collect(Collectors.groupingBy(Temp::getReservoirCode));
            //这个集合为了存水库和其多个测站
            List<Temp> infoList = new ArrayList<>();
            resCollectGroup.forEach((resCode,temp1)->{
                Temp temp = new Temp();
                temp.setPhone(s);
                temp.setReservoirName(temp1.get(0).getReservoirName());
                temp.setReservoirCode(resCode);
                List<String> cdNameList = new ArrayList<>();
                temp1.forEach(info->{
                    cdNameList.add( info.getCdNm());
                    temp.setAlarmRecordId(info.getAlarmRecordId());
                });
                temp.setCdNm(String.join("、",cdNameList));
                infoList.add(temp);
            });
            // 如果一人对应水库数量超过30个,则分批发送
            List<List<Temp>> lists = Lists.partition(new ArrayList<>(infoList), 30);
            for (List<Temp> list : lists) {
                List<AlarmRecordDetailVO> alarmRecordDetailList = new ArrayList<>();
                // 遍历
                for (Temp temp : list) {
                    builder.append(temp.getReservoirName()+"("+temp.getCdNm() +")").append(",");
                    smsRecordBuilder.append(temp.getReservoirName()+"("+temp.getCdNm() +")").append(",");
                    AlarmRecordDetailVO alarmRecordDetail = new AlarmRecordDetailVO();
                    alarmRecordDetail.setReservoirNumber(temp.getReservoirCode());
                    alarmRecordDetail.setAlarmRecordId(Long.parseLong(temp.getAlarmRecordId()));
                    alarmRecordDetail.setAlarmMode("短信");
                    alarmRecordDetail.setPhone(temp.getPhone());
                    alarmRecordDetail.setReservoirName(temp.getReservoirName());
                    // 加入集合
                    alarmRecordDetailList.add(alarmRecordDetail);
                }
                String row = builder.substring(0, builder.length() - 1);
                // 组装数据
                String[] titleArr = smsRequestTemplate.getTitle().split(",");
                String[][] dyns = new String[2][titleArr.length];
                dyns[0] = titleArr;
                dyns[1] = row.split(",");
                //请求参数
                ComResult<DynSMSSendDataResult> resultComResult = sendDynSMSSendDataResultComResult(smsTemplate.getTemplateId(), dyns);
                // 先保存结果记录
                SmsResult smsResult = saveSendResult(resultComResult.getCode().toString(),resultComResult.getMsg(),request, 1);
                // 设置手机号
                request.setUserNumber(s);
                // 内容处理
                String str = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
                // 短信内容拼接(完成发送的结果信息)
                String substring = smsRecordBuilder.substring(0, smsRecordBuilder.length() - 1);
                // 格式转换
                String format = String.format(str, substring.split(","));
                // 设置内容
                request.setMessageContent(format);
                // 保存短信发送记录
                SmsRecord smsRecord = saveSendRecord(request, resultComResult.getCode().toString(), resultComResult.getMsg(), smsResult.getId());
                //保存告警记录详情信息
                if (null != smsRecord) {
                    List<AlarmRecordDetail> alarmRecordDetailArrayList = new ArrayList<>();
                    for (AlarmRecordDetailVO alarmRecordDetail : alarmRecordDetailList) {
                        AlarmRecordDetail alarmRecordDetail1 = new AlarmRecordDetail();
                        // 短信内容拼接(完成发送的结果信息)
//                        String formatContent = String.format(str, alarmRecordDetail.getReservoirName().split(","));
                        String formatContent = format;
                        alarmRecordDetail1.setAlarmContent(formatContent);
                        alarmRecordDetail1.setSendRecordId(smsRecord.getId());
                        alarmRecordDetail1.setCreateTime(new Date());
                        alarmRecordDetail1.setReservoirNumber(alarmRecordDetail.getReservoirNumber());
                        alarmRecordDetail1.setAlarmRecordId(alarmRecordDetail.getAlarmRecordId());
                        alarmRecordDetail1.setAlarmMode(alarmRecordDetail.getAlarmMode());
                        alarmRecordDetail1.setPhone(alarmRecordDetail.getPhone());
                        alarmRecordDetailArrayList.add(alarmRecordDetail1);
                    }
                    // 保存告警记录详情信息
                    boolean save = alarmRecordDetailService.saveBatch(alarmRecordDetailArrayList);
                }
            }
        });
        return null;
    }
//    /**