skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
@@ -3,13 +3,24 @@
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest;
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.service.ISmsRecordService;
import cn.gistack.sm.sms.util.SmsUtils;
import cn.gistack.system.user.entity.User;
import cn.gistack.system.user.feign.IUserClient;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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;
import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
/**
 * 短信发送控制层
@@ -24,31 +35,79 @@
   private final ISmsRecordService smsRecordService;
   private final BladeRedis bladeRedis;
   private final IUserClient userClient;
   @GetMapping("/test")
   public void setRedis(){
      saveCodeForRedis("super_admin","123456");
   }
   /**
    * 发送登录验证码
    * request 必须包含手机号(多个手机号以英文逗号分隔)
    * request 必须包含手机号
    * @param request
    * @return
    */
   @PostMapping("/sendCode")
   public R test(@RequestBody SMSSendRequest request){
      //设置模板相关信息
      String templateId = "2431012205498";
      String randNumber = SmsUtils.getRandNumber();
      String content = "您的登录验证码是" + randNumber + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
      request.setMessageContent(content);
      request.setTemplateId(templateId);
      // 发送操作
      String sendMsg = SmsUtils.sendMsg(request);
      // 记录发送记录操作
      saveSendRecord(request,sendMsg);
      // 保存验证码到 redis
      saveCodeForRedis(request.getUserNumber(),randNumber);
      // 手机号码校验
      if(validatePhone(request.getUserNumber())) {
         //设置模板相关信息
         String templateId = "2431012205498";
         String randNumber = SmsUtils.getRandNumber();
         String content = "您的登录验证码是" + randNumber + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
         request.setMessageContent(content);
         request.setTemplateId(templateId);
         // 发送操作
         String sendMsg = SmsUtils.sendMsg(request);
         JSONObject jsonObject = JSON.parseObject(sendMsg);
         // 记录发送记录操作
         saveSendRecord(request, sendMsg);
         // 保存验证码到 redis
         saveCodeForRedis(request.getUserNumber(), randNumber);
         // 返回发送信息
         return R.data(jsonObject);
      }
      // 返回发送信息
      return R.data(sendMsg);
      return R.fail(400,"该手机号不存在!");
   }
   /**
    * 校验手机号码正确性
    * @param userNumber
    * @return
    */
   private boolean validatePhone(String userNumber) {
      // 校验手机号码正确性
      if (validator(userNumber)){
         // 校验该账户是否已注册,通过手机号查询用户是否存在,tenantId 暂时写死,未登陆情况 tenantId 获取不到
         R<List<User>> list = userClient.userInfoByPhoneOrAccount("000000", userNumber);
         if (list.getData().size()>0){
            return true;
         }
         return false;
      }
      return false;
   }
   /**
    * 校验手机号码
    */
   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;
   }
   /**
@@ -57,7 +116,7 @@
    * @param randNumber
    */
   private void saveCodeForRedis(String userNumber, String randNumber) {
      bladeRedis.setEx(userNumber,randNumber,5*60L);
      bladeRedis.setEx(PHONE_KEY + userNumber,randNumber,5*60L);
   }
   /**
@@ -75,8 +134,42 @@
      smsRecordService.save(smsRecord);
   }
   @PostMapping("/test1")
   public R test1(@RequestBody DynSMSSendRequest request){
      return R.data(SmsUtils.dynSendMethod(request));
   /**
    * 发送邮件提醒
    * @param smsRequest
    * @return
    */
   @PostMapping("/sendEmailMsg")
   public R sendEmailMsg(@RequestBody SmsRequest smsRequest){
      // 处理数据(可能是多个手机号情况)
      List<String> list = Arrays.asList(smsRequest.getPhone().split(","));
      // 遍历
      for (String phone : list) {
         DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest();
         dynSMSSendRequest.setTemplateId("2431012165350");
         dynSMSSendRequest.setDynData(new String[][]{{"手机号码", "标题"}, {phone, smsRequest.getContent()}});
         // 手机号校验
         if(validator(phone)) {
            // 发送邮件短信
            String dynSendMsg = SmsUtils.dynSendMethod(dynSMSSendRequest);
            // 记录保存
            SMSSendRequest request = new SMSSendRequest();
            request.setUserNumber(phone);
            request.setMessageContent(smsRequest.getContent());
            request.setTemplateId(dynSMSSendRequest.getTemplateId());
            // 记录发送记录操作
            saveSendRecord(request, dynSendMsg);
         }else {
            // 手机号有误记录
            // 记录保存
            SMSSendRequest request = new SMSSendRequest();
            request.setUserNumber(phone);
            request.setMessageContent(smsRequest.getContent());
            request.setTemplateId(dynSMSSendRequest.getTemplateId());
            // 记录发送记录操作
            saveSendRecord(request, "手机号错误未发送...");
         }
      }
      return R.status(true);
   }
}