zhongrj
2023-07-13 f2bfb4490106abcb41e3c7e09159e89a0f7219c0
水位缺失预警调整,重复水库进行去重,合并水库最多30个发送
6 files modified
179 ■■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java 10 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 100 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java 11 ●●●●● 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 44 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/AsyncNoticeHandle.java
@@ -36,9 +36,9 @@
     */
    public void waterInfoNotHandle(AlarmRule alarmRule, String templateId, String uuid, String adCode,Boolean isSendStation) {
        // 调用中台服务接口查询数据
        JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_null_api);
        JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.no_z_last_api_all);
        // 只发短信,将发短信信息组装好
        SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,adCode);
        SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterInfoNotList,false,adCode,uuid);
        // 遍历
        for (List<String> list : smsRequestTemplate.getTemplateContent()) {
            // 保存告警记录信息
@@ -64,7 +64,7 @@
        // 调用中台服务接口查询数据
        JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
        // 只发送站内信
        SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
        SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null,uuid);
        // 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
        // 遍历,拼接县水利部人员电话
        for (List<String> list : smsRequestTemplate.getTemplateContent()) {
@@ -100,7 +100,7 @@
        JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_z_res_api);
        // 只发短信,将发短信信息组装好
        SmsRequestTemplate smsRequestTemplate
            = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true,adCode);
            = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true,adCode,uuid);
        smsRequestTemplate.setIsSendStation(isSendStation);
        // 拼接后面内容
@@ -137,7 +137,7 @@
        JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.over_des_rz_warn_api);
        // 只发短信,将发短信信息组装好
        SmsRequestTemplate smsRequestTemplate
            = noticeHandle.getSendSmsTemplate(ztData, templateId, alarmRule, ZtApiDataColumnConstant.waterMoreDesignList, true, null);
            = noticeHandle.getSendSmsTemplate(ztData, templateId, alarmRule, ZtApiDataColumnConstant.waterMoreDesignList, true, null,uuid);
        // 拼接后面内容
        if (smsRequestTemplate.getPersonVOList().size() > 0) {
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -75,6 +75,7 @@
     * @param columnsList 列名集合信息
     * @param flag 是否包含日期
     * @param adCode 行政区编号
     * @param uuid 本次执行临时编号
     * @return
     */
    public SmsRequestTemplate getSendSmsTemplate(JSONArray jsonArray,
@@ -82,7 +83,8 @@
                                                  AlarmRule alarmRule,
                                                  List<String> columnsList,
                                                  Boolean flag,
                                                  String adCode) {
                                                  String adCode,
                                                  String uuid) {
        // 通过模板id 查询模板相关信息
        SmsTemplate smsTemplate = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("template_id",templateId).eq("is_deleted",0));
        if (null != smsTemplate) {
@@ -93,7 +95,7 @@
            // 解析模板并设置 title
            smsRequestTemplate.setTitle(FormatUtil.composeMessage(smsTemplate.getContent()));
            // 列名数据转换
            getColumnData(jsonArray, columnsList,smsRequestTemplate,alarmRule,flag,adCode);
            getColumnData(jsonArray, columnsList,smsRequestTemplate,alarmRule,flag,adCode,uuid);
            //返回
            return smsRequestTemplate;
        }
@@ -107,6 +109,7 @@
     * @param smsRequestTemplate
     * @param flag
     * @param adCode
     * @param uuid
     * @return
     */
    private void getColumnData(JSONArray jsonArray,
@@ -114,59 +117,25 @@
                               SmsRequestTemplate smsRequestTemplate,
                               AlarmRule alarmRule,
                               Boolean flag,
                               String adCode) {
                               String adCode,
                               String uuid) {
        List<PersonVO> personLists = new ArrayList<>();
        List<List<String>> lists = new ArrayList<>();
        Set<String> set = new HashSet<>();
        for (int i = 0; i < jsonArray.size(); i++) {
            if (null!=adCode){
                // city_cd,county_cd 过滤数据
                String county_cd = jsonArray.getJSONObject(i).getString("county_cd");
                if (null!= county_cd && county_cd.equals(adCode)) {
                    jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i);
                    jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i,uuid,set);
                }
            }else {
                jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i);
                jointData(jsonArray, columnsList, alarmRule, flag, personLists, lists, i,uuid,set);
            }
        }
        // 设置信息
        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) {
        // 查询对应的用户及水库信息
    }
    /**
@@ -180,27 +149,40 @@
     * @param i
     * @return
     */
    private void jointData(JSONArray jsonArray, List<String> columnsList, AlarmRule alarmRule, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i) {
    private void jointData(JSONArray jsonArray,
                           List<String> columnsList,
                           AlarmRule alarmRule,
                           Boolean flag,
                           List<PersonVO> personLists,
                           List<List<String>> lists,
                           int i,
                           String uuid,
                           Set<String> set) {
        // 根据水库编号,所在区域查询需要发送的人员手机号及设置
        String res_cd = jsonArray.getJSONObject(i).getString("res_cd");
        // 取出测站编码
        String stcd = jsonArray.getJSONObject(i).getString("stcd");
        // 判断时间是否存在
        String tm = jsonArray.getJSONObject(i).getString("tm");
        String day = "";
        String hour = "";
        String minute = "";
        if (null != tm && !tm.equals("") && flag) {
            flag = true;
            // 加入天,时,分
            day = tm.substring(8, 10);
            hour =tm.substring(11, 13);
            minute = tm.substring(14, 16);
        } else {
            flag = false;
        String tempStr = uuid + res_cd;
        // 去重水库操作,如果有重复的水库则不操作
        if (!set.contains(tempStr)) {
            set.add(tempStr);
            // 取出测站编码
            String stcd = jsonArray.getJSONObject(i).getString("stcd");
            // 判断时间是否存在
            String tm = jsonArray.getJSONObject(i).getString("tm");
            String day = "";
            String hour = "";
            String minute = "";
            if (null != tm && !tm.equals("") && flag) {
                flag = true;
                // 加入天,时,分
                day = tm.substring(8, 10);
                hour = tm.substring(11, 13);
                minute = tm.substring(14, 16);
            } else {
                flag = false;
            }
            // 获取告警人员信息
            getAlarmPersonList(jsonArray, columnsList, alarmRule, flag, personLists, lists, i, res_cd, day, hour, minute, stcd);
        }
        // 获取告警人员信息
        getAlarmPersonList(jsonArray, columnsList, alarmRule, flag, personLists, lists, i, res_cd, day, hour, minute,stcd);
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -80,7 +80,8 @@
     */
    public String waterInfoNotHandle(String arg1, String arg2) {
        String templateId = "2431012216668";
        String adCode = "421303000000";
//        String adCode = "421181000000";
        String adCode = null;
        String uuid = templateId + UUID.randomUUID().toString();
        // 查询当前策略对应的告警规则信息
        AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
@@ -108,7 +109,7 @@
            JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_z_not_normal_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate
                = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false,null);
                = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterDataExcList,false,null,uuid);
            // 拼接后面内容
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 保存告警记录信息
@@ -140,7 +141,7 @@
            // 调用中台服务接口查询数据
            JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_diff_dead_z_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null);
            SmsRequestTemplate smsRequestTemplate = noticeHandle.getSendSmsTemplate(ztData, templateId,alarmRule, ZtApiDataColumnConstant.waterLessDeadList,true,null,uuid);
            // 拼接内容后面的联系方式,当前模板县水利部人员姓名电话
            // 遍历,拼接县水利部人员电话
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java
@@ -211,4 +211,15 @@
        // 导入并返回
        return R.data(smsService.importSendRainSms(list,startTime,endTime));
    }
    /**
     * 批量发送短信(集合数据)
     * @param map (保护参数 1:短信模板id  2:数据集合 list<Map<String,Object>>)
     * @return
     */
    @PostMapping("/batch-send-sms")
    public R batchSendSms(@RequestBody Map<String,Object> map){
        // 导入并返回
        return R.data(smsService.batchSendSms(map));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java
@@ -98,4 +98,11 @@
     * @param smsRequestTemplate
     */
    void sendMergeSignMsg(SmsRequestTemplate smsRequestTemplate);
    /**
     * 批量发送短信(集合数据)
     * @param map (保护参数 1:短信模板id  2:数据集合 list<Map<String,Object>>)
     * @return
     */
    Object batchSendSms(Map<String, Object> map);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -779,19 +779,13 @@
        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) {
                List<AlarmRecordDetailVO> alarmRecordDetailList = new ArrayList<>();
                // 遍历
                for (Temp temp : list) {
                    builder.append(temp.getReservoirName()).append(",");
@@ -830,17 +824,43 @@
                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(","));
                        alarmRecordDetail.setAlarmContent(formatContent);
                        alarmRecordDetail.setSendRecordId(smsRecord.getId());
                        alarmRecordDetail.setCreateTime(new Date());
                        // 保存告警记录详情信息
                        boolean save = alarmRecordDetailService.save(alarmRecordDetail);
                        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);
                }
            }
        });
    }
    /**
     * 批量发送短信(集合数据)
     * @param map (保护参数 1:短信模板id  2:数据集合 list<Map<String,Object>>)
     * @return
     */
    @Override
    public Object batchSendSms(Map<String, Object> map) {
        // 获取模板id
        String templateId = map.get("templateId").toString();
        // 获取集合数据
        List<Map<String,Object>> list = (List<Map<String,Object>>) map.get("list");
        List<String> columnList = (List<String>) map.get("columnList");
        // 遍历
        for (Map<String, Object> param : list) {
            // 放入集合数据
        }
        return null;
    }
}