Commit d68ced8de44291eaa77828b97d914a5b05d3063c

Authored by YunaiV
1 parent 8e2388d5

前台用户,接入发送短信验证码

Showing 15 changed files with 110 additions and 14 deletions
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/convert/package-info.java 0 → 100644
  1 +/**
  2 + * 提供 POJO 类的实体转换
  3 + *
  4 + * 目前使用 MapStruct 框架
  5 + */
  6 +package cn.iocoder.yudao.coreservice.modules.member.convert;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md 0 → 100644
  1 +<http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao>
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/dal/dataobject/user/MbrUserDO.java renamed to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/dataobject/user/MbrUserDO.java
1 -package cn.iocoder.yudao.userserver.modules.member.dal.dataobject.user; 1 +package cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user;
2 2
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/dal/mysql/user/MbrUserCoreMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.member.dal.mysql.user;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +
  7 +@Mapper
  8 +public interface MbrUserCoreMapper extends BaseMapperX<MbrUserDO> {
  9 +
  10 +}
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/MbrUserCoreService.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.member.service.user;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
  4 +
  5 +/**
  6 + * 前台用户 Core Service 接口
  7 + *
  8 + * @author 芋道源码
  9 + */
  10 +public interface MbrUserCoreService {
  11 + /**
  12 + * 通过用户 ID 查询用户
  13 + *
  14 + * @param id 用户ID
  15 + * @return 用户对象信息
  16 + */
  17 + MbrUserDO getUser(Long id);
  18 +
  19 +}
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/member/service/user/impl/MbrUserCoreServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.coreservice.modules.member.service.user.impl;
  2 +
  3 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
  4 +import cn.iocoder.yudao.coreservice.modules.member.dal.mysql.user.MbrUserCoreMapper;
  5 +import cn.iocoder.yudao.coreservice.modules.member.service.user.MbrUserCoreService;
  6 +import lombok.extern.slf4j.Slf4j;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +import javax.annotation.Resource;
  10 +
  11 +/**
  12 + * User Core Service 实现类
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@Service
  17 +@Slf4j
  18 +public class MbrUserCoreServiceImpl implements MbrUserCoreService {
  19 +
  20 + @Resource
  21 + private MbrUserCoreMapper userCoreMapper;
  22 +
  23 + @Override
  24 + public MbrUserDO getUser(Long id) {
  25 + return userCoreMapper.selectById(id);
  26 + }
  27 +
  28 +}
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/sms/impl/SysSmsCoreServiceImpl.java
@@ -2,6 +2,8 @@ package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl; @@ -2,6 +2,8 @@ package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
  5 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
  6 +import cn.iocoder.yudao.coreservice.modules.member.service.user.MbrUserCoreService;
5 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO; 7 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
6 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; 8 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
7 import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; 9 import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage;
@@ -41,6 +43,8 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService { @@ -41,6 +43,8 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService {
41 @Resource 43 @Resource
42 private SysUserCoreService sysUserCoreService; 44 private SysUserCoreService sysUserCoreService;
43 @Resource 45 @Resource
  46 + private MbrUserCoreService mbrUserCoreService;
  47 + @Resource
44 private SysSmsTemplateCoreService smsTemplateCoreService; 48 private SysSmsTemplateCoreService smsTemplateCoreService;
45 @Resource 49 @Resource
46 private SysSmsLogCoreService smsLogCoreService; 50 private SysSmsLogCoreService smsLogCoreService;
@@ -66,7 +70,15 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService { @@ -66,7 +70,15 @@ public class SysSmsCoreServiceImpl implements SysSmsCoreService {
66 70
67 @Override 71 @Override
68 public Long sendSingleSmsToMember(String mobile, Long userId, String templateCode, Map<String, Object> templateParams) { 72 public Long sendSingleSmsToMember(String mobile, Long userId, String templateCode, Map<String, Object> templateParams) {
69 - throw new UnsupportedOperationException("暂时不支持该操作,感兴趣可以实现该功能哟!"); 73 + // 如果 mobile 为空,则加载用户编号对应的手机号
  74 + if (StrUtil.isEmpty(mobile)) {
  75 + MbrUserDO user = mbrUserCoreService.getUser(userId);
  76 + if (user != null) {
  77 + mobile = user.getMobile();
  78 + }
  79 + }
  80 + // 执行发送
  81 + return this.sendSingleSms(mobile, userId, UserTypeEnum.MEMBER.getValue(), templateCode, templateParams);
70 } 82 }
71 83
72 @Override 84 @Override
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/dal/mysql/user/MbrUserMapper.java
1 package cn.iocoder.yudao.userserver.modules.member.dal.mysql.user; 1 package cn.iocoder.yudao.userserver.modules.member.dal.mysql.user;
2 2
  3 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4 -import cn.iocoder.yudao.userserver.modules.member.dal.dataobject.user.MbrUserDO;  
5 import org.apache.ibatis.annotations.Mapper; 5 import org.apache.ibatis.annotations.Mapper;
6 6
7 /** 7 /**
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/MbrUserService.java
1 package cn.iocoder.yudao.userserver.modules.member.service.user; 1 package cn.iocoder.yudao.userserver.modules.member.service.user;
2 2
  3 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
3 import cn.iocoder.yudao.framework.common.validation.Mobile; 4 import cn.iocoder.yudao.framework.common.validation.Mobile;
4 -import cn.iocoder.yudao.userserver.modules.member.dal.dataobject.user.MbrUserDO;  
5 5
6 /** 6 /**
7 * 前台用户 Service 接口 7 * 前台用户 Service 接口
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl/MbrUserServiceImpl.java
1 package cn.iocoder.yudao.userserver.modules.member.service.user.impl; 1 package cn.iocoder.yudao.userserver.modules.member.service.user.impl;
2 2
3 import cn.hutool.core.util.IdUtil; 3 import cn.hutool.core.util.IdUtil;
4 -import cn.hutool.core.util.RandomUtil;  
5 -import cn.hutool.core.util.StrUtil; 4 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7 -import cn.iocoder.yudao.userserver.modules.member.dal.dataobject.user.MbrUserDO;  
8 import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper; 6 import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper;
9 import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; 7 import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService;
10 import lombok.extern.slf4j.Slf4j; 8 import lombok.extern.slf4j.Slf4j;
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.http
@@ -12,7 +12,7 @@ POST {{userServerUrl}}/send-sms-code @@ -12,7 +12,7 @@ POST {{userServerUrl}}/send-sms-code
12 Content-Type: application/json 12 Content-Type: application/json
13 13
14 { 14 {
15 - "mobile": "15601691301", 15 + "mobile": "15601691399",
16 "scene": 1 16 "scene": 1
17 } 17 }
18 18
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/convert/auth/SysAuthConvert.java
1 package cn.iocoder.yudao.userserver.modules.system.convert.auth; 1 package cn.iocoder.yudao.userserver.modules.system.convert.auth;
2 2
  3 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
3 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; 4 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4 import cn.iocoder.yudao.framework.security.core.LoginUser; 5 import cn.iocoder.yudao.framework.security.core.LoginUser;
5 -import cn.iocoder.yudao.userserver.modules.member.dal.dataobject.user.MbrUserDO;  
6 import org.mapstruct.Mapper; 6 import org.mapstruct.Mapper;
7 import org.mapstruct.Mapping; 7 import org.mapstruct.Mapping;
8 import org.mapstruct.factory.Mappers; 8 import org.mapstruct.factory.Mappers;
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/sms/SysSmsTemplateCodeConstants.java 0 → 100644
  1 +package cn.iocoder.yudao.userserver.modules.system.enums.sms;
  2 +
  3 +/**
  4 + * yudao-user-server 使用到的短信模板的 Code 编码的枚举
  5 + *
  6 + * @author 芋道源码
  7 + */
  8 +public interface SysSmsTemplateCodeConstants {
  9 +
  10 + /**
  11 + * 前台用户短信登录
  12 + */
  13 + String USER_SMS_LOGIN = "user-sms-login";
  14 +
  15 +}
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
1 package cn.iocoder.yudao.userserver.modules.system.service.auth.impl; 1 package cn.iocoder.yudao.userserver.modules.system.service.auth.impl;
2 2
3 import cn.hutool.core.lang.Assert; 3 import cn.hutool.core.lang.Assert;
  4 +import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
  5 +import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum;
  6 +import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum;
4 import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService; 7 import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
5 import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService; 8 import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
6 import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO; 9 import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
@@ -9,15 +12,12 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; @@ -9,15 +12,12 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
9 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; 12 import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
10 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; 13 import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
11 import cn.iocoder.yudao.framework.security.core.LoginUser; 14 import cn.iocoder.yudao.framework.security.core.LoginUser;
  15 +import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService;
12 import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthLoginReqVO; 16 import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthLoginReqVO;
13 import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthSmsLoginReqVO; 17 import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthSmsLoginReqVO;
14 import cn.iocoder.yudao.userserver.modules.system.convert.auth.SysAuthConvert; 18 import cn.iocoder.yudao.userserver.modules.system.convert.auth.SysAuthConvert;
15 -import cn.iocoder.yudao.userserver.modules.member.dal.dataobject.user.MbrUserDO;  
16 import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum; 19 import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum;
17 import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService; 20 import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService;
18 -import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService;  
19 -import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum;  
20 -import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum;  
21 import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; 21 import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService;
22 import lombok.extern.slf4j.Slf4j; 22 import lombok.extern.slf4j.Slf4j;
23 import org.springframework.context.annotation.Lazy; 23 import org.springframework.context.annotation.Lazy;
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/sms/impl/SysSmsCodeServiceImpl.java
1 package cn.iocoder.yudao.userserver.modules.system.service.sms.impl; 1 package cn.iocoder.yudao.userserver.modules.system.service.sms.impl;
2 2
  3 +import cn.hutool.core.map.MapUtil;
  4 +import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService;
3 import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO; 5 import cn.iocoder.yudao.userserver.modules.system.dal.dataobject.sms.SysSmsCodeDO;
4 import cn.iocoder.yudao.userserver.modules.system.dal.mysql.sms.SysSmsCodeMapper; 6 import cn.iocoder.yudao.userserver.modules.system.dal.mysql.sms.SysSmsCodeMapper;
  7 +import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsTemplateCodeConstants;
5 import cn.iocoder.yudao.userserver.modules.system.framework.sms.SmsCodeProperties; 8 import cn.iocoder.yudao.userserver.modules.system.framework.sms.SmsCodeProperties;
6 import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService; 9 import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService;
7 import org.springframework.stereotype.Service; 10 import org.springframework.stereotype.Service;
@@ -29,12 +32,16 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService { @@ -29,12 +32,16 @@ public class SysSmsCodeServiceImpl implements SysSmsCodeService {
29 @Resource 32 @Resource
30 private SysSmsCodeMapper smsCodeMapper; 33 private SysSmsCodeMapper smsCodeMapper;
31 34
  35 + @Resource
  36 + private SysSmsCoreService smsCoreService;
  37 +
32 @Override 38 @Override
33 public void sendSmsCode(String mobile, Integer scene, String createIp) { 39 public void sendSmsCode(String mobile, Integer scene, String createIp) {
34 // 创建验证码 40 // 创建验证码
35 String code = this.createSmsCode(mobile, scene, createIp); 41 String code = this.createSmsCode(mobile, scene, createIp);
36 // 发送验证码 42 // 发送验证码
37 - // TODO 芋艿:重要,发送短信验证码 43 + smsCoreService.sendSingleSmsToMember(mobile, null, SysSmsTemplateCodeConstants.USER_SMS_LOGIN,
  44 + MapUtil.of("code", code));
38 } 45 }
39 46
40 private String createSmsCode(String mobile, Integer scene, String ip) { 47 private String createSmsCode(String mobile, Integer scene, String ip) {