xieb
2023-10-19 1dd5d8f8a616f5cf3caa7828d46989c7d3dcafc4
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java
@@ -7,20 +7,33 @@
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
import cn.gistack.alerts.sms.entity.SmsRequest;
import cn.gistack.alerts.sms.entity.SmsResult;
import cn.gistack.alerts.sms.excel.SendRainSmsExcel;
import cn.gistack.alerts.sms.excel.SendSmsExcel;
import cn.gistack.alerts.sms.listener.ExcelListener;
import cn.gistack.alerts.sms.service.SmsService;
import cn.gistack.alerts.sms.util.SmsUtils;
import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
import cn.gistack.alerts.sms.vo.SmsResponseVO;
import cn.gistack.sm.intelligentCall.excel.CallExcel;
import cn.gistack.system.user.entity.User;
import cn.gistack.system.user.feign.IUserClient;
import com.alibaba.excel.EasyExcel;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Map;
import static cn.gistack.alerts.sms.util.SmsUtils.validator;
import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
/**
@@ -58,64 +71,15 @@
         // 发送操作
         ComResult<SMSSendDataResult> resultComResult = SmsUtils.sendMsg(request);
         // 记录发送记录操作
         SmsResult smsResult = smsService.saveSendResult(request, 1);
         SmsResult smsResult = smsService.saveSendResult(resultComResult.getCode().toString(),resultComResult.getMsg(),request, 1);
         if (null != smsResult){
            smsService.saveSendRecord(request, resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId());
            smsService.saveSendRecord(request, resultComResult.getCode().toString(),resultComResult.getMsg(),smsResult.getId());
         }
         // 返回发送信息
         return R.data(resultComResult);
      }
      // 返回发送信息
      return R.fail(400,"该手机号不存在!");
   }
   /**
    * 短信动态内容发送通用方法(仅支持 具名变量 {手机号码:11} 模式的模板)
    * request 必须包含手机号,模板id,拼接好的内容
    * @param smsRequest
    * @return
    */
   @PostMapping("/sendFixedContentByNamedVariableModel")
   public R sendFixedContentByNamedVariableModel(@RequestBody SmsRequest smsRequest){
      // 处理数据(可能是多个手机号情况)
      List<String> list = Arrays.asList(smsRequest.getPhone().split(","));
      // 保存发送结果
      // 记录保存
      SMSSendRequest request = new SMSSendRequest();
      request.setMessageContent(smsRequest.getContent());
      request.setTemplateId(smsRequest.getTemplateId());
      SmsResult smsResult = smsService.saveSendResult(request, list.size());
      // 遍历
      for (String phone : list) {
         DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest();
         dynSMSSendRequest.setTemplateId(smsRequest.getTemplateId());
         dynSMSSendRequest.setDynData(smsRequest.getParams());
         // 手机号校验
         if(validator(phone)) {
            // 发送邮件短信
            ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(dynSMSSendRequest);
            // 记录保存
            if (null != smsResult) {
               SMSSendRequest smsSendRequest = new SMSSendRequest();
               smsSendRequest.setUserNumber(phone);
               smsSendRequest.setMessageContent(smsRequest.getContent());
               smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
               // 记录发送记录操作
               smsService.saveSendRecord(smsSendRequest, resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId());
            }
         }else {
            // 手机号有误记录
            // 记录保存
            SMSSendRequest smsSendRequest = new SMSSendRequest();
            smsSendRequest.setUserNumber(phone);
            smsSendRequest.setMessageContent(smsRequest.getContent());
            smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
            // 记录发送记录操作
            smsService.saveSendRecord(smsSendRequest, 400,"手机号错误未发送...",null);
         }
      }
      return R.status(true);
   }
   /**
@@ -137,9 +101,9 @@
         // 发送操作
         ComResult<SMSSendDataResult> resultComResult = SmsUtils.sendMsg(request);
         // 记录发送记录操作
         SmsResult smsResult = smsService.saveSendResult(request, 1);
         SmsResult smsResult = smsService.saveSendResult(resultComResult.getCode().toString(),resultComResult.getMsg(),request, 1);
         if (null != smsResult){
            smsService.saveSendRecord(request, resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId());
            smsService.saveSendRecord(request, resultComResult.getCode().toString(),resultComResult.getMsg(),smsResult.getId());
         }
         // 保存验证码到 redis
         saveCodeForRedis(request.getUserNumber(), randNumber);
@@ -169,24 +133,6 @@
   }
   /**
    * 校验手机号码
    */
   public static boolean validator(String phone) {
      if (null!=phone && !phone.equals("")) {
         String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
         if (phone.length() != 11) {
            return false;
         } else {
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(phone);
            boolean isMatch = m.matches();
            return isMatch;
         }
      }
      return false;
   }
   /**
    * 保存验证码到 redis
    * @param userNumber
    * @param randNumber
@@ -196,7 +142,7 @@
   }
   /**
    * 发送邮件提醒
    * 发送待办提醒
    * @param smsRequest
    * @return
    */
@@ -205,40 +151,8 @@
      // 处理数据(可能是多个手机号情况)
      List<String> list = Arrays.asList(smsRequest.getPhone().split(","));
      // 保存发送结果
      // 记录保存
      SMSSendRequest request = new SMSSendRequest();
      request.setMessageContent(smsRequest.getContent());
      request.setTemplateId("2431012165299");
      SmsResult smsResult = smsService.saveSendResult(request, list.size());
      // 遍历
      for (String phone : list) {
         DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest();
         dynSMSSendRequest.setTemplateId("2431012165299");
         dynSMSSendRequest.setDynData(new String[][]{{"手机号码", "标题"}, {phone, smsRequest.getContent()}});
         // 手机号校验
         if(validator(phone)) {
            // 发送邮件短信
            ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(dynSMSSendRequest);
            // 记录保存
            if (null != smsResult) {
               SMSSendRequest smsSendRequest = new SMSSendRequest();
               smsSendRequest.setUserNumber(phone);
               smsSendRequest.setMessageContent(smsRequest.getContent());
               smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
               // 记录发送记录操作
               smsService.saveSendRecord(smsSendRequest, resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId());
            }
         }else {
            // 手机号有误记录
            // 记录保存
            SMSSendRequest smsSendRequest = new SMSSendRequest();
            smsSendRequest.setUserNumber(phone);
            smsSendRequest.setMessageContent(smsRequest.getContent());
            smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
            // 记录发送记录操作
            smsService.saveSendRecord(smsSendRequest, 400,"手机号错误未发送...",null);
         }
      }
      smsService.sendEmailMsg(list,smsRequest);
      // 返回
      return R.status(true);
   }
@@ -254,7 +168,7 @@
   /**
    * 发送 具名 变量模板短信
    * 发送 具名 变量模板短信(告警定制)
    * @param smsRequest 发送对象
    * @return
    */
@@ -262,4 +176,91 @@
   public R sendSignMsg(@RequestBody SmsRequestTemplate smsRequest){
      return R.data(smsService.sendSignMsg(smsRequest));
   }
   /**
    * 发送降雨短信
    * @param params 发送对象
    * @return
    */
   @PostMapping("/sendSignRainMsg")
   public R sendSignRainMsg(@RequestBody Map<String,Object> params){
      return R.data(smsService.sendSignRainMsg(params));
   }
   /**
    * 通过手机号获取外呼未接通已发短信通知的人员水库信息
    * @param callId 呼叫id
    * @return
    */
   @GetMapping("/getCallNotConnectSmsNoticeInfo")
   public R getCallNotConnectSmsNoticeInfo(String callId){
      return R.data(smsService.getCallNotConnectSmsNoticeInfo(callId));
   }
   /**
    * 导入表格发送降雨短信
    * @param file excel文件
    * @param startTime 短信内容填报起始时间
    * @param endTime 短信内容填报截止时间
    * @return
    */
   @PostMapping("/import-send-rain-sms")
   public R importSendRainSms(MultipartFile file,String startTime,String endTime){
      ExcelListener<SendRainSmsExcel> listener = new ExcelListener<>();
      //headRowNumber(1)从第2行开始读取,使用getDatas()方法取出数据
      try {
         EasyExcel.read(file.getInputStream(), SendRainSmsExcel.class, listener).headRowNumber(1).sheet(0).doRead();
      } catch (IOException e) {
         e.printStackTrace();
      }
      List<SendRainSmsExcel> list = listener.getDatas();
      // 导入并返回
      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));
   }
   /**
    * 导入表格发送预警短信
    * @param file excel文件
    * @param templateId 模板id
    * @param param 通用参数
    * @param content 发送内容
    * @return
    */
   @PostMapping("/import-send-sms")
   public R importSendSms(MultipartFile file,String templateId,String param,String content){
      ExcelListener<SendSmsExcel> listener = new ExcelListener<>();
      //headRowNumber(1)从第2行开始读取,使用getDatas()方法取出数据
      try {
         EasyExcel.read(file.getInputStream(), SendSmsExcel.class, listener).headRowNumber(1).sheet(0).doRead();
      } catch (IOException e) {
         e.printStackTrace();
      }
      List<SendSmsExcel> list = listener.getDatas();
      // 导入并返回
      return R.data(smsService.importSendSms(list,templateId,param,content));
   }
   /**
    * 导出模板
    */
   @GetMapping("/export-template")
   @ApiOperation(value = "导出模板")
   public void exportTemplate(HttpServletResponse response) {
      List<SendSmsExcel> list = new ArrayList<>();
      ExcelUtil.export(response, "短信发送数据模板", "短信发送数据表", list, SendSmsExcel.class);
   }
}