guoshilong
2023-07-12 312fba0280bd1f4b5405a5b9fce9b898b9a50adf
Merge remote-tracking branch 'origin/jtdev' into jtdev
8 files modified
1 files added
480 ■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordDetailVO.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java 32 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 46 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 17 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java 336 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/vo/Temp.java 29 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.xml 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordDetailVO.java
@@ -12,4 +12,9 @@
public class AlarmRecordDetailVO extends AlarmRecordDetail {
    private Integer isExport;
    /**
     * 水库名称
     */
    private String reservoirName;
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java
@@ -23,6 +23,11 @@
    public static final String res_z_null_api = "/services/1234567890ABCDEFGHIJKLMN/res/z_null";
    /**
     * 水位数据缺失-全
     */
    public static final String no_z_last_api_all = "/services/1234567890ABCDEFGHIJKLMN/no_z_last/all";
    /**
     *  水位数据异常
     */
    public static final String res_z_not_normal_api = "/services/1234567890ABCDEFGHIJKLMN/res/z_not_normal";
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
@@ -27,7 +27,33 @@
    /**
     * 水位接近汛限告警
     * 1.水位信息接收不到
     * @param alarmRule
     * @param templateId
     * @param uuid
     * @param adCode
     * @param isSendStation
     */
    public void waterInfoNotHandle(AlarmRule alarmRule, String templateId, String uuid, String adCode,Boolean isSendStation) {
        // 调用中台服务接口查询数据
        JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_null_api);
        // 只发短信,将发短信信息组装好
        SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,adCode);
        // 遍历
        for (List<String> list : smsRequestTemplate.getTemplateContent()) {
            // 保存告警记录信息
            AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
            if (null != alarmRecord) {
                list.add(alarmRecord.getId().toString());
            }
        }
        // 调用短信服务
        smsService.sendMergeSignMsg(smsRequestTemplate);
    }
    /**
     * 5.水位接近汛限告警
     * @param templateId
     * @param uuid
     * @param alarmRule
@@ -59,7 +85,7 @@
    /**
     * 水位初次超汛限告警 处理
     * 6.水位初次超汛限告警 处理
     * @param templateId
     * @param uuid
     * @param alarmRule
@@ -98,7 +124,7 @@
    }
    /**
     * 水位超设计洪水位告警处理
     * 10.水位超设计洪水位告警处理
     * @param templateId
     * @param uuid
     * @param alarmRule
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -121,7 +121,7 @@
            if (null!=adCode){
                // city_cd,county_cd 过滤数据
                String county_cd = jsonArray.getJSONObject(i).getString("county_cd");
                if (county_cd.equals(adCode)) {
                if (null!= county_cd && county_cd.equals(adCode)) {
                    jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i);
                }
            }else {
@@ -131,6 +131,42 @@
        // 设置信息
        smsRequestTemplate.setPersonVOList(personLists);
        smsRequestTemplate.setTemplateContent(lists);
    }
    /**
     * 列名数据转换-- 需合并水库名称
     * @param jsonArray
     * @param columnsList
     * @param smsRequestTemplate
     * @param flag
     * @param adCode
     * @return
     */
    private void getMergeColumnData(JSONArray jsonArray,
                               List<String> columnsList,
                               SmsRequestTemplate smsRequestTemplate,
                               AlarmRule alarmRule,
                               Boolean flag,
                               String adCode) {
        Set<String> resCdSet = new HashSet<>();
        for (int i = 0; i < jsonArray.size(); i++) {
            String res_cd = jsonArray.getJSONObject(i).getString("res_cd");
            resCdSet.add(res_cd);
        }
        // 查询对应的人员
        getPersonListByResList(resCdSet,alarmRule);
        // 设置信息
//        smsRequestTemplate.setPersonVOList(personLists);
//        smsRequestTemplate.setTemplateContent(lists);
    }
    /**
     * 查询对应的用户及水库信息
     * @param resCdSet
     * @param alarmRule
     */
    private void getPersonListByResList(Set<String> resCdSet, AlarmRule alarmRule) {
        // 查询对应的用户及水库信息
    }
    /**
@@ -298,9 +334,11 @@
            list.addAll(personVOList);
        }
        //2. 根据水库编号及责任人类型查询相关责任人信息
        List<PersonVO> personVOList1 = attResManagePersonClient.getPersonListByResGuid(res_cd,String.join(",",personList));
        // 合并人员数据
        list.addAll(personVOList1);
        if (personList.size() > 0) {
            List<PersonVO> personVOList1 = attResManagePersonClient.getPersonListByResGuid(res_cd, String.join(",", personList));
            // 合并人员数据
            list.addAll(personVOList1);
        }
        // 返回数据
        return list;
    }
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -80,25 +80,12 @@
     */
    public String waterInfoNotHandle(String arg1, String arg2) {
        String templateId = "2431012216668";
        String adCode = "421303000000";
        String uuid = templateId + UUID.randomUUID().toString();
        // 查询当前策略对应的告警规则信息
        AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
        if (null!=alarmRule) {
            // 调用中台服务接口查询数据
            JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_null_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,null);
            // 拼接内容后面的联系方式,当前模板拼接平台服务电话
            // 遍历,拼接平台服务电话
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 保存告警记录信息
                AlarmRecord alarmRecord = noticeHandle.saveAlarmRecord(list,alarmRule,uuid);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
            }
            // 调用短信服务
            smsService.sendSignMsg(smsRequestTemplate);
            asyncNoticeHandle.waterInfoNotHandle(alarmRule,templateId,uuid,adCode,false);
        }
        // 返回
        return "水位信息接收不到";
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java
@@ -92,4 +92,10 @@
     * @param list
     */
    void sendEmailMsg(List<String> list, SmsRequest smsRequest);
    /**
     * 发送合并水库名短信
     * @param smsRequestTemplate
     */
    void sendMergeSignMsg(SmsRequestTemplate smsRequestTemplate);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -8,6 +8,7 @@
import cn.gistack.alerts.alarmRule.entity.AlarmRecordDetail;
import cn.gistack.alerts.alarmRule.entity.AlarmRule;
import cn.gistack.alerts.alarmRule.service.AlarmRecordDetailService;
import cn.gistack.alerts.alarmRule.vo.AlarmRecordDetailVO;
import cn.gistack.alerts.notice.service.impl.NoticeHandle;
import cn.gistack.alerts.notice.util.FormatUtil;
import cn.gistack.alerts.sms.constant.MinConstant;
@@ -24,6 +25,7 @@
import cn.gistack.alerts.sms.util.SmsUtils;
import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
import cn.gistack.alerts.sms.vo.SmsResponseVO;
import cn.gistack.alerts.sms.vo.Temp;
import cn.gistack.sm.intelligentCall.entity.CallNotFillRecord;
import cn.gistack.sm.intelligentCall.feign.OutCallClient;
import cn.gistack.sm.message.entity.MessageRecord;
@@ -109,90 +111,8 @@
        return list;
    }
    /**
     * 发送 具名 变量模板短信(告警定制)-- 动态发送-一个一个发
     * @param smsRequestTemplate
     * @return
     */
    @Override
    public Map<String, Object> sendSignMsg(SmsRequestTemplate smsRequestTemplate) {
        // 取出数据
        SMSSendRequest request = new SMSSendRequest();
        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
        AlarmRule alarmRule = smsRequestTemplate.getAlarmRule();
        request.setTemplateId(smsTemplate.getTemplateId());
        List<List<String>> templateContent = smsRequestTemplate.getTemplateContent();
        // 先保存结果记录
        SmsResult smsResult = saveSendResult(null,null,request, templateContent.size());
        List<SmsRecord> smsRecordList = new ArrayList<>();
        List<MessageRecord> messageRecordList = new ArrayList<>();
        // 遍历处理
        for (List<String> list : templateContent) {
            // 设置站内信记录信息
            MessageRecord messageRecord = new MessageRecord();
            messageRecord.setTheme(alarmRule.getRuleName());
            messageRecord.setSender(AuthUtil.getUserId().toString());
            messageRecord.setSource("智能告警");
            messageRecord.setStatus(0);
            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[] 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);
            SmsRecord smsRecord = new SmsRecord();
            if (null != smsResult){
                alarmRecordDetail.setPhone(list.get(0));
                // 设置手机号
                request.setUserNumber(list.get(0));
                messageRecord.setRecipient(list.get(0));
                // 内容处理
                String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
                // 短信内容拼接(完成发送的结果信息)
                // 需要删除最前面的手机号
                list.remove(0);
                // 格式转换
                String format = String.format(s, list.toArray());
                // 设置内容
                request.setMessageContent(format);
                messageRecord.setContent(format);
                messageRecordList.add(messageRecord);
                // 保存短信发送记录
                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);
        }
        if (smsRequestTemplate.getIsSendStation()) {
            // 保存站内信信息
            noticeHandle.saveMessageRecord(messageRecordList);
        }
        Map<String, Object> map = new HashMap<>(2);
        map.put("smsRecord",smsRecordList.size());
        // 返回
        return map;
    }
//    /**
//     * 发送 具名 变量模板短信(告警定制)--动态批量发送
//     * 发送 具名 变量模板短信(告警定制)-- 动态发送-一个一个发
//     * @param smsRequestTemplate
//     * @return
//     */
@@ -201,31 +121,119 @@
//        // 取出数据
//        SMSSendRequest request = new SMSSendRequest();
//        SmsTemplate smsTemplate = smsRequestTemplate.getSmsTemplate();
//        AlarmRule alarmRule = smsRequestTemplate.getAlarmRule();
//        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<>();
//        List<MessageRecord> messageRecordList = new ArrayList<>();
//        // 遍历处理
//        for (List<String> list : templateContent) {
//            // 设置站内信记录信息
//            MessageRecord messageRecord = new MessageRecord();
//            messageRecord.setTheme(alarmRule.getRuleName());
//            messageRecord.setSender(AuthUtil.getUserId().toString());
//            messageRecord.setSource("智能告警");
//            messageRecord.setStatus(0);
//
//            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[] 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);
//
//            SmsRecord smsRecord = new SmsRecord();
//            if (null != smsResult){
//                alarmRecordDetail.setPhone(list.get(0));
//                // 设置手机号
//                request.setUserNumber(list.get(0));
//                messageRecord.setRecipient(list.get(0));
//                // 内容处理
//                String s = smsTemplate.getContent().replaceAll("\\{.+?\\}", "%s");
//                // 短信内容拼接(完成发送的结果信息)
//                // 需要删除最前面的手机号
//                list.remove(0);
//                // 格式转换
//                String format = String.format(s, list.toArray());
//                // 设置内容
//                request.setMessageContent(format);
//                messageRecord.setContent(format);
//                messageRecordList.add(messageRecord);
//                // 保存短信发送记录
//                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);
//        if (null!=smsRequestTemplate.getIsSendStation() && smsRequestTemplate.getIsSendStation()) {
//            // 保存站内信信息
//            noticeHandle.saveMessageRecord(messageRecordList);
//        }
//        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();
        // 是否同时发送站内信
        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(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);
        // 返回
        return params;
    }
    /**
     * 获取用户告警的集合
@@ -251,16 +259,28 @@
     * @param smsTemplate
     * @param templateContent
     * @param request
     * @param request
     * @param request
     * @return
     */
    private List<SmsRecord> saveAlertsAndSmsDetail(SmsResult smsResult,
                                        ComResult<DynSMSSendDataResult> resultComResult,
                                        SmsTemplate smsTemplate,
                                        List<List<String>> templateContent,
                                        SMSSendRequest request) {
                                        SMSSendRequest request,
                                        AlarmRule alarmRule,
                                        Boolean isSendStation) {
        List<SmsRecord> smsRecordList = new ArrayList<>();
        List<MessageRecord> messageRecordList = new ArrayList<>();
        // 遍历处理
        for (List<String> list : templateContent) {
            // 设置站内信记录信息
            MessageRecord messageRecord = new MessageRecord();
            messageRecord.setTheme(alarmRule.getRuleName());
            messageRecord.setSender(AuthUtil.getUserId().toString());
            messageRecord.setSource("智能告警");
            messageRecord.setStatus(0);
            // 设置告警记录信息
            AlarmRecordDetail alarmRecordDetail = new AlarmRecordDetail();
            alarmRecordDetail.setReservoirNumber(list.get(0));
            alarmRecordDetail.setAlarmRecordId(Long.parseLong(list.get(list.size() - 1)));
@@ -272,6 +292,7 @@
            SmsRecord smsRecord = new SmsRecord();
            if (null != smsResult){
                alarmRecordDetail.setPhone(list.get(0));
                messageRecord.setRecipient(list.get(0));
                // 设置手机号
                request.setUserNumber(list.get(0));
                // 内容处理
@@ -283,6 +304,8 @@
                String format = String.format(s, list.toArray());
                // 设置内容
                request.setMessageContent(format);
                messageRecord.setContent(format);
                messageRecordList.add(messageRecord);
                // 保存短信发送记录
                smsRecord = saveSendRecord(request, resultComResult.getCode().toString(), resultComResult.getMsg(), smsResult.getId());
                if (null != smsRecord){
@@ -294,6 +317,10 @@
                }
            }
            smsRecordList.add(smsRecord);
        }
        if (isSendStation) {
            // 保存站内信信息
            noticeHandle.saveMessageRecord(messageRecordList);
        }
        // 返回
        return smsRecordList;
@@ -381,7 +408,7 @@
    /**
     * 发送记录保存
     * @param code 响应消息cdoe
     * @param code 响应消息code
     * @param msg 响应消息
     * @param request 发送信息
     * @param number 号码个数
@@ -530,10 +557,10 @@
     */
    private ComResult<DynSMSSendDataResult> sendDynSMSSendDataResultComResult(String templateId, String[][] dyns) {
        //请求参数
//        DynSMSSendRequestDTO sendRequest = new DynSMSSendRequestDTO();
        DynSMSSendRequest sendRequest = new DynSMSSendRequest();
        // 相同号码,不同内容,不需要去重处理--暂时不用,等短信厂家通知,未上线 2023.07.07
//        sendRequest.setDuplicateRemoval("1");
        DynSMSSendRequestDTO sendRequest = new DynSMSSendRequestDTO();
//        DynSMSSendRequest sendRequest = new DynSMSSendRequest();
        // 相同号码,不同内容,不需要去重处理
        sendRequest.setDuplicateRemoval("1");
        sendRequest.setTemplateId(templateId);
        sendRequest.setDynData(dyns);
        // 发送
@@ -725,4 +752,95 @@
        // 批量发送短信
        Map<String, Object> batchSendSmsMap = batchSendSms(hashSet, titleArr, param, smsTemplate,errPhones);
    }
    /**
     * 发送合并水库名短信
     * @param smsRequestTemplate
     */
    @Override
    public void sendMergeSignMsg(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(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) -> {
            List<AlarmRecordDetailVO> alarmRecordDetailList = new ArrayList<>();
            StringBuilder builder = new StringBuilder();
            StringBuilder smsRecordBuilder = new StringBuilder();
            builder.append(s).append(",");
            // 水库去重
//            List<Temp> tempListNew = temps.stream().collect(
//                Collectors.collectingAndThen(
//                    Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Temp::getReservoirCode))), ArrayList::new)
//            );
            // 如果一人对应水库数量超过30个,则分批发送
            List<List<Temp>> lists = Lists.partition(new ArrayList<>(temps), 30);
            for (List<Temp> list : lists) {
                // 遍历
                for (Temp temp : list) {
                    builder.append(temp.getReservoirName()).append(",");
                    smsRecordBuilder.append(temp.getReservoirName()).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) {
                    for (AlarmRecordDetailVO alarmRecordDetail : alarmRecordDetailList) {
                        // 短信内容拼接(完成发送的结果信息)
                        String formatContent = String.format(str, alarmRecordDetail.getReservoirName().split(","));
                        alarmRecordDetail.setAlarmContent(formatContent);
                        alarmRecordDetail.setSendRecordId(smsRecord.getId());
                        alarmRecordDetail.setCreateTime(new Date());
                        // 保存告警记录详情信息
                        boolean save = alarmRecordDetailService.save(alarmRecordDetail);
                    }
                }
            }
        });
    }
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/vo/Temp.java
New file
@@ -0,0 +1,29 @@
package cn.gistack.alerts.sms.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class Temp implements Serializable {
    /**
     * 手机号码
     */
    private String phone;
    /**
     * 水库编号
     */
    private String reservoirCode;
    /**
     * 水库名称
     */
    private String reservoirName;
    /**
     * 告警记录id
     */
    private String alarmRecordId;
}
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.xml
@@ -61,7 +61,7 @@
        <if test="param1!=null">
            <choose>
                <when test="param2.super!=null and param1==0">
                    and menu.parent_id = #{param1} and (menu.name = 'web' or menu.name = 'newapp' or menu.name = 'app')
                    and menu.parent_id = #{param1} and (menu.name = 'web' or menu.name = 'newWeb' or menu.name = 'app')
                </when>
                <otherwise>
                    and menu.parent_id = #{param1}
@@ -533,7 +533,7 @@
    <!--查询菜单列表(排除 web,app 之外的菜单)-->
    <select id="grantTreeNew" resultMap="treeNodeResultMap">
        select id, parent_id, name as title, id as "value", id as "key" from blade_menu
        where is_deleted = 0 start with ( name = 'web' or  name = 'app') CONNECT BY PRIOR id =  parent_id order by sort asc
        where is_deleted = 0 start with ( name = 'web' or name = 'app' or name = 'newWeb') CONNECT BY PRIOR id =  parent_id order by sort asc
    </select>
</mapper>