zhongrj
2023-06-02 ebf10ccf6217dfeebad750b4f4bb9ef4d9af68b0
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
@@ -1,15 +1,10 @@
package cn.gistack.sm.sms.controller;
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest;
import cn.com.flaginfo.sdk.cmc.api.result.ComResult;
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendDataResult;
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
import cn.gistack.sm.sms.entity.SmsRecord;
import cn.gistack.sm.sms.entity.SmsRequest;
import cn.gistack.sm.sms.entity.SmsResult;
import cn.gistack.sm.sms.service.ISmsRecordService;
import cn.gistack.sm.sms.service.ISmsResultService;
import cn.gistack.sm.sms.service.SmsService;
import cn.gistack.alerts.sms.feign.ISmsRecordClient;
import cn.gistack.sm.sms.util.SmsUtils;
import cn.gistack.sm.sms.vo.SmsRequestTemplate;
import cn.gistack.system.user.entity.User;
import cn.gistack.system.user.feign.IUserClient;
import com.alibaba.fastjson.JSON;
@@ -19,8 +14,6 @@
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -37,94 +30,11 @@
@AllArgsConstructor
public class SmsController {
   private final ISmsRecordService smsRecordService;
   private final ISmsResultService smsResultService;
   private final SmsService smsService;
   private final BladeRedis bladeRedis;
   private final IUserClient userClient;
   @GetMapping("/test")
   public void setRedis(){
      saveCodeForRedis("super_admin","123456");
   }
   /**
    * 短信固定内容发送通用方法(仅支持 {xx} 模式的模板)
    * request 必须包含手机号,模板id,拼接好的内容
    * @param request
    * @return
    */
   @PostMapping("/sendFixedContentByXXModel")
   public R sendFixedContentByXXModel(@RequestBody SMSSendRequest request){
      // 手机号码校验
      if(validatePhone(request.getUserNumber())) {
         // 发送操作
         String sendMsg = JSON.toJSONString(SmsUtils.sendMsg(request));
         JSONObject jsonObject = JSON.parseObject(sendMsg);
         // 记录发送记录操作
         SmsResult smsResult = saveSendResult(request, 1);
         if (null != smsResult){
            saveSendRecord(request, sendMsg,smsResult.getId());
         }
         // 返回发送信息
         return R.data(jsonObject);
      }
      // 返回发送信息
      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 = saveSendResult(request, list.size());
      // 遍历
      for (String phone : list) {
         DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest();
         dynSMSSendRequest.setTemplateId(smsRequest.getTemplateId());
         dynSMSSendRequest.setDynData(smsRequest.getParams());
         // 手机号校验
         if(validator(phone)) {
            // 发送邮件短信
            String dynSendMsg = JSON.toJSONString(SmsUtils.dynSendMethod(dynSMSSendRequest));
            // 记录保存
            if (null != smsResult) {
               SMSSendRequest smsSendRequest = new SMSSendRequest();
               smsSendRequest.setUserNumber(phone);
               smsSendRequest.setMessageContent(smsRequest.getContent());
               smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
               // 记录发送记录操作
               saveSendRecord(smsSendRequest, dynSendMsg,smsResult.getId());
            }
         }else {
            // 手机号有误记录
            // 记录保存
            SMSSendRequest smsSendRequest = new SMSSendRequest();
            smsSendRequest.setUserNumber(phone);
            smsSendRequest.setMessageContent(smsRequest.getContent());
            smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
            // 记录发送记录操作
            saveSendRecord(smsSendRequest, "手机号错误未发送...",null);
         }
      }
      return R.status(true);
   }
   private final ISmsRecordClient smsRecordClient;
   /**
    * 发送登录验证码
@@ -143,15 +53,19 @@
         request.setMessageContent(content);
         request.setTemplateId(templateId);
         // 发送操作
         String sendMsg =JSON.toJSONString(SmsUtils.sendMsg(request));
         ComResult<SMSSendDataResult> resultComResult = SmsUtils.sendMsg(request);
         String sendMsg =JSON.toJSONString(resultComResult);
         JSONObject jsonObject = JSON.parseObject(sendMsg);
         // 记录发送记录操作
         SmsResult smsResult = saveSendResult(request, 1);
         if (null != smsResult){
            saveSendRecord(request, sendMsg,smsResult.getId());
         }
         // 保存验证码到 redis
         saveCodeForRedis(request.getUserNumber(), randNumber);
         // 记录发送记录操作
         smsRecordClient.saveSmsRecord(
            request.getUserNumber(),
            request.getMessageContent(),
            request.getTemplateId(),
            resultComResult.getCode(),
            resultComResult.getMsg(),
            1);
         // 返回发送信息
         return R.data(jsonObject);
      }
@@ -202,117 +116,5 @@
    */
   private void saveCodeForRedis(String userNumber, String randNumber) {
      bladeRedis.setEx(PHONE_KEY + userNumber,randNumber,5*60L);
   }
   /**
    * 发送记录保存
    * @param request 发送信息
    * @param sendMsg 响应数据
    * @param resultId 发送结果id
    */
   private void saveSendRecord(SMSSendRequest request, String sendMsg,Long resultId) {
      // 在保存明细
      SmsRecord smsRecord = new SmsRecord();
      smsRecord.setTel(request.getUserNumber());
      smsRecord.setContent(request.getMessageContent());
      smsRecord.setTemplateId(request.getTemplateId());
      smsRecord.setResContent(sendMsg);
      smsRecord.setResultId(resultId);
      // 解析 sendMsg
      JSONObject jsonObject = JSON.parseObject(sendMsg);
      smsRecord.setResponseStatus(jsonObject.getString("code"));
      smsRecord.setResponseMsg(jsonObject.getString("msg"));
      //插入记录
      smsRecordService.save(smsRecord);
   }
   /**
    * 发送记录保存
    * @param request 发送信息
    * @param number 号码个数
    */
   private SmsResult saveSendResult(SMSSendRequest request,Integer number) {
      // 先保存结果表
      SmsResult smsResult = new SmsResult();
      smsResult.setTemplateId(request.getTemplateId());
      smsResult.setContent(request.getMessageContent());
      smsResult.setNumber(number);
      //插入记录
      boolean save = smsResultService.save(smsResult);
      if (save){
         return smsResult;
      }
      // 返回
      return null;
   }
   /**
    * 发送邮件提醒
    * @param smsRequest
    * @return
    */
   @PostMapping("/sendEmailMsg")
   public R sendEmailMsg(@RequestBody SmsRequest smsRequest){
      // 处理数据(可能是多个手机号情况)
      List<String> list = Arrays.asList(smsRequest.getPhone().split(","));
      // 保存发送结果
      // 记录保存
      SMSSendRequest request = new SMSSendRequest();
      request.setMessageContent(smsRequest.getContent());
      request.setTemplateId("2431012165299");
      SmsResult smsResult = 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)) {
            // 发送邮件短信
            String dynSendMsg = JSON.toJSONString(SmsUtils.dynSendMethod(dynSMSSendRequest));
            // 记录保存
            if (null != smsResult) {
               SMSSendRequest smsSendRequest = new SMSSendRequest();
               smsSendRequest.setUserNumber(phone);
               smsSendRequest.setMessageContent(smsRequest.getContent());
               smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
               // 记录发送记录操作
               saveSendRecord(smsSendRequest, dynSendMsg,smsResult.getId());
            }
         }else {
            // 手机号有误记录
            // 记录保存
            SMSSendRequest smsSendRequest = new SMSSendRequest();
            smsSendRequest.setUserNumber(phone);
            smsSendRequest.setMessageContent(smsRequest.getContent());
            smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
            // 记录发送记录操作
            saveSendRecord(smsSendRequest, "手机号错误未发送...",null);
         }
      }
      return R.status(true);
   }
   /**
    * 发送 xx 变量模板短信
    * @param smsRequest 发送对象
    * @return
    */
   @PostMapping("/sendXXMsg")
   public R sendXXMsg(@RequestBody SmsRequestTemplate smsRequest){
      return R.data(smsService.sendXXMsg(smsRequest.getSmsRequest(),smsRequest.getPhoneNumbers()));
   }
   /**
    * 发送 具名 变量模板短信
    * @param smsRequest 发送对象
    * @return
    */
   @PostMapping("/sendSignMsg")
   public R sendSignMsg(@RequestBody SmsRequestTemplate smsRequest){
      return R.data(smsService.sendSignMsg(smsRequest));
   }
}