sms、会员注册

pull/1/head
chuzhichao 2 years ago
parent 2d2e1b3921
commit d7ee61b113

@ -28,4 +28,8 @@ public class SmsResult {
* SDK SendSmsResponse * SDK SendSmsResponse
*/ */
private String response; private String response;
/**
* uuid
*/
private String uuid;
} }

@ -0,0 +1,31 @@
package com.cyl.h5.controller;
import com.cyl.h5.pojo.dto.LoginDTO;
import com.cyl.h5.pojo.request.RegisterRequest;
import com.cyl.h5.pojo.response.RegisterResponse;
import com.cyl.h5.pojo.vo.LoginResVO;
import com.cyl.h5.service.H5MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: czc
* @Description: TODO
* @DateTime: 2023/6/16 14:52
**/
@RestController
@RequestMapping()
public class H5MemberController {
@Autowired
private H5MemberService service;
@PostMapping("/no-auth/h5/member/register")
public ResponseEntity<RegisterResponse> register(@RequestBody RegisterRequest request){
return ResponseEntity.ok(service.register(request));
}
}

@ -0,0 +1,14 @@
package com.cyl.h5.pojo.dto;
import lombok.Data;
/**
* @Author: czc
* @Description: TODO
* @DateTime: 2023/6/16 14:58
**/
@Data
public class LoginDTO {
private String account;
private String password;
}

@ -0,0 +1,26 @@
package com.cyl.h5.pojo.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author: czc
* @Description: TODO
* @DateTime: 2023/6/19 16:31
**/
@Data
public class RegisterRequest {
@ApiModelProperty("手机号")
private String mobile;
@ApiModelProperty("密码")
private String password;
@ApiModelProperty("uuid")
private String uuid;
@ApiModelProperty("验证码")
private String code;
}

@ -0,0 +1,21 @@
package com.cyl.h5.pojo.response;
import com.cyl.ums.domain.Member;
import lombok.Data;
/**
* @Author: czc
* @Description: TODO
* @DateTime: 2023/6/19 16:38
**/
@Data
public class RegisterResponse {
private boolean result;
private String message;
private String token;
private Member member;
}

@ -0,0 +1,77 @@
package com.cyl.h5.service;
import com.cyl.h5.pojo.request.RegisterRequest;
import com.cyl.h5.pojo.response.RegisterResponse;
import com.cyl.ums.domain.Member;
import com.cyl.ums.mapper.MemberMapper;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
/**
* @Author: czc
* @Description: TODO
* @DateTime: 2023/6/16 15:01
**/
@Service
@Slf4j
public class H5MemberService {
@Autowired
private MemberMapper memberMapper;
@Autowired
private RedisCache redisCache;
/**
*
* @param request
* @return
*/
public RegisterResponse register(RegisterRequest request){
log.info("request:{}", request);
RegisterResponse response = new RegisterResponse();
response.setResult(false);
if (StringUtils.isEmpty(request.getMobile())){
response.setMessage("手机号不能为空");
return response;
}
if (StringUtils.isEmpty(request.getPassword())){
response.setMessage("密码不能为空");
return response;
}
int len = request.getPassword().length();
if (len < 8 || len > 20){
response.setMessage("密码长度为8-20位");
return response;
}
//校验 验证码
String key = request.getUuid() + "_" + request.getMobile();
String code = redisCache.getCacheObject(key);
log.info("code:{}", code);
if (null == code){
response.setMessage("验证码已过期");
return response;
}else if (!code.equals(request.getCode())){
response.setMessage("验证码错误");
return response;
}
//删除缓存
redisCache.deleteObject(key);
//创建会员
Member member = new Member();
member.setPhone(request.getMobile());
member.setPassword(SecurityUtils.encryptPassword(request.getPassword()));
member.setNickname("用户" + request.getMobile());
member.setCreateTime(LocalDateTime.now());
memberMapper.insert(member);
response.setResult(true);
response.setMessage("注册成功");
return response;
}
}

@ -0,0 +1,30 @@
package com.cyl.sms;
import com.cyl.sms.service.SmsService;
import com.ruoyi.common.core.domain.model.SmsResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @Author: czc
* @Description: TODO
* @DateTime: 2023/6/19 15:39
**/
@RestController
@RequestMapping("/no-auth/sms")
public class SmsController {
@Autowired
private SmsService smsService;
/**
*
*/
@GetMapping("/sendAliyun/{phones}")
public ResponseEntity<SmsResult> sendAliyun(@PathVariable String phones){
return smsService.sendAliyun(phones);
}
}

@ -0,0 +1,79 @@
package com.cyl.sms.service;
import com.ruoyi.common.config.properties.SmsProperties;
import com.ruoyi.common.core.domain.model.SmsResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.sms.AliyunSmsTemplate;
import com.ruoyi.common.core.sms.SmsTemplate;
import com.ruoyi.common.utils.SmsUtils;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
* @Author: czc
* @Description: TODO
* @DateTime: 2023/6/19 16:28
**/
@Service
@Slf4j
public class SmsService {
@Autowired
private RedisCache redisCache;
@Autowired
private SmsProperties smsProperties;
private final String templateId = "SMS_146125046";
public ResponseEntity<SmsResult> sendAliyun(String phones){
if (!smsProperties.getEnabled()){
return ResponseEntity.ok(
SmsResult.builder()
.isSuccess(false)
.message("当前系统没有开启短信服务")
.build()
);
}
if (StringUtils.isEmpty(phones)){
return ResponseEntity.ok(
SmsResult.builder()
.isSuccess(false)
.message("手机号不能为空")
.build()
);
}
byte[] decodedBytes = Base64.getDecoder().decode(phones);
phones = new String(decodedBytes);
log.info("base64解码后的手机号为{}", phones);
String code = SmsUtils.createRandom(true, 4);
Map<String, String> map = new HashMap<>();
map.put("code", code);
SmsTemplate smsTemplate = new AliyunSmsTemplate(smsProperties);
SmsResult send = smsTemplate.send(phones, templateId, map);
// 验证码存redis当前只用于注册和登录手机号只有一个
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
send.setUuid(uuid);
try{
redisCache.setCacheObject(uuid + "_" + phones, code, 5, TimeUnit.MINUTES);
}catch (Exception e){
return ResponseEntity.ok(
SmsResult.builder()
.isSuccess(false)
.message("服务繁忙,请稍后再试")
.build()
);
}
return ResponseEntity.ok(send);
}
}
Loading…
Cancel
Save