| | |
| | | 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; |
| | | |
| | | /** |
| | | * 短信发送控制层 |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param randNumber |
| | | */ |
| | | private void saveCodeForRedis(String userNumber, String randNumber) { |
| | | bladeRedis.setEx(userNumber,randNumber,5*60L); |
| | | bladeRedis.setEx(PHONE_KEY + userNumber,randNumber,5*60L); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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); |
| | | } |
| | | } |