guoshilong
2024-04-12 3f3b0379cca52d13b377fae4c4d15b15aa18b1a7
字典接口逻辑修改,告警表格返回告警等级
9 files modified
181 ■■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordVO.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml 6 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java 3 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java 27 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java 129 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DictBizMapper.xml 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmXxlJob.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordVO.java
@@ -87,4 +87,6 @@
    private String adCode;
    private String adLevel;
    private String alarmLevel;
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
@@ -15,7 +15,8 @@
            END AS countyName,
        case when b."ad_grad" = 2 THEN b."ad_name"
            when c."ad_grad" = 2 THEN c."ad_name"
            ELSE d."ad_name" END AS cityName
            ELSE d."ad_name" END AS cityName,
            sar1.alarm_level
        from YWXT.sm_alarm_record sar
        left join YWXT.sm_alarm_rule sar1 on sar.alarm_rule_id = sar1.id and sar1.is_deleted = 0
        left join SJZT_MD."att_res_base" a on a."guid" = sar.reservoir_number
@@ -50,6 +51,9 @@
        <if test="alarmRecord.adCode!=null and alarmRecord.adCode!=''">
            and  a."interior_ad_guid" like concat('%',#{alarmRecord.adCode},'%')
        </if>
        <if test="alarmRecord.alarmLevel != null and alarmRecord.alarmLevel !=''">
            and sar1.alarm_level = #{alarmRecord.alarmLevel}
        </if>
        order by sar.id desc
    </select>
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java
@@ -238,7 +238,8 @@
     */
    public static List<String>  damSafetySyList = new ArrayList<String>()
    {{
        add("city_nm,county_nm,town_nm");
//        add("city_nm,county_nm,town_nm");
        add("town_nm");
        add("res_nm");
        add("sy_val");
        add("tb_chec_fl_stag");
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
@@ -987,7 +987,7 @@
                    list.add(alarmRecord.getId().toString());
                }
            }
            map = smsService.sendSignMsg(smsRequestTemplate);
            map = smsService.sendSignMsgMergeCd(smsRequestTemplate);
            // 调用短信服务
            return map;
        }
@@ -1040,9 +1040,34 @@
    }
    public Map<String, Object> damSafetyHandleSms(AlarmRule alarmRule, AlarmRuleDetail alarmRuleDetail, JSONArray data, List<String> columnList, boolean flag, String adCode, boolean isSendStation, String uuid) {
        Map<String, Object> map = new HashMap<>();
        // 只发短信,将发短信信息组装好
        SmsRequestTemplate smsRequestTemplate
            = noticeHandle.getSendSmsTemplate(data,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.sendSignMsgMergeCd(smsRequestTemplate);
            // 调用短信服务
            return map;
        }
        return map;
    }
    //渗压资料缺失
    public Map<String, Object> damSafetySyDataMissingHandle(AlarmRule alarmRule, AlarmRuleDetail alarmRuleDetail, JSONArray data, List<String> columnList, boolean flag, String adCode, boolean isSendStation, String uuid) {
        Map<String, Object> map = new HashMap<>();
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -664,7 +664,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.damSafetyHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.damSafetyList, true, adCode, false, uuid);
                        asyncNoticeHandle.damSafetyHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.damSafetyList, false, adCode, false, uuid);
                    }
                    if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                        asyncNoticeHandle.damSafetySyNoneHandleStation(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.damSafetyList, false, adCode, true, uuid);
@@ -699,7 +699,7 @@
                // 遍历
                for (AlarmRuleDetail alarmRuleDetail : alarmRuleDetailList) {
                    if (alarmRuleDetail.getAlarmMode().equals("短信")) {
                        asyncNoticeHandle.damSafetyHandle(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.damSafetyList, true, adCode, false, uuid);
                        asyncNoticeHandle.damSafetyHandleSms(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.damSafetyList, false, adCode, false, uuid);
                    }
                    if (alarmRuleDetail.getAlarmMode().equals("站内信")) {
                        asyncNoticeHandle.damSafetySyNoneHandleStation(alarmRule, alarmRuleDetail, ztData, ZtApiDataColumnConstant.damSafetyList, false, adCode, true, uuid);
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java
@@ -116,4 +116,11 @@
     * @return
     */
    Object importSendSms(List<SendSmsExcel> list,String templateId,String param, String content);
    /**
     * 水库测点合并发送
     * @param smsRequestTemplate
     * @return
     */
    Map<String, Object> sendSignMsgMergeCd(SmsRequestTemplate smsRequestTemplate);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -851,6 +851,134 @@
        });
    }
    @Override
    public Map<String, Object> sendSignMsgMergeCd(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(","));
                        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;
    }
//    /**
//     * 发送合并水库名短信
//     * @param smsRequestTemplate
@@ -1036,6 +1164,7 @@
        return R.data(200,"发送成功!",null);
    }
    /**
     * 校验参数
     * @param smsTemplate
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DictBizMapper.xml
@@ -55,6 +55,7 @@
            select id from blade_dict_biz where  parent_id > 0 and is_sealed = 0 and is_deleted = 0
            and code like  concat(concat('%',#{param1}),'%') and parent_id = #{param2}
        )
        and is_deleted = 0
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmXxlJob.java
@@ -676,7 +676,7 @@
     * @return
     * @throws Exception
     */
    @XxlJob("damSafetySlOver10Handle")
    @XxlJob("videoOfflineHandle")
    public ReturnT<String> videoOfflineHandle(String param){
        XxlJobLogger.log("开始执行任务...");
        // 创建外呼任务