zhongrj
2023-07-07 5a7a17065013013901a193802281325ddc331aa2
告警查询修改,告警短信通知修改为批量单个发送
4 files modified
1 files added
241 ■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/dto/DynSMSSendRequestDTO.java 13 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java 215 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/util/SmsUtils.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
@@ -25,6 +25,7 @@
        <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
            and sar1.create_alarm_type = #{alarmRecord.createAlarmType}
        </if>
        order by sar.id desc
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -217,9 +217,11 @@
        AlarmRecord alarmRecord = alarmRecordService.getOne(new QueryWrapper<AlarmRecord>()
            .eq("temp_code",uuid)
            .eq("alarm_rule_id",alarmRule.getId())
            .eq("reservoir_number",list.get(0))
            .eq("reservoir_number",list.get(1))
        );
        if (null!=alarmRecord) {
            // 删除测站编号
            list.remove(0);
            return alarmRecord;
        }else {
            AlarmRecord alarm = new AlarmRecord();
@@ -282,7 +284,7 @@
     */
    public void addPatrolTechnologyInfo(List<String> list) {
        // 查询巡查责任人姓名,技术责任人姓名信息
        List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(0),"4,5");
        List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(1),"4,5");
        if (personVOList.size()>0) {
            String xczrr = "-";
            String jszrr = "-";
@@ -313,7 +315,7 @@
     */
    public void addCityCountyBusinessPersonInfo(List<String> list) {
        // 根据水库编号查询市县水利部人员姓名及联系方式
        List<PersonVO> personVOList = attResManagePersonClient.getCityCountyPersonListByResGuid(list.get(0));
        List<PersonVO> personVOList = attResManagePersonClient.getCityCountyPersonListByResGuid(list.get(1));
        if (personVOList.size()>0){
            // 如果没有找到人员?
            StringBuilder builder = new StringBuilder();
@@ -335,7 +337,7 @@
    public void addWaterMoreDesignPatrolTechnologyInfo(List<String> list,String personTypes) {
        String[] split = personTypes.split(",");
        // 查询巡查责任人姓名,技术责任人姓名信息
        List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(0),personTypes);
        List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(1),personTypes);
        if (personVOList.size()>0) {
            String xzzrr = "-";
            String zgzrr = "-";
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/dto/DynSMSSendRequestDTO.java
New file
@@ -0,0 +1,13 @@
package cn.gistack.alerts.sms.dto;
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest;
import lombok.Data;
@Data
public class DynSMSSendRequestDTO extends DynSMSSendRequest {
    /**
     * null 为删除  1:不去重
     */
    private String duplicateRemoval;
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -9,6 +9,7 @@
import cn.gistack.alerts.alarmRule.service.AlarmRecordDetailService;
import cn.gistack.alerts.notice.util.FormatUtil;
import cn.gistack.alerts.sms.constant.MinConstant;
import cn.gistack.alerts.sms.dto.DynSMSSendRequestDTO;
import cn.gistack.alerts.sms.entity.SmsRecord;
import cn.gistack.alerts.sms.entity.SmsRequest;
import cn.gistack.alerts.sms.entity.SmsResult;
@@ -101,72 +102,8 @@
        return list;
    }
//    /**
//     * 发送 具名 变量模板短信(告警定制)
//     * @param smsRequestTemplate
//     * @return
//     */
//    @Override
//    public Map<String, Object> sendSignMsg(SmsRequestTemplate smsRequestTemplate) {
//        // 取出数据
//        SMSSendRequest request = new SMSSendRequest();
//        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
//        request.setTemplateId(smsTemplate.getTemplateId());
//        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
//        // 先保存结果记录
//        SmsResult smsResult = saveSendResult(null,null,request, templateContent.size());
//        List<SmsRecord> smsRecordList = new ArrayList<>();
//        // 遍历处理
//        for (List<String> list : templateContent) {
//            AlarmRecordDetail alarmRecordDetail = new AlarmRecordDetail();
//            alarmRecordDetail.setReservoirNumber(list.get(0));
//            alarmRecordDetail.setAlarmRecordId(Long.parseLong(list.get(list.size() - 1)));
//            alarmRecordDetail.setAlarmMode("短信");
//            // 删除 最后一个 告警记录id
//            list.remove(list.size() - 1);
//            // 删除 0 水库编码
//            list.remove(0);
//            // 转换字符串
//            String row = String.join(",", list);
//            // 组装数据
//            String[][] dyns = new String[][]{{smsRequestTemplate.getTitle()}, {row}};
//            //请求参数
//            ComResult<DynSMSSendDataResult> resultComResult = sendDynSMSSendDataResultComResult(smsTemplate.getTemplateId(), dyns);
//
//            SmsRecord smsRecord = new SmsRecord();
//            if (null != smsResult){
//                alarmRecordDetail.setPhone(list.get(0));
//                // 设置手机号
//                request.setUserNumber(list.get(0));
//                // 内容处理
//                String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
//                // 短信内容拼接(完成发送的结果信息)
//                // 需要删除最前面的手机号
//                list.remove(0);
//                // 格式转换
//                String format = String.format(s, list.toArray());
//                // 设置内容
//                request.setMessageContent(format);
//                // 保存短信发送记录
//                smsRecord = saveSendRecord(request, resultComResult.getCode().toString(), resultComResult.getMsg(), smsResult.getId());
//                if (null != smsRecord){
//                    alarmRecordDetail.setAlarmContent(format);
//                    alarmRecordDetail.setSendRecordId(smsRecord.getId());
//                    alarmRecordDetail.setCreateTime(new Date());
//                    // 保存告警记录详情信息
//                    boolean save = alarmRecordDetailService.save(alarmRecordDetail);
//                }
//            }
//            smsRecordList.add(smsRecord);
//        }
//        Map<String, Object> map = new HashMap<>(2);
//        map.put("smsRecord",smsRecordList.size());
//        // 返回
//        return map;
//    }
    /**
     * 发送 具名 变量模板短信(告警定制)
     * 发送 具名 变量模板短信(告警定制)-- 动态发送-一个一个发
     * @param smsRequestTemplate
     * @return
     */
@@ -177,29 +114,93 @@
        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
        request.setTemplateId(smsTemplate.getTemplateId());
        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
        // 判断 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(resultComResult.getCode().toString(),resultComResult.getMsg(),request, list.size() - count);
            // 保存详情记录(短信详情,告警详情)
            List<SmsRecord> smsRecordList = saveAlertsAndSmsDetail(smsResult,resultComResult,smsRequestTemplate.getSmsTemplate(), templateList,request);
            // number 累加
            number += smsRecordList.size();
        // 先保存结果记录
        SmsResult smsResult = saveSendResult(null,null,request, templateContent.size());
        List<SmsRecord> smsRecordList = new ArrayList<>();
        // 遍历处理
        for (List<String> list : templateContent) {
            AlarmRecordDetail alarmRecordDetail = new AlarmRecordDetail();
            alarmRecordDetail.setReservoirNumber(list.get(0));
            alarmRecordDetail.setAlarmRecordId(Long.parseLong(list.get(list.size() - 1)));
            alarmRecordDetail.setAlarmMode("短信");
            // 删除 最后一个 告警记录id
            list.remove(list.size() - 1);
            // 删除 0 水库编码
            list.remove(0);
            // 转换字符串
            String row = String.join(",", list);
            // 组装数据
            String[][] dyns = new String[][]{{smsRequestTemplate.getTitle()}, {row}};
            //请求参数
            ComResult<DynSMSSendDataResult> resultComResult = sendDynSMSSendDataResultComResult(smsTemplate.getTemplateId(), dyns);
            SmsRecord smsRecord = new SmsRecord();
            if (null != smsResult){
                alarmRecordDetail.setPhone(list.get(0));
                // 设置手机号
                request.setUserNumber(list.get(0));
                // 内容处理
                String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
                // 短信内容拼接(完成发送的结果信息)
                // 需要删除最前面的手机号
                list.remove(0);
                // 格式转换
                String format = String.format(s, list.toArray());
                // 设置内容
                request.setMessageContent(format);
                // 保存短信发送记录
                smsRecord = saveSendRecord(request, resultComResult.getCode().toString(), resultComResult.getMsg(), smsResult.getId());
                if (null != smsRecord){
                    alarmRecordDetail.setAlarmContent(format);
                    alarmRecordDetail.setSendRecordId(smsRecord.getId());
                    alarmRecordDetail.setCreateTime(new Date());
                    // 保存告警记录详情信息
                    boolean save = alarmRecordDetailService.save(alarmRecordDetail);
                }
            }
            smsRecordList.add(smsRecord);
        }
        // 设置返回数据
        Map<String, Object> params = new HashMap<>(1);
        params.put("sendNumber",number);
        Map<String, Object> map = new HashMap<>(2);
        map.put("smsRecord",smsRecordList.size());
        // 返回
        return params;
        return map;
    }
//    /**
//     * 发送 具名 变量模板短信(告警定制)--动态批量发送
//     * @param smsRequestTemplate
//     * @return
//     */
//    @Override
//    public Map<String, Object> sendSignMsg(SmsRequestTemplate smsRequestTemplate) {
//        // 取出数据
//        SMSSendRequest request = new SMSSendRequest();
//        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
//        request.setTemplateId(smsTemplate.getTemplateId());
//        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
//        // 判断 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(resultComResult.getCode().toString(),resultComResult.getMsg(),request, list.size() - count);
//            // 保存详情记录(短信详情,告警详情)
//            List<SmsRecord> smsRecordList = saveAlertsAndSmsDetail(smsResult,resultComResult,smsRequestTemplate.getSmsTemplate(), templateList,request);
//            // number 累加
//            number += smsRecordList.size();
//        }
//        // 设置返回数据
//        Map<String, Object> params = new HashMap<>(1);
//        params.put("sendNumber",number);
//        // 返回
//        return params;
//    }
    /**
     * 获取用户告警的集合
@@ -328,7 +329,6 @@
        request.setTemplateId(smsTemplate.getTemplateId());
        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
        // 先保存结果记录
        SmsResult smsResult = saveSendResult(null,null,request, templateContent.size());
        List<SmsRecord> smsRecordList = new ArrayList<>();
        // 遍历处理
        for (List<String> list : templateContent) {
@@ -344,33 +344,27 @@
            list.remove(0);
            SmsRecord smsRecord = new SmsRecord();
            if (null != smsResult){
                alarmRecordDetail.setPhone(list.get(0));
                // 设置手机号
                request.setUserNumber(list.get(0));
                // 内容处理
                String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
                // 需要删除最前面的手机号
                list.remove(0);
                // 格式转换
                String format = String.format(s, list.toArray());
                // 设置内容
                request.setMessageContent(format);
                // 保存记录
                smsRecord = saveSendRecord(request, "", "", smsResult.getId());
                if (null != smsRecord){
                    alarmRecordDetail.setAlarmContent(format);
                    alarmRecordDetail.setSendRecordId(smsRecord.getId());
                    alarmRecordDetail.setCreateTime(new Date());
                    // 保存告警记录详情信息
                    boolean save = alarmRecordDetailService.save(alarmRecordDetail);
                }
            }
            alarmRecordDetail.setPhone(list.get(0));
            // 设置手机号
            request.setUserNumber(list.get(0));
            // 内容处理
            String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
            // 需要删除最前面的手机号
            list.remove(0);
            // 格式转换
            String format = String.format(s, list.toArray());
            // 设置内容
            request.setMessageContent(format);
            // 保存记录
            alarmRecordDetail.setAlarmContent(format);
            alarmRecordDetail.setSendRecordId(smsRecord.getId());
            alarmRecordDetail.setCreateTime(new Date());
            // 保存告警记录详情信息
            boolean save = alarmRecordDetailService.save(alarmRecordDetail);
            smsRecordList.add(smsRecord);
        }
        Map<String, Object> map = new HashMap<>(2);
        map.put("smsRecord",smsRecordList);
        map.put("smsResult",smsResult);
        // 返回
        return map;
    }
@@ -564,7 +558,10 @@
     */
    private ComResult<DynSMSSendDataResult> sendDynSMSSendDataResultComResult(String templateId, String[][] dyns) {
        //请求参数
//        DynSMSSendRequestDTO sendRequest = new DynSMSSendRequestDTO();
        DynSMSSendRequest sendRequest = new DynSMSSendRequest();
        // 相同号码,不同内容,不需要去重处理--暂时不用,等短信厂家通知,未上线 2023.07.07
//        sendRequest.setDuplicateRemoval("1");
        sendRequest.setTemplateId(templateId);
        sendRequest.setDynData(dyns);
        // 发送
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/util/SmsUtils.java
@@ -10,6 +10,7 @@
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendDataResult;
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
import cn.com.flaginfo.sdk.cmc.common.ApiEnum;
import cn.gistack.alerts.sms.dto.DynSMSSendRequestDTO;
import cn.gistack.common.constant.SmsConstant;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Component;
@@ -90,6 +91,7 @@
        api.setRequestUrl(SmsConstant.HOST + SmsConstant.sendVarUrl);
        //请求参数
        sendRequest.setSerialNumber(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
        ComResult<DynSMSSendDataResult> result = api.request(sendRequest);
        // 返回
        return result;