zrj
2024-09-02 13a2488a1c825da7e2404f5f1036a42b6c44c849
告警合并发送调整
4 files modified
173 ■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 80 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java 81 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/vo/SmsRequestTemplate.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
@@ -219,10 +219,9 @@
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list, alarmRule, uuid, null);
//                if (null != alarmRecord) {
//                    list.add(alarmRecord.getId().toString());
                    list.add("111");
//                }
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
            }
            if (!isTimeSend()) return map;
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -119,6 +119,12 @@
        if (null != smsTemplate) {
            // 创建消息发送对象
            SmsRequestTemplate smsRequestTemplate = new SmsRequestTemplate();
            // 通过模板id 查询模板相关信息(外呼对应的模板id则为场景id)
            SmsTemplate mergeSmsTemplate
                = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("id", alarmRuleDetail.getMergeTemplateId()).eq("is_deleted", 0));
            if (null!=mergeSmsTemplate){
                smsRequestTemplate.setSmsTemplateMerge(mergeSmsTemplate);
            }
            // 设置是否发送站内信
            smsRequestTemplate.setIsSendStation(isSendStation);
            // 设置告警信息
@@ -227,6 +233,7 @@
        // 设置信息
        smsRequestTemplate.setPersonVOList(personLists);
        smsRequestTemplate.setTemplateContent(lists);
        smsRequestTemplate.setTemplateMergeContent(moreLists);
    }
    /**
@@ -283,7 +290,9 @@
                //日期处理
                flag = timeHandle(jsonArray, alarmRuleDetail, flag, i, list);
                // 合并水库名称
                boolean isMerge = mergeResName(jsonArray, columnsList, lists, i, personVO,list.size());
                boolean isMerge = Strings.isBlank(alarmRuleDetail.getMergeTemplateId())?
                    mergeResName(jsonArray, columnsList,lists, i, personVO,list.size()):
                    mergeResName(jsonArray,list, mergeColumnsList,lists,moreLists, i, personVO,list.size());
                if (isMerge){
                    break;
                }
@@ -437,6 +446,65 @@
                        }
                    }
                }
                break;
            }
        }
        return isMerge;
    }
    /**
     * 合并水库名称内容--暂不启用
     * @param jsonArray 告警数据
     * @param list 当前告警内容
     * @param columnsList 告警列(合并)
     * @param lists 告警内容
     * @param moreLists 合并告警内容
     * @param i 集合索引
     * @param personVO 人员信息
     * @param index 索引
     * @return
     */
    private boolean mergeResName(JSONArray jsonArray,
                                 List<String> list,
                                 List<String> columnsList,
                                 List<List<String>> lists,
                                 List<List<String>> moreLists,
                                 int i,
                                 PersonVO personVO,
                                 int index) {
        boolean isMerge = false;
        for (List<String> listStr : lists) {
            // 如果告警人员已经存在,则需要按规则判断是否合并水库名称,将当前人员告警内容中的水库名称合并
            if (listStr.contains(personVO.getPhone())) {
                isMerge = true;
                // 判断合并的水库名称是否超过3个,超过3个则不在合并,直接舍弃
                String resNames = listStr.get(index);
                int length = resNames.split("、").length;
                if (length>2){
                    break;
                }
                // 变量将值放入集合中
                for (String column : columnsList) {
                    String[] split = column.split(",");
                    String format = "";
                    String lastString = split[split.length-1];
                    if (lastString.equals("1")) {
                        // 需要合并数据,目前只会合并乡镇水库名称,其他情况不处理
                        for (String s : split) {
                            // 乡镇水库拼接
                            format = format + jsonArray.getJSONObject(i).getString(s);
                        }
                        format = format.replaceAll("null","");
                        // 合并水库名称信息,2個以上拼接等
                        if (length==2){
                            list.add(listStr.get(index) + "、" + format + "等");
                        }else {
                            list.add(listStr.get(index) + "、" + format);
                        }
                    }
                }
                // 加入合并的集合
                moreLists.add(list);
                break;
            }
        }
@@ -805,12 +873,12 @@
            //删除测值
            list.remove(3);
            // 新增
//            boolean save = alarmRecordService.save(alarm);
//            // 删除测站编号
            boolean save = alarmRecordService.save(alarm);
            // 删除测站编号
            list.remove(0);
//            if (save) {
//                return alarm;
//            }
            if (save) {
                return alarm;
            }
        }
        // 返回
        return null;
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -204,39 +204,72 @@
    @Override
    public Map<String, Object> sendSignMsg(SmsRequestTemplate smsRequestTemplate) {
        // 取出数据
        SMSSendRequest request = new SMSSendRequest();
        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
        request.setTemplateId(smsTemplate.getTemplateId());
        // 合并
        SmsTemplate smsTemplateMerge = smsRequestTemplate.getSmsTemplateMerge();
        // 告警内容
        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
        // 合并水库告警内容
        List<List<String>> templateTemplateMergeContent = smsRequestTemplate.getTemplateMergeContent();
        // 获取告警规则
        AlarmRule alarmRule = smsRequestTemplate.getAlarmRule();
        // 是否同时发送站内信
        Boolean isSendStation = false;
        if (null!=smsRequestTemplate.getIsSendStation()){
            isSendStation = smsRequestTemplate.getIsSendStation();
        }
        // 判断 templateContent 个数,个数超过1000 需要分段发送短信
        List<List<List<String>>> lists = Lists.partition(templateContent, 1000);
        int number = 0;
        for (List<List<String>> list : lists) {
            // 临时保存告警记录用
            List<List<String>> templateList = getAlarmList(list);
            // 批量发送短信
            Map<String, Object> map = batchSendAlertsSms(smsRequestTemplate.getSmsTemplate(), list);
//            int count = Integer.parseInt(map.get("errCount").toString());
//            ComResult<DynSMSSendDataResult> resultComResult =(ComResult<DynSMSSendDataResult>) map.get("resultComResult");
//            // 保存短信结果记录
//            SmsResult smsResult = saveSendResult(alarmRule.getId(),resultComResult.getCode().toString(),resultComResult.getMsg(),request, list.size() - count);
//            // 保存详情记录(短信详情,告警详情)
//            List<SmsRecord> smsRecordList = saveAlertsAndSmsDetail(smsResult,resultComResult,smsRequestTemplate.getSmsTemplate(),
//                templateList,request,smsRequestTemplate.getAlarmRule(),isSendStation);
//            // number 累加
//            number += smsRecordList.size();
        }
        // 设置返回数据
        Map<String, Object> params = new HashMap<>(1);
        params.put("sendNumber",number);
        Map<String, Object> map = new HashMap<>(2);
        // 发送消息处理
        Map<String, Object> params = sendSmsReturnStringObjectMap(smsTemplate, templateContent, alarmRule, isSendStation);
        // 发送合并水库消息处理
        Map<String, Object> mergeParams = sendSmsReturnStringObjectMap(smsTemplateMerge, templateTemplateMergeContent, alarmRule, isSendStation);
        // 合并返回数据
        map.put("oneMap",params);
        map.put("moreMap",mergeParams);
        // 返回
        return params;
        return map;
    }
    /**
     * 发送消息处理
     * @param smsTemplate
     * @param templateContent
     * @param alarmRule
     * @param isSendStation
     * @return
     */
    @NotNull
    private Map<String, Object> sendSmsReturnStringObjectMap(SmsTemplate smsTemplate,
                                                             List<List<String>> templateContent,
                                                             AlarmRule alarmRule,
                                                             Boolean isSendStation) {
        if (null!=smsTemplate) {
            // 取出数据
            SMSSendRequest request = new SMSSendRequest();
            request.setTemplateId(smsTemplate.getTemplateId());
            // 判断 templateContent 个数,个数超过1000 需要分段发送短信
            List<List<List<String>>> lists = Lists.partition(templateContent, 1000);
            int number = 0;
            for (List<List<String>> list : lists) {
                // 临时保存告警记录用
                List<List<String>> templateList = getAlarmList(list);
                // 批量发送短信
                Map<String, Object> map = batchSendAlertsSms(smsTemplate, list);
                int count = Integer.parseInt(map.get("errCount").toString());
                ComResult<DynSMSSendDataResult> resultComResult = (ComResult<DynSMSSendDataResult>) map.get("resultComResult");
                // 保存短信结果记录
                SmsResult smsResult = saveSendResult(alarmRule.getId(), resultComResult.getCode().toString(), resultComResult.getMsg(), request, list.size() - count);
                // 保存详情记录(短信详情,告警详情)
                List<SmsRecord> smsRecordList = saveAlertsAndSmsDetail(smsResult, resultComResult, smsTemplate,
                    templateList, request, alarmRule, isSendStation);
                // number 累加
                number += smsRecordList.size();
            }
            // 设置返回数据
            Map<String, Object> params = new HashMap<>(1);
            params.put("sendNumber", number);
        }
        return null;
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/vo/SmsRequestTemplate.java
@@ -69,6 +69,11 @@
    private SmsTemplate smsTemplate;
    /**
     * 短信模板对象信息(合并的模板)
     */
    private SmsTemplate smsTemplateMerge;
    /**
     * 是否发送站内信
     */
    private Boolean isSendStation;