From 19bf821545902b84f6e20a5a2370e6b7bec8287c Mon Sep 17 00:00:00 2001 From: damonyuan <404054358@qq.com> Date: Sat, 19 Oct 2024 01:11:11 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E8=A7=A3=E5=86=B3=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E5=8F=91=E9=80=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/entity/notice/NoticeRecord.java | 2 + .../java/com/mdd/common/enums/NoticeEnum.java | 15 +++++++ .../java/com/mdd/common/enums/SmsEnum.java | 42 +++++++++++++++++++ .../common/plugin/notice/NoticeDriver.java | 2 - .../plugin/notice/engine/SmsNoticeHandle.java | 6 ++- .../plugin/notice/template/SmsTemplate.java | 2 +- .../common/plugin/notice/vo/NoticeSmsVo.java | 2 + .../com/mdd/common/plugin/sms/SmsDriver.java | 7 ++-- .../mdd/common/plugin/sms/engine/AliSms.java | 2 +- .../common/plugin/sms/engine/TencentSms.java | 6 +-- .../mdd/front/controller/SmsController.java | 36 ++++++++++------ 11 files changed, 98 insertions(+), 24 deletions(-) create mode 100644 server/like-common/src/main/java/com/mdd/common/enums/SmsEnum.java diff --git a/server/like-common/src/main/java/com/mdd/common/entity/notice/NoticeRecord.java b/server/like-common/src/main/java/com/mdd/common/entity/notice/NoticeRecord.java index 602a8763..3fff0f49 100644 --- a/server/like-common/src/main/java/com/mdd/common/entity/notice/NoticeRecord.java +++ b/server/like-common/src/main/java/com/mdd/common/entity/notice/NoticeRecord.java @@ -1,6 +1,7 @@ package com.mdd.common.entity.notice; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -31,6 +32,7 @@ public class NoticeRecord implements Serializable { private Integer sceneId; @ApiModelProperty("已读状态: [0=未读, 1=已读]") + @TableField(value = "`read`") private Integer read; @ApiModelProperty("通知接收对象类型;1-会员;2-商家;3-平台;4-游客(未注册用户)") diff --git a/server/like-common/src/main/java/com/mdd/common/enums/NoticeEnum.java b/server/like-common/src/main/java/com/mdd/common/enums/NoticeEnum.java index a233ab7a..984f6515 100644 --- a/server/like-common/src/main/java/com/mdd/common/enums/NoticeEnum.java +++ b/server/like-common/src/main/java/com/mdd/common/enums/NoticeEnum.java @@ -3,6 +3,9 @@ package com.mdd.common.enums; import com.alibaba.fastjson2.JSONObject; import com.mdd.common.util.StringUtils; +import java.util.ArrayList; +import java.util.List; + /** * 通知枚举类 */ @@ -75,4 +78,16 @@ public enum NoticeEnum { return scene.getInteger(tag); } + /** + * 验证码场景 + */ + public static List getSmsScene() { + List ret = new ArrayList<>(); + ret.add(LOGIN_CAPTCHA.getCode()); + ret.add(BIND_MOBILE_CAPTCHA.getCode()); + ret.add(CHANGE_MOBILE_CAPTCHA.getCode()); + ret.add(FIND_LOGIN_PASSWORD_CAPTCHA.getCode()); + return ret; + } + } diff --git a/server/like-common/src/main/java/com/mdd/common/enums/SmsEnum.java b/server/like-common/src/main/java/com/mdd/common/enums/SmsEnum.java new file mode 100644 index 00000000..6e5b188e --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/enums/SmsEnum.java @@ -0,0 +1,42 @@ +package com.mdd.common.enums; + +/** + * 短信枚举 + */ +public enum SmsEnum { + + SEND_ING(0, "发送中"), + SEND_SUCCESS(1, "发送成功"), + SEND_FAIL(2, "发送失败"); + + /** + * 构造方法 + */ + private final int code; + private final String msg; + SmsEnum(int code, String msg) { + this.code = code; + this.msg = msg; + } + + /** + * 获取状态码 + * + * @author fzr + * @return Long + */ + public int getCode() { + return this.code; + } + + /** + * 获取提示 + * + * @author fzr + * @return String + */ + public String getMsg() { + return this.msg; + } + +} diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeDriver.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeDriver.java index 82acde42..4bc183db 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeDriver.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeDriver.java @@ -18,7 +18,6 @@ import com.mdd.common.util.StringUtils; public class NoticeDriver { public static void handle(NoticeSmsVo noticeSmsVo) { - System.out.println(11123); // 场景模板 NoticeSettingMapper noticeSettingMapper = SpringUtils.getBean(NoticeSettingMapper.class); NoticeSetting noticeSetting = noticeSettingMapper.selectOne( @@ -35,7 +34,6 @@ public class NoticeDriver { smsTemplate.setName(noticeSetting.getSceneName()); smsTemplate.setType(noticeSetting.getType()); smsTemplate.setParams(noticeSetting.getSmsNotice()); - System.out.println(1111); if (StringUtils.isNotNull(smsTemplate.getStatus()) && smsTemplate.getStatus().equals(1)) { (new SmsNoticeHandle()).send(noticeSmsVo, smsTemplate); } diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNoticeHandle.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNoticeHandle.java index 6f12ca57..b7cd582a 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNoticeHandle.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNoticeHandle.java @@ -28,7 +28,6 @@ public class SmsNoticeHandle { * @param smsTemplate 短信模板 */ public void send(NoticeSmsVo noticeSmsVo, SmsTemplate smsTemplate) { - System.out.println("111asd"); // 基础参数 String mobile = noticeSmsVo.getMobile(); Integer scene = noticeSmsVo.getScene(); @@ -56,6 +55,7 @@ public class SmsNoticeHandle { noticeRecord.setRead(NoticeEnum.VIEW_UNREAD.getCode()); noticeRecord.setCreateTime(System.currentTimeMillis() / 1000); noticeRecord.setUpdateTime(System.currentTimeMillis() / 1000); + noticeRecord.setNoticeType(NoticeEnum.SENDER_SMS.getCode()); noticeRecordMapper.insert(noticeRecord); //记录到sms log @@ -64,6 +64,7 @@ public class SmsNoticeHandle { smsLog.setSceneId(noticeSmsVo.getScene()); smsLog.setMobile(noticeSmsVo.getMobile()); smsLog.setContent(this.getContent(params, smsTemplate.getContent())); + smsLog.setCode(noticeSmsVo.getCode()); // 消息发送 if (StringUtils.isNotEmpty(mobile)) { @@ -94,10 +95,13 @@ public class SmsNoticeHandle { smsLog.setIsVerify(0); smsLog.setCheckNum(0); smsLog.setSendStatus(2); + smsLog.setResults(e.getMsg()); smsLog.setSendTime(System.currentTimeMillis() / 1000); smsLog.setCreateTime(System.currentTimeMillis() / 1000); smsLog.setUpdateTime(System.currentTimeMillis() / 1000); smsLogMapper.insert(smsLog); + + throw new OperateException(e.getMsg()); } } } diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/template/SmsTemplate.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/template/SmsTemplate.java index a44a5648..ef0c42ef 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/notice/template/SmsTemplate.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/template/SmsTemplate.java @@ -28,7 +28,7 @@ public class SmsTemplate { */ public void setParams(String smsNotice) { Map config = MapUtils.jsonToMap(smsNotice); - this.setTemplateId(config.getOrDefault("templateId", "")); + this.setTemplateId(config.getOrDefault("template_id", "")); this.setContent(config.getOrDefault("content", "")); this.setStatus(Integer.parseInt(config.getOrDefault("status", "0"))); } diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/vo/NoticeSmsVo.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/vo/NoticeSmsVo.java index c6563f6a..4b8b3f82 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/notice/vo/NoticeSmsVo.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/vo/NoticeSmsVo.java @@ -12,4 +12,6 @@ public class NoticeSmsVo { private Integer expire; private String[] params; + private String code; + } diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/sms/SmsDriver.java b/server/like-common/src/main/java/com/mdd/common/plugin/sms/SmsDriver.java index 3673ff37..cfd0eff3 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/sms/SmsDriver.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/sms/SmsDriver.java @@ -20,7 +20,7 @@ public class SmsDriver { * 构造方法 */ public SmsDriver() { - this.engine = ConfigUtils.get("sms", "default", ""); + this.engine = ConfigUtils.get("sms", "engine", ""); this.config = ConfigUtils.getMap("sms", this.engine); } @@ -69,9 +69,8 @@ public class SmsDriver { String templateParam = JSON.toJSONString(this.templateParam); Integer sendResult = 0; String results = ""; - switch (this.engine) { - case "aliyun": + case "ali": AliSms aliSms = new AliSms(this.config); results = aliSms.setMobile(this.mobile) .setTemplateId(this.templateCode) @@ -88,6 +87,8 @@ public class SmsDriver { .send(); sendResult = tencentSms.getSendResult(); break; + default: + throw new OperateException("短信类型错误"); } if (sendResult == 2) { diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/sms/engine/AliSms.java b/server/like-common/src/main/java/com/mdd/common/plugin/sms/engine/AliSms.java index 01cf116c..b99ee825 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/sms/engine/AliSms.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/sms/engine/AliSms.java @@ -84,7 +84,7 @@ public class AliSms { * @return String */ public String send() { - DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", this.config.get("appKey"), this.config.get("secretKey")); + DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", this.config.get("app_key"), this.config.get("secret_key")); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/sms/engine/TencentSms.java b/server/like-common/src/main/java/com/mdd/common/plugin/sms/engine/TencentSms.java index 39fee482..72bc254e 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/sms/engine/TencentSms.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/sms/engine/TencentSms.java @@ -82,7 +82,7 @@ public class TencentSms { public String send() { try { /*认证对象*/ - Credential cred = new Credential(this.config.get("secretId"), config.get("secretKey")); + Credential cred = new Credential(this.config.get("secret_id"), config.get("secret_key")); HttpProfile httpProfile = new HttpProfile(); httpProfile.setReqMethod("POST"); httpProfile.setConnTimeout(60); @@ -97,7 +97,7 @@ public class TencentSms { SmsClient client = new SmsClient(cred, "ap-guangzhou",clientProfile); SendSmsRequest req = new SendSmsRequest(); req.setSignName(config.get("sign")); - req.setSmsSdkAppId(config.get("appId")); + req.setSmsSdkAppId(config.get("app_id")); req.setTemplateId(this.templateId); /*手机号码*/ @@ -107,9 +107,9 @@ public class TencentSms { /*模板参数*/ String[] templateParamSet = this.templateParams; req.setTemplateParamSet(templateParamSet); - /*发起请求*/ SendSmsResponse res = client.SendSms(req); + System.out.println(res); if (!res.getSendStatusSet()[0].getCode().equals("Ok")) { this.sendResult = 2; return res.getSendStatusSet()[0].getMessage(); diff --git a/server/like-front/src/main/java/com/mdd/front/controller/SmsController.java b/server/like-front/src/main/java/com/mdd/front/controller/SmsController.java index 5638d35f..ad1eb350 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/SmsController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/SmsController.java @@ -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 sendSms(@Validated @RequestBody SmsValidate smsValidate) { - NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper() - .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(); + 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();