feat 解决短信发送问题

This commit is contained in:
damonyuan
2024-10-19 01:11:11 +08:00
parent d41cc4cc5b
commit 19bf821545
11 changed files with 98 additions and 24 deletions

View File

@@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.entity.notice.NoticeRecord;
import com.mdd.common.entity.smsLog.SmsLog;
import com.mdd.common.enums.NoticeEnum;
import com.mdd.common.enums.SmsEnum;
import com.mdd.common.enums.YesNoEnum;
import com.mdd.common.exception.OperateException;
import com.mdd.common.mapper.notice.NoticeRecordMapper;
import com.mdd.common.mapper.smsLog.SmsLogMapper;
import com.mdd.common.plugin.notice.NoticeDriver;
import com.mdd.common.plugin.notice.vo.NoticeSmsVo;
import com.mdd.common.util.StringUtils;
@@ -30,32 +34,38 @@ import java.util.Map;
public class SmsController {
@Resource
NoticeRecordMapper noticeRecordMapper;
SmsLogMapper smsLogMapper;
@NotLogin
@PostMapping("/sendCode")
@ApiOperation(value="发送短信")
public AjaxResult<Object> sendSms(@Validated @RequestBody SmsValidate smsValidate) {
NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper<NoticeRecord>()
.eq("account", smsValidate.getMobile())
.eq("scene", smsValidate.getScene())
.eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK))
.orderByDesc("id")
.last("limit 1"));
if (StringUtils.isNotNull(noticeRecord)) {
if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){
throw new OperateException("操作频繁,请稍后再试!");
QueryWrapper smsLogQueryWrapper = new QueryWrapper<SmsLog>();
smsLogQueryWrapper.eq("mobile", smsValidate.getMobile());
smsLogQueryWrapper.eq("send_status", SmsEnum.SEND_SUCCESS.getCode());
smsLogQueryWrapper.in("scene_id", NoticeEnum.getSmsScene());
smsLogQueryWrapper.eq("is_verify", YesNoEnum.NO.getCode());
if (StringUtils.isNotNull(smsValidate.getScene())) {
smsLogQueryWrapper.eq("scene_id", NoticeEnum.getSceneByTag(smsValidate.getScene()));
}
smsLogQueryWrapper.orderByDesc("send_time");
smsLogQueryWrapper.last("limit 1");
SmsLog smsLog = smsLogMapper.selectOne(smsLogQueryWrapper);
if (StringUtils.isNotNull(smsLog)) {
if (smsLog.getSendTime() + 5 * 60 > System.currentTimeMillis() / 1000 ) {
throw new OperateException("已有短信记录,请勿重复发送");
}
}
String code = ToolUtils.randomInt(4);
NoticeSmsVo params = new NoticeSmsVo()
.setScene(NoticeEnum.getSceneByTag(smsValidate.getScene()))
.setMobile(smsValidate.getMobile())
.setExpire(900)
.setParams(new String[] {
"code:" + ToolUtils.randomInt(4)
});
"code:" + code
})
.setCode(code);
NoticeDriver.handle(params);
return AjaxResult.success();