zhongrj
2023-06-29 0e06fd9184c0cda32a8c55ed1f4a295305d647fd
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -31,6 +31,7 @@
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -338,66 +339,71 @@
   @Override
   public String sendSmsByOutCallNotConnect(String taskId,String time) {
      String templateId = "2431012249882";
      // 查询当前任务未接通的人员信息(包含水库编号)
      List<Map<String, Object>> list = smsTemplateService.getNotConnectPatrolPersonList(taskId,null);
      SmsTemplate smsTemplate = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("template_id", templateId));
      if (list.size()>0) {
         List<Map<String, Object>> newList = new ArrayList<>();
         // 比对
         for (Map<String, Object> map : list) {
            // 获取任务id
            String redisByTaskId = bladeRedis.get(MinConstant.is_send_prefix + map.get("callId").toString());
            // 如果为null,并且不能匹配,加入发送短信集合
            if (redisByTaskId == null || !StringUtil.equalsIgnoreCase(redisByTaskId, taskId)) {
               newList.add(map);
            }
         }
         if (newList.size() > 0) {
            // 组装短信数据
            StringBuilder builder = new StringBuilder();
            // 遍历
            for (Map<String, Object> map : newList) {
               builder.append(map.get("userPhone") + ",")
                  .append(time + ",")
                  .append(map.get("waterName") + ",")
                  .append(MinConstant.fillWaterInfoUrl +"?" + "callId=" + map.get("callId"))
                  .append(";");
            }
            String datas = builder.toString();
            String title = "手机号码,时间范围,水库名称,访问链接";
            String[] titleArr = title.split(",");
            String[] rows = datas.split(";");
            String[][] dyns = new String[rows.length + 1][titleArr.length];
            dyns[0] = titleArr;
            int rowNum = 1;
            for (String row : rows) {
               String[] cols = row.split(",");
               dyns[rowNum++] = cols;
            }
            ComResult<DynSMSSendDataResult> resultComResult = sendDynSMSSendDataResultComResult(templateId, dyns);
            SmsResult smsResult = getSaveSmsResult(templateId, rows, "");
            if (null != smsResult) {
               List<SmsRecord> smsRecordList = new ArrayList<>();
               Pattern compile = Pattern.compile("[^0-9]");
               Integer result = Integer.parseInt(compile.matcher(time).replaceAll("").trim());
               // 分钟或小时
               Long validTime = time.contains("分钟") ? 60L * result : 60L * 60 * result;
               // 遍历保存
               for (Map<String, Object> map : newList) {
                  // 保存redis
                  // 已发送短信的人员对应呼叫id的过期时间
                  bladeRedis.setEx(MinConstant.is_send_prefix + map.get("callId").toString(), taskId, MinConstant.is_send_time);
                  // 填报过期时间
                  bladeRedis.setEx(MinConstant.fill_info_prefix + map.get("callId").toString(), taskId, validTime);
                  // 封装短息记录数据
                  SmsRecord smsRecord = getSmsRecord(time, templateId, smsTemplate, resultComResult, smsResult, map);
                  // 加入集合
                  smsRecordList.add(smsRecord);
      // 查询符合当前时间外呼任务id集合
      String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
      List<String> taskIdList = smsTemplateService.getTaskIdListByTime(format);
      if (taskIdList.size()>0) {
         // 查询当前任务未接通的人员信息(包含水库编号)
         List<Map<String, Object>> list = smsTemplateService.getNotConnectPatrolPersonList(taskIdList, null);
         SmsTemplate smsTemplate = smsTemplateService.getOne(new QueryWrapper<SmsTemplate>().eq("template_id", templateId));
         if (list.size() > 0) {
            List<Map<String, Object>> newList = new ArrayList<>();
            // 比对
            for (Map<String, Object> map : list) {
               // 获取任务id
               String redisByTaskId = bladeRedis.get(MinConstant.is_send_prefix + map.get("callId").toString());
               // 如果为null,并且不能匹配,加入发送短信集合
               if (redisByTaskId == null || !StringUtil.equalsIgnoreCase(redisByTaskId, taskId)) {
                  newList.add(map);
               }
               // 批量保存记录
               Integer count = smsRecordService.batchSaveSendRecord(smsRecordList);
               // 返回
               return count.toString();
            }
            if (newList.size() > 0) {
               // 组装短信数据
               StringBuilder builder = new StringBuilder();
               // 遍历
               for (Map<String, Object> map : newList) {
                  builder.append(map.get("userPhone") + ",")
                     .append(time + ",")
                     .append(map.get("waterName") + ",")
                     .append(MinConstant.fillWaterInfoUrl + "?" + "callId=" + map.get("callId"))
                     .append(";");
               }
               String datas = builder.toString();
               String title = "手机号码,时间范围,水库名称,访问链接";
               String[] titleArr = title.split(",");
               String[] rows = datas.split(";");
               String[][] dyns = new String[rows.length + 1][titleArr.length];
               dyns[0] = titleArr;
               int rowNum = 1;
               for (String row : rows) {
                  String[] cols = row.split(",");
                  dyns[rowNum++] = cols;
               }
               ComResult<DynSMSSendDataResult> resultComResult = sendDynSMSSendDataResultComResult(templateId, dyns);
               SmsResult smsResult = getSaveSmsResult(templateId, rows, "");
               if (null != smsResult) {
                  List<SmsRecord> smsRecordList = new ArrayList<>();
                  Pattern compile = Pattern.compile("[^0-9]");
                  Integer result = Integer.parseInt(compile.matcher(time).replaceAll("").trim());
                  // 分钟或小时
                  Long validTime = time.contains("分钟") ? 60L * result : 60L * 60 * result;
                  // 遍历保存
                  for (Map<String, Object> map : newList) {
                     // 保存redis
                     // 已发送短信的人员对应呼叫id的过期时间
                     bladeRedis.setEx(MinConstant.is_send_prefix + map.get("callId").toString(), taskId, MinConstant.is_send_time);
                     // 填报过期时间
                     bladeRedis.setEx(MinConstant.fill_info_prefix + map.get("callId").toString(), taskId, validTime);
                     // 封装短息记录数据
                     SmsRecord smsRecord = getSmsRecord(time, templateId, smsTemplate, resultComResult, smsResult, map);
                     // 加入集合
                     smsRecordList.add(smsRecord);
                  }
                  // 批量保存记录
                  Integer count = smsRecordService.batchSaveSendRecord(smsRecordList);
                  // 返回
                  return count.toString();
               }
            }
         }
      }
@@ -499,8 +505,10 @@
      String taskId = bladeRedis.get(MinConstant.fill_info_prefix + callId);
      // 判断
      if (null!=taskId && !taskId.equals("")){
         List<String> taskIdList = new ArrayList<>();
         taskIdList.add(taskId);
         // 通过手机号和外呼任务id 查询水库人员信息
         list = smsTemplateService.getNotConnectPatrolPersonList(taskId,callId);
         list = smsTemplateService.getNotConnectPatrolPersonList(taskIdList,callId);
         // 查询是否填报
         CallNotFillRecord callNotFillRecordInfo = outCallClient.getCallNotFillRecordInfo(callId);
         if (callNotFillRecordInfo != null){