From 546889cf6ff99f688588fcab01324eeaebc13cd2 Mon Sep 17 00:00:00 2001 From: TinyAnts Date: Mon, 13 Mar 2023 17:16:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96:=20=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E5=8F=91=E9=80=81=20=E5=92=8C=20=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SystemAuthMenuServiceImpl.java | 2 - .../impl/SystemAuthPermServiceImpl.java | 9 --- .../java/com/mdd/common/aop/NotLogin.java | 1 + .../java/com/mdd/common/aop/NotPower.java | 1 + .../common/entity/notice/NoticeRecord.java | 21 +++++- .../common/entity/system/SystemLogSms.java | 28 ------- .../java/com/mdd/common/enums/NoticeEnum.java | 20 ++++- .../mapper/notice/NoticeRecordMapper.java | 12 +++ .../mapper/system/SystemLogSmsMapper.java | 12 --- .../mdd/common/plugin/notice/NoticeCheck.java | 41 ++++++++++ .../common/plugin/notice/NoticeDriver.java | 12 +-- .../{OaNotice.java => MpNoticeHandle.java} | 2 +- .../{MpNotice.java => OaNoticeHandle.java} | 2 +- .../{SmsNotice.java => SmsNoticeHandle.java} | 66 +++++++++++++---- .../plugin/notice/template/SmsTemplate.java | 3 + .../NoticeSmsVo.java} | 5 +- .../com/mdd/common/plugin/sms/SmsDriver.java | 74 +------------------ .../mdd/front/controller/LoginController.java | 1 - .../mdd/front/controller/SmsController.java | 26 +++---- .../front/service/impl/LoginServiceImpl.java | 18 ++--- .../front/service/impl/UserServiceImpl.java | 6 +- 21 files changed, 179 insertions(+), 183 deletions(-) delete mode 100644 server/like-common/src/main/java/com/mdd/common/entity/system/SystemLogSms.java create mode 100644 server/like-common/src/main/java/com/mdd/common/mapper/notice/NoticeRecordMapper.java delete mode 100644 server/like-common/src/main/java/com/mdd/common/mapper/system/SystemLogSmsMapper.java create mode 100644 server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeCheck.java rename server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/{OaNotice.java => MpNoticeHandle.java} (86%) rename server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/{MpNotice.java => OaNoticeHandle.java} (86%) rename server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/{SmsNotice.java => SmsNoticeHandle.java} (54%) rename server/like-common/src/main/java/com/mdd/common/plugin/notice/{NoticeParams.java => vo/NoticeSmsVo.java} (64%) diff --git a/server/like-admin/src/main/java/com/mdd/admin/service/impl/SystemAuthMenuServiceImpl.java b/server/like-admin/src/main/java/com/mdd/admin/service/impl/SystemAuthMenuServiceImpl.java index 0a7a98b6..d455f4b6 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/service/impl/SystemAuthMenuServiceImpl.java +++ b/server/like-admin/src/main/java/com/mdd/admin/service/impl/SystemAuthMenuServiceImpl.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.mdd.admin.LikeAdminThreadLocal; -import com.mdd.admin.config.AdminConfig; import com.mdd.admin.service.ISystemAuthMenuService; import com.mdd.admin.service.ISystemAuthPermService; import com.mdd.admin.validate.system.SystemMenuCreateValidate; @@ -13,7 +12,6 @@ import com.mdd.admin.vo.system.SystemAuthMenuVo; import com.mdd.common.entity.system.SystemAuthMenu; import com.mdd.common.mapper.system.SystemAuthMenuMapper; import com.mdd.common.util.ArrayUtils; -import com.mdd.common.util.RedisUtils; import com.mdd.common.util.TimeUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; diff --git a/server/like-admin/src/main/java/com/mdd/admin/service/impl/SystemAuthPermServiceImpl.java b/server/like-admin/src/main/java/com/mdd/admin/service/impl/SystemAuthPermServiceImpl.java index f7d7150c..9dcb7cea 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/service/impl/SystemAuthPermServiceImpl.java +++ b/server/like-admin/src/main/java/com/mdd/admin/service/impl/SystemAuthPermServiceImpl.java @@ -1,22 +1,16 @@ package com.mdd.admin.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.mdd.admin.config.AdminConfig; import com.mdd.admin.service.ISystemAuthPermService; -import com.mdd.common.entity.system.SystemAuthMenu; import com.mdd.common.entity.system.SystemAuthPerm; import com.mdd.common.entity.system.SystemAuthRole; -import com.mdd.common.mapper.system.SystemAuthMenuMapper; import com.mdd.common.mapper.system.SystemAuthPermMapper; import com.mdd.common.mapper.system.SystemAuthRoleMapper; -import com.mdd.common.util.ArrayUtils; -import com.mdd.common.util.RedisUtils; import com.mdd.common.util.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Arrays; import java.util.LinkedList; import java.util.List; @@ -29,9 +23,6 @@ public class SystemAuthPermServiceImpl implements ISystemAuthPermService { @Resource SystemAuthPermMapper systemAuthPermMapper; - @Resource - SystemAuthMenuMapper systemAuthMenuMapper; - @Resource SystemAuthRoleMapper systemAuthRoleMapper; diff --git a/server/like-common/src/main/java/com/mdd/common/aop/NotLogin.java b/server/like-common/src/main/java/com/mdd/common/aop/NotLogin.java index e1dca29b..d876c97d 100644 --- a/server/like-common/src/main/java/com/mdd/common/aop/NotLogin.java +++ b/server/like-common/src/main/java/com/mdd/common/aop/NotLogin.java @@ -4,6 +4,7 @@ import java.lang.annotation.*; /** * 免登录校验注解类 + * PS: 改注解无需实现类,由拦截器监听 */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/server/like-common/src/main/java/com/mdd/common/aop/NotPower.java b/server/like-common/src/main/java/com/mdd/common/aop/NotPower.java index f9eeee15..c5649049 100644 --- a/server/like-common/src/main/java/com/mdd/common/aop/NotPower.java +++ b/server/like-common/src/main/java/com/mdd/common/aop/NotPower.java @@ -4,6 +4,7 @@ import java.lang.annotation.*; /** * 免权限校验注解类 + * PS: 改注解无需实现类,由拦截器监听 */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) 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 ff67670b..1221e7ee 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 @@ -6,13 +6,32 @@ import lombok.Data; import java.io.Serializable; +/** + * 通知记录实体 + */ @Data public class NoticeRecord implements Serializable { private static final long serialVersionUID = 1L; @TableId(value="id", type= IdType.AUTO) - private Integer id; // 主键ID + private Integer id; + private Integer scene; private Integer userId; + private String account; + private String title; + private String code; + private String content; + private String error; + private Integer sender; + private Integer receiver; + private Integer status; + private Integer isRead; + private Integer isCaptcha; + private Integer isDelete; + private Long expireTime; + private Long createTime; + private Long updateTime; + private Long deleteTime; } diff --git a/server/like-common/src/main/java/com/mdd/common/entity/system/SystemLogSms.java b/server/like-common/src/main/java/com/mdd/common/entity/system/SystemLogSms.java deleted file mode 100644 index ae3ed92e..00000000 --- a/server/like-common/src/main/java/com/mdd/common/entity/system/SystemLogSms.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.mdd.common.entity.system; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; - -import java.io.Serializable; - -/** - * 系统短信日志实体 - */ -@Data -public class SystemLogSms implements Serializable { - - private static final long serialVersionUID = 1L; - - @TableId(value="id", type= IdType.AUTO) - private Integer id; // 主键 - private String scene; // 场景编号 - private String mobile; // 手机号码 - private String content; // 发送内容 - private Integer status; // 发送状态:[0=发送中, 1=发送成功, 2=发送失败] - private String results; // 发送结果 - private Long sendTime; // 发送时间 - private Long createTime; // 创建时间 - private Long updateTime; // 更新时间 - -} 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 c7e9467a..4f17ca7d 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 @@ -5,10 +5,22 @@ package com.mdd.common.enums; */ public enum NoticeEnum { - SMS_LOGIN_CODE(101, "登录验证码"), - SMS_BIND_MOBILE_CODE(102, "绑定手机验证码"), - SMS_CHANGE_MOBILE_CODE(103, "变更手机验证码"), - SMS_FORGOT_PASSWORD_CODE(104, "找回登录密码验证码"); + STATUS_WAIT(0, "等待"), + STATUS_OK(1, "成功"), + STATUS_FAIL(2, "失败"), + + VIEW_UNREAD(0, "未读"), + VIEW_READ(0, "已读"), + + SENDER_SYS(1, "系统类型"), + SENDER_SMS(2, "短信类型"), + SENDER_MNP(3, "小程序类型"), + SENDER_OA(4, "公众号类型"), + + LOGIN_CODE(101, "登录验证码"), + BIND_MOBILE_CODE(102, "绑定手机验证码"), + CHANGE_MOBILE_CODE(103, "变更手机验证码"), + FORGOT_PASSWORD_CODE(104, "找回登录密码验证码"); /** * 构造方法 diff --git a/server/like-common/src/main/java/com/mdd/common/mapper/notice/NoticeRecordMapper.java b/server/like-common/src/main/java/com/mdd/common/mapper/notice/NoticeRecordMapper.java new file mode 100644 index 00000000..d1a30f51 --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/mapper/notice/NoticeRecordMapper.java @@ -0,0 +1,12 @@ +package com.mdd.common.mapper.notice; + +import com.mdd.common.core.basics.IBaseMapper; +import com.mdd.common.entity.notice.NoticeRecord; +import org.apache.ibatis.annotations.Mapper; + +/** + * 通知记录Mapper + */ +@Mapper +public interface NoticeRecordMapper extends IBaseMapper { +} diff --git a/server/like-common/src/main/java/com/mdd/common/mapper/system/SystemLogSmsMapper.java b/server/like-common/src/main/java/com/mdd/common/mapper/system/SystemLogSmsMapper.java deleted file mode 100644 index 21d7da4b..00000000 --- a/server/like-common/src/main/java/com/mdd/common/mapper/system/SystemLogSmsMapper.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mdd.common.mapper.system; - -import com.mdd.common.core.basics.IBaseMapper; -import com.mdd.common.entity.system.SystemLogSms; -import org.apache.ibatis.annotations.Mapper; - -/** - * 系统短信日志Mapper - */ -@Mapper -public interface SystemLogSmsMapper extends IBaseMapper { -} diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeCheck.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeCheck.java new file mode 100644 index 00000000..34538892 --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeCheck.java @@ -0,0 +1,41 @@ +package com.mdd.common.plugin.notice; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mdd.common.entity.notice.NoticeRecord; +import com.mdd.common.entity.server.Sys; +import com.mdd.common.mapper.notice.NoticeRecordMapper; +import com.mdd.common.util.SpringUtils; +import com.mdd.common.util.StringUtils; + +import javax.annotation.Resource; + +/** + * 通知验证码验证器 + */ +public class NoticeCheck { + + public static Boolean verify(Integer scene, Object code) { + NoticeRecordMapper noticeRecordMapper = SpringUtils.getBean(NoticeRecordMapper.class); + + NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper() + .eq("scene", scene) + .eq("status", 1) + .eq("is_read", 0) + .eq("is_captcha", 1) + .eq("is_delete", 0) + .eq("code", code.toString().toLowerCase()) + .last("limit 1")); + + if (StringUtils.isNull(noticeRecord)) { + return false; + } + + boolean result = noticeRecord.getExpireTime() > (System.currentTimeMillis() / 1000); + + noticeRecord.setIsRead(1); + noticeRecord.setUpdateTime(System.currentTimeMillis() / 1000); + noticeRecordMapper.updateById(noticeRecord); + return result; + } + +} 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 e1502512..0943f7c6 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 @@ -4,8 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mdd.common.entity.notice.NoticeSetting; import com.mdd.common.exception.OperateException; import com.mdd.common.mapper.notice.NoticeSettingMapper; -import com.mdd.common.plugin.notice.engine.SmsNotice; +import com.mdd.common.plugin.notice.engine.SmsNoticeHandle; import com.mdd.common.plugin.notice.template.SmsTemplate; +import com.mdd.common.plugin.notice.vo.NoticeSmsVo; import com.mdd.common.util.SpringUtils; import com.mdd.common.util.StringUtils; @@ -14,12 +15,12 @@ import com.mdd.common.util.StringUtils; */ public class NoticeDriver { - public void handle(NoticeParams noticeParams) { - // 获取场景模板 + public static void handle(NoticeSmsVo noticeSmsVo) { + // 场景模板 NoticeSettingMapper noticeSettingMapper = SpringUtils.getBean(NoticeSettingMapper.class); NoticeSetting noticeSetting = noticeSettingMapper.selectOne( new QueryWrapper() - .eq("scene", noticeParams.getScene()) + .eq("scene", noticeSmsVo.getScene()) .eq("is_delete", 0) .last("limit 1")); @@ -29,10 +30,11 @@ public class NoticeDriver { // 短信通知 SmsTemplate smsTemplate = new SmsTemplate(); + smsTemplate.setName(noticeSetting.getName()); smsTemplate.setType(noticeSetting.getType()); smsTemplate.setParams(noticeSetting.getSmsNotice()); if (StringUtils.isNotNull(smsTemplate.getStatus()) && smsTemplate.getStatus().equals(1)) { - (new SmsNotice()).send(noticeParams, smsTemplate); + (new SmsNoticeHandle()).send(noticeSmsVo, smsTemplate); } } diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/OaNotice.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/MpNoticeHandle.java similarity index 86% rename from server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/OaNotice.java rename to server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/MpNoticeHandle.java index fc7ea489..78c92ae2 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/OaNotice.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/MpNoticeHandle.java @@ -2,7 +2,7 @@ package com.mdd.common.plugin.notice.engine; import java.util.Map; -public class OaNotice { +public class MpNoticeHandle { public void send(Map config, Map params, Map smsTemplate) { diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/MpNotice.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/OaNoticeHandle.java similarity index 86% rename from server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/MpNotice.java rename to server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/OaNoticeHandle.java index 23db09b3..73c9c6ed 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/MpNotice.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/OaNoticeHandle.java @@ -2,7 +2,7 @@ package com.mdd.common.plugin.notice.engine; import java.util.Map; -public class MpNotice { +public class OaNoticeHandle { public void send(Map config, Map params, Map smsTemplate) { diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNotice.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNoticeHandle.java similarity index 54% rename from server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNotice.java rename to server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNoticeHandle.java index c81d8689..a196d80f 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNotice.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/engine/SmsNoticeHandle.java @@ -1,11 +1,16 @@ package com.mdd.common.plugin.notice.engine; import com.mdd.common.config.GlobalConfig; -import com.mdd.common.plugin.notice.NoticeParams; +import com.mdd.common.entity.notice.NoticeRecord; +import com.mdd.common.enums.NoticeEnum; +import com.mdd.common.exception.OperateException; +import com.mdd.common.mapper.notice.NoticeRecordMapper; +import com.mdd.common.plugin.notice.vo.NoticeSmsVo; import com.mdd.common.plugin.notice.template.SmsTemplate; import com.mdd.common.plugin.sms.SmsDriver; import com.mdd.common.util.ConfigUtils; import com.mdd.common.util.RedisUtils; +import com.mdd.common.util.SpringUtils; import com.mdd.common.util.StringUtils; import java.util.*; @@ -13,22 +18,24 @@ import java.util.*; /** * 短信通知 */ -public class SmsNotice { +public class SmsNoticeHandle { /** * 发送短信通知 * * @author fzr - * @param noticeParams 基础配置 + * @param noticeSmsVo 基础配置 * @param smsTemplate 短信模板 */ - public void send(NoticeParams noticeParams, SmsTemplate smsTemplate) { - String mobile = noticeParams.getMobile(); - Integer scene = noticeParams.getScene(); + public void send(NoticeSmsVo noticeSmsVo, SmsTemplate smsTemplate) { + // 基础参数 + String mobile = noticeSmsVo.getMobile(); + Integer scene = noticeSmsVo.getScene(); + // 模板参数 Map params = new LinkedHashMap<>(); - if (StringUtils.isNotNull(noticeParams.getParams())) { - for (String s : noticeParams.getParams()) { + if (StringUtils.isNotNull(noticeSmsVo.getParams())) { + for (String s : noticeSmsVo.getParams()) { String[] arr = s.split(":"); String key = arr[0].trim(); String val = arr[1].trim(); @@ -36,14 +43,43 @@ public class SmsNotice { } } + // 消息记录 + NoticeRecordMapper noticeRecordMapper = SpringUtils.getBean(NoticeRecordMapper.class); + int expire = StringUtils.isNull(noticeSmsVo.getExpire()) ? 0 : noticeSmsVo.getExpire(); + NoticeRecord noticeRecord = new NoticeRecord(); + noticeRecord.setScene(scene); + noticeRecord.setUserId(0); + noticeRecord.setAccount(mobile); + noticeRecord.setTitle(smsTemplate.getName()); + noticeRecord.setCode(params.getOrDefault("code", "")); + noticeRecord.setContent(this.getContent(params, smsTemplate.getContent())); + noticeRecord.setReceiver(NoticeEnum.SENDER_SMS.getCode()); + noticeRecord.setStatus(NoticeEnum.STATUS_WAIT.getCode()); + noticeRecord.setIsRead(NoticeEnum.VIEW_UNREAD.getCode()); + noticeRecord.setIsCaptcha(smsTemplate.getType().equals(2) ? 1 : 0); + noticeRecord.setExpireTime(expire + (System.currentTimeMillis() / 1000)); + noticeRecord.setCreateTime(System.currentTimeMillis() / 1000); + noticeRecord.setUpdateTime(System.currentTimeMillis() / 1000); + noticeRecordMapper.insert(noticeRecord); + + // 消息发送 if (StringUtils.isNotEmpty(mobile)) { - (new SmsDriver()) - .setScene(scene) - .setMobile(mobile) - .setTemplateCode(smsTemplate.getTemplateId()) - .setTemplateParam(this.getSmsParams(params, smsTemplate.getContent())) - .setSmsContent(this.getContent(params, smsTemplate.getContent())) - .sendSms(); + try { + (new SmsDriver()) + .setMobile(mobile) + .setTemplateCode(smsTemplate.getTemplateId()) + .setTemplateParam(this.getSmsParams(params, smsTemplate.getContent())) + .sendSms(); + + noticeRecord.setStatus(NoticeEnum.STATUS_OK.getCode()); + noticeRecord.setUpdateTime(System.currentTimeMillis() / 1000); + noticeRecordMapper.updateById(noticeRecord); + } catch (OperateException e) { + noticeRecord.setError(e.getMsg()); + noticeRecord.setStatus(NoticeEnum.STATUS_FAIL.getCode()); + noticeRecord.setUpdateTime(System.currentTimeMillis() / 1000); + noticeRecordMapper.updateById(noticeRecord); + } // 通知类型: [1=业务, 2=验证码] if (smsTemplate.getType().equals(2) && StringUtils.isNotNull(params.get("code"))) { 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 3edd1b3b..42841c3e 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 @@ -8,6 +8,9 @@ import java.util.Map; @Data public class SmsTemplate { + /** 通知名称 */ + private String name; + /** 通知类型: 1=业务,2=验证码 */ private Integer type; diff --git a/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeParams.java b/server/like-common/src/main/java/com/mdd/common/plugin/notice/vo/NoticeSmsVo.java similarity index 64% rename from server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeParams.java rename to server/like-common/src/main/java/com/mdd/common/plugin/notice/vo/NoticeSmsVo.java index 410b93c0..c6563f6a 100644 --- a/server/like-common/src/main/java/com/mdd/common/plugin/notice/NoticeParams.java +++ b/server/like-common/src/main/java/com/mdd/common/plugin/notice/vo/NoticeSmsVo.java @@ -1,14 +1,15 @@ -package com.mdd.common.plugin.notice; +package com.mdd.common.plugin.notice.vo; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(chain = true) -public class NoticeParams { +public class NoticeSmsVo { private Integer scene; private String mobile; + private Integer expire; private String[] params; } 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 991c1ece..3673ff37 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 @@ -1,24 +1,17 @@ package com.mdd.common.plugin.sms; import com.alibaba.fastjson2.JSON; -import com.mdd.common.entity.system.SystemLogSms; import com.mdd.common.exception.OperateException; -import com.mdd.common.mapper.system.SystemLogSmsMapper; import com.mdd.common.plugin.sms.engine.AliSms; import com.mdd.common.plugin.sms.engine.TencentSms; import com.mdd.common.util.ConfigUtils; -import com.mdd.common.util.SpringUtils; import java.util.Map; public class SmsDriver { - private final SystemLogSmsMapper systemLogSmsMapper; - - private Integer scene; // 场景编码 private String mobile; // 手机号码 private String templateCode; // 短信模板 - private String smsContent = ""; // 短信内容 private Map templateParam; // 短信参数 private final String engine; // 短信引擎 private final Map config; // 短信配置 @@ -29,7 +22,6 @@ public class SmsDriver { public SmsDriver() { this.engine = ConfigUtils.get("sms", "default", ""); this.config = ConfigUtils.getMap("sms", this.engine); - this.systemLogSmsMapper = SpringUtils.getBean(SystemLogSmsMapper.class); } /** @@ -68,30 +60,6 @@ public class SmsDriver { return this; } - /** - * 设置模板内容 - * - * @author fze - * @param content 内容 - * @return SmsDriver - */ - public SmsDriver setSmsContent(String content) { - this.smsContent = content; - return this; - } - - /** - * 设置场景编码 - * - * @author fzr - * @param scene 场景编码 - * @return SmsDriver - */ - public SmsDriver setScene(Integer scene) { - this.scene = scene; - return this; - } - /** * 发送短信 * @@ -99,7 +67,6 @@ public class SmsDriver { */ public void sendSms() { String templateParam = JSON.toJSONString(this.templateParam); - Integer logId = this.writeSmsLog(); Integer sendResult = 0; String results = ""; @@ -110,6 +77,7 @@ public class SmsDriver { .setTemplateId(this.templateCode) .setTemplateParams(templateParam) .send(); + sendResult = aliSms.getSendResult(); break; case "tencent": @@ -122,47 +90,9 @@ public class SmsDriver { break; } - this.updateSmsLog(logId, sendResult, results); if (sendResult == 2) { - throw new OperateException("短信发送失败"); + throw new OperateException(results); } } - /** - * 写入短信日志 - * - * @author fzr - */ - private Integer writeSmsLog() { - SystemLogSms model = new SystemLogSms(); - model.setMobile(this.mobile); - model.setContent(this.smsContent); - model.setResults(""); - model.setStatus(0); - model.setCreateTime(System.currentTimeMillis() / 1000); - model.setUpdateTime(System.currentTimeMillis() / 1000); - systemLogSmsMapper.insert(model); - return model.getId(); - } - - /** - * 更新短信日志 - * - * @author fzr - * @param id 主键 - * @param status 状态 - * @param result 结果 - */ - private void updateSmsLog(Integer id, Integer status, String result) { - SystemLogSms model = new SystemLogSms(); - model.setId(id); - model.setScene(String.valueOf(this.scene)); - model.setMobile(this.mobile); - model.setStatus(status); - model.setResults(result); - model.setSendTime(System.currentTimeMillis() / 1000); - model.setUpdateTime(System.currentTimeMillis() / 1000); - systemLogSmsMapper.updateById(model); - } - } diff --git a/server/like-front/src/main/java/com/mdd/front/controller/LoginController.java b/server/like-front/src/main/java/com/mdd/front/controller/LoginController.java index f064bf3b..bfd0ca22 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/LoginController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/LoginController.java @@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpSession; -import java.util.LinkedHashMap; import java.util.Map; /** 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 a4d3e4dd..42d7d6f8 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 @@ -1,13 +1,13 @@ package com.mdd.front.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Assert; import com.mdd.common.core.AjaxResult; -import com.mdd.common.entity.system.SystemLogSms; +import com.mdd.common.entity.notice.NoticeRecord; +import com.mdd.common.enums.NoticeEnum; import com.mdd.common.exception.OperateException; -import com.mdd.common.mapper.system.SystemLogSmsMapper; +import com.mdd.common.mapper.notice.NoticeRecordMapper; import com.mdd.common.plugin.notice.NoticeDriver; -import com.mdd.common.plugin.notice.NoticeParams; +import com.mdd.common.plugin.notice.vo.NoticeSmsVo; import com.mdd.common.util.StringUtils; import com.mdd.common.util.ToolsUtils; import com.mdd.front.validate.commons.SmsValidate; @@ -28,7 +28,7 @@ import java.util.Arrays; public class SmsController { @Resource - SystemLogSmsMapper systemLogSmsMapper; + NoticeRecordMapper noticeRecordMapper; /** * 发送短信 @@ -39,30 +39,28 @@ public class SmsController { */ @PostMapping("/send") public AjaxResult send(@Validated @RequestBody SmsValidate smsValidate) { - Assert.notNull(smsValidate.getMobile(), "mobile参数缺失!"); - Assert.notNull(smsValidate.getScene(), "scene参数缺失!"); - - SystemLogSms systemLogSms = systemLogSmsMapper.selectOne(new QueryWrapper() + NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper() .eq("mobile", smsValidate.getMobile()) .eq("scene", smsValidate.getScene()) - .in("status", Arrays.asList(0, 1)) + .eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK)) .orderByDesc("id") .last("limit 1")); - if (StringUtils.isNotNull(systemLogSms)) { - if (systemLogSms.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){ + if (StringUtils.isNotNull(noticeRecord)) { + if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){ throw new OperateException("操作频繁,请稍后再试!"); } } - NoticeParams params = new NoticeParams() + NoticeSmsVo params = new NoticeSmsVo() .setScene(smsValidate.getScene()) .setMobile(smsValidate.getMobile()) + .setExpire(900) .setParams(new String[] { "code:" + ToolsUtils.randomInt(4) }); - (new NoticeDriver()).handle(params); + NoticeDriver.handle(params); return AjaxResult.success(); } diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java index c2e36e69..2b0f20de 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java @@ -4,7 +4,6 @@ import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Assert; -import com.mdd.common.config.GlobalConfig; import com.mdd.common.entity.user.User; import com.mdd.common.entity.user.UserAuth; import com.mdd.common.enums.ClientEnum; @@ -12,6 +11,7 @@ import com.mdd.common.enums.NoticeEnum; import com.mdd.common.exception.OperateException; import com.mdd.common.mapper.user.UserAuthMapper; import com.mdd.common.mapper.user.UserMapper; +import com.mdd.common.plugin.notice.NoticeCheck; import com.mdd.common.util.*; import com.mdd.front.config.FrontConfig; import com.mdd.front.service.ILoginService; @@ -128,15 +128,11 @@ public class LoginServiceImpl implements ILoginService { String code = params.get("code").toLowerCase(); // 校验验证码 - int typeCode = NoticeEnum.SMS_LOGIN_CODE.getCode(); - Object smsCode = RedisUtils.get(GlobalConfig.redisSmsCode+typeCode+":"+mobile); - if (StringUtils.isNull(smsCode) || !smsCode.toString().equals(code)) { + int sceneCode = NoticeEnum.LOGIN_CODE.getCode(); + if (!NoticeCheck.verify(sceneCode, code)) { throw new OperateException("验证码错误!"); } - // 删除验证码 - RedisUtils.del(GlobalConfig.redisSmsCode+typeCode+":"+mobile); - // 查询手机号 User user = userMapper.selectOne(new QueryWrapper() .select("id,username,mobile,is_disable") @@ -226,15 +222,11 @@ public class LoginServiceImpl implements ILoginService { String password = forgetPwdValidate.getPassword(); // 校验验证码 - int typeCode = NoticeEnum.SMS_FORGOT_PASSWORD_CODE.getCode(); - Object smsCode = RedisUtils.get(GlobalConfig.redisSmsCode+typeCode+":"+mobile); - if (StringUtils.isNull(smsCode) || !smsCode.toString().equals(code)) { + int sceneCode = NoticeEnum.FORGOT_PASSWORD_CODE.getCode(); + if (!NoticeCheck.verify(sceneCode, code)) { throw new OperateException("验证码错误!"); } - // 删除验证码 - RedisUtils.del(GlobalConfig.redisSmsCode+typeCode+":"+mobile); - // 查询手机号 User user = userMapper.selectOne(new QueryWrapper() .select("id,username,mobile,is_disable") diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/UserServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/UserServiceImpl.java index afd1d186..31bb4563 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/UserServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/UserServiceImpl.java @@ -13,6 +13,7 @@ import com.mdd.common.enums.NoticeEnum; import com.mdd.common.exception.OperateException; import com.mdd.common.mapper.user.UserAuthMapper; import com.mdd.common.mapper.user.UserMapper; +import com.mdd.common.plugin.notice.NoticeCheck; import com.mdd.common.util.*; import com.mdd.front.LikeFrontThreadLocal; import com.mdd.front.service.IUserService; @@ -214,9 +215,8 @@ public class UserServiceImpl implements IUserService { String code = mobileValidate.getCode().toLowerCase(); // 校验验证码 - int typeCode = type.equals("bind") ? NoticeEnum.SMS_BIND_MOBILE_CODE.getCode() : NoticeEnum.SMS_CHANGE_MOBILE_CODE.getCode() ; - Object smsCode = RedisUtils.get(GlobalConfig.redisSmsCode+typeCode+":"+mobile); - if (StringUtils.isNull(smsCode) || !smsCode.toString().equals(code)) { + int sceneCode = type.equals("bind") ? NoticeEnum.BIND_MOBILE_CODE.getCode() : NoticeEnum.CHANGE_MOBILE_CODE.getCode() ; + if (!NoticeCheck.verify(sceneCode, code)) { throw new OperateException("验证码错误!"); }