From 5997dc8acfa81a6c867c28810d1c3c9714efc46c Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期六, 29 三月 2025 14:55:42 +0800
Subject: [PATCH] fix: 登录
---
src/main/java/com/mzl/flower/web/supplier/SupplierController.java | 8 +-
src/main/java/com/mzl/flower/web/login/CustomerLoginController.java | 71 +++++++++++++++++++++++
src/main/java/com/mzl/flower/dto/request/UserLoginDTO.java | 6 ++
src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java | 19 ++++++
src/main/java/com/mzl/flower/service/register/SmsService.java | 14 ++--
src/main/resources/application-test.yml | 2
src/main/java/com/mzl/flower/service/system/UserService.java | 53 +++++++++++++++++
7 files changed, 162 insertions(+), 11 deletions(-)
diff --git a/src/main/java/com/mzl/flower/dto/request/UserLoginDTO.java b/src/main/java/com/mzl/flower/dto/request/UserLoginDTO.java
index 7ab2151..fb52515 100644
--- a/src/main/java/com/mzl/flower/dto/request/UserLoginDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/UserLoginDTO.java
@@ -21,4 +21,10 @@
@ApiModelProperty(value = "图形验证码id")
private String codeId;
+
+
+ @ApiModelProperty(value = "用户类型")
+ private String userType;
+
+
}
diff --git a/src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java b/src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java
new file mode 100644
index 0000000..9464958
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/UserPhoneLoginDTO.java
@@ -0,0 +1,19 @@
+package com.mzl.flower.dto.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class UserPhoneLoginDTO {
+
+ @ApiModelProperty(value = "用户名/手机号码", required = true)
+ private String username;
+
+ @ApiModelProperty(value = "短信验证码")
+ private String smsCode;
+
+ @ApiModelProperty(value = "用户类型")
+ private String userType;
+
+
+}
diff --git a/src/main/java/com/mzl/flower/service/register/SmsService.java b/src/main/java/com/mzl/flower/service/register/SmsService.java
index 3d6f730..bd8bf1e 100644
--- a/src/main/java/com/mzl/flower/service/register/SmsService.java
+++ b/src/main/java/com/mzl/flower/service/register/SmsService.java
@@ -50,7 +50,8 @@
if(existsCode(dto.getTel())){
throw new ValidationException("短信验证码已发送,请勿频繁发送");
}
- String smsCode = generateSmsCode();
+// String smsCode = generateSmsCode();
+ String smsCode ="888888";
String key;
if(Constants.USER_TYPE.admin.name().equals(dto.getUserType())){
key = SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.admin.name() + SEPARATOR + dto.getTel();
@@ -66,13 +67,14 @@
Map<String, String> paramMap = new HashMap<>();
paramMap.put("code", smsCode);
- try {
- SmsUtil.sendSms(dto.getTel(),smsProperties.getVerificationCode(),paramMap);
+// try {
+// //暂时不实际发送验证码
+// SmsUtil.sendSms(dto.getTel(),smsProperties.getVerificationCode(),paramMap);
stringCacheClient.set(SMS_CODE_KEY + SEPARATOR + SEPARATOR + dto.getTel(),smsCode,60);
stringCacheClient.set(key,smsCode,600);
- } catch (ClientException e) {
- throw new RuntimeException("短信发送失败");
- }
+// } catch (ClientException e) {
+// throw new RuntimeException("短信发送失败");
+// }
//todo 发送短信
}
diff --git a/src/main/java/com/mzl/flower/service/system/UserService.java b/src/main/java/com/mzl/flower/service/system/UserService.java
index 2f0febf..62a34f5 100644
--- a/src/main/java/com/mzl/flower/service/system/UserService.java
+++ b/src/main/java/com/mzl/flower/service/system/UserService.java
@@ -8,6 +8,8 @@
import com.mzl.flower.constant.Constants;
import com.mzl.flower.dto.request.BindWechatDTO;
import com.mzl.flower.dto.request.CreateWechatUserDTO;
+import com.mzl.flower.dto.request.UserLoginDTO;
+import com.mzl.flower.dto.request.UserPhoneLoginDTO;
import com.mzl.flower.dto.request.customer.UpdateCustomerDTO;
import com.mzl.flower.dto.request.system.*;
import com.mzl.flower.dto.response.current.CurrentUserDTO;
@@ -586,4 +588,55 @@
}
+ public User registPhoneUser(UserPhoneLoginDTO dto) {
+ String RETISTER_KEY = "%s_%s";
+ RLock lock = redissonClient.getLock(String.format(RETISTER_KEY, dto.getUsername(), dto.getUserType()));
+ try {
+ // 获取锁,最多等待 10 秒,锁自动释放时间 30 秒
+ if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
+ try {
+ // 其次查找当前loginName是prephonenume的,userType是customer的用户存在不存在
+ if (StringUtils.isEmpty(dto.getUsername()) && StringUtils.isEmpty(dto.getUsername())) {
+ throw new ValidationException("电话号码为空!无法注册");
+ }
+ // 1:查看用户存在不存在
+ List<String> userTypes = new ArrayList<>();
+ userTypes.add(dto.getUserType());
+ User user = findByLoginName(dto.getUsername(), userTypes);
+ if (ObjectUtils.isEmpty(user)) {
+ // 是新用户,需要注册
+ user = new User();
+ user.setId(UUIDGenerator.getUUID());
+ user.setLoginName(dto.getUsername());
+ user.setTel(dto.getUsername());
+ user.setNickName(dto.getUsername());
+ user.setPassword(passwordEncoder.encode("12345678"));
+ user.setType(dto.getUserType());
+ user.setStatus(Constants.STATUS_ACTIVE);
+ user.setIsSys(Constants.N);
+ user.create();
+ userMapper.insert(user);
+
+ // 注册商户信息
+ UpdateCustomerDTO updateCustomerDTO = new UpdateCustomerDTO();
+ updateCustomerDTO.setUserId(user.getId());
+ if (StringUtils.isNotBlank(dto.getUsername())) {
+ updateCustomerDTO.setName("智信-" + dto.getUsername().substring(dto.getUsername().length() - 4));
+
+ }
+ customerService.addOrUpdateCustomer(updateCustomerDTO);
+
+ return user;
+ }
+ } finally {
+ lock.unlock();
+ }
+ }
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+
}
diff --git a/src/main/java/com/mzl/flower/web/login/CustomerLoginController.java b/src/main/java/com/mzl/flower/web/login/CustomerLoginController.java
index f0b1510..2314b40 100644
--- a/src/main/java/com/mzl/flower/web/login/CustomerLoginController.java
+++ b/src/main/java/com/mzl/flower/web/login/CustomerLoginController.java
@@ -14,6 +14,7 @@
import com.mzl.flower.constant.Constants;
import com.mzl.flower.dto.request.CreateWechatUserDTO;
import com.mzl.flower.dto.request.UserLoginDTO;
+import com.mzl.flower.dto.request.UserPhoneLoginDTO;
import com.mzl.flower.dto.response.customer.CustomerDTO;
import com.mzl.flower.dto.response.wx.WxUserVO;
import com.mzl.flower.entity.system.User;
@@ -259,4 +260,74 @@
}
}
}
+
+ @PostMapping("/login/customer/phone/v2")
+ @ApiOperation(value = "手机验证码登录系统", notes = "手机验证码登录系统")
+ public ResponseEntity<ReturnDataDTO<OAuth2AccessToken>> loginPhoneV2(HttpServletRequest request,
+ @RequestBody UserPhoneLoginDTO loginDTO) {
+ String tel = loginDTO.getUsername();
+ String smsCode = loginDTO.getSmsCode();
+ if (StringUtils.isBlank(tel)) {
+ throw new ValidationException("手机号码不能为空");
+ }
+ if (StringUtils.isBlank(smsCode)) {
+ throw new ValidationException("手机验证码不能为空");
+ }
+ //从缓存中获取验证码
+ String smsCacheCode = stringCacheClient.get(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.customer.name() + SEPARATOR + tel);
+ if (!StringUtils.equals(smsCode, smsCacheCode)) {
+ throw new ValidationException("手机验证码不正确");
+ }
+
+ User user = userService.findByTel(tel, Constants.USER_TYPE.customer.name());
+ String tokenCache ="";
+ if(user == null){
+ loginDTO.setUserType(Constants.USER_TYPE.customer.name());
+ User user1 = userService.registPhoneUser(loginDTO);
+ if(org.springframework.util.StringUtils.isEmpty(user1)){
+ throw new ValidationException("注册用户信息报错");
+ }
+ tokenCache = stringCacheClient.get(TOKEN_KEY + SEPARATOR + user1.getId());
+ CustomerDTO currentCustomer = customerMapper.getCurrentCustomer(user1.getId());
+ if (ObjectUtils.isEmpty(currentCustomer)) {
+ throw new ValidationException("用户不存在");
+ }
+ if (currentCustomer.getIsEnabled() == false) {
+ throw new ValidationException("用户已禁用,请联系管理员");
+ }
+ tokenCache = stringCacheClient.get(TOKEN_KEY + SEPARATOR + user1.getId());
+ if (StringUtils.isNotBlank(tokenCache)) {
+ //强制删除token,下线
+ removeToken(tokenCache,user.getId());
+ }
+ }else{
+ CustomerDTO currentCustomer = customerMapper.getCurrentCustomer(user.getId());
+ if (ObjectUtils.isEmpty(currentCustomer)) {
+ throw new ValidationException("用户不存在");
+ }
+ if (currentCustomer.getIsEnabled() == false) {
+ throw new ValidationException("用户已禁用,请联系管理员");
+ }
+ tokenCache = stringCacheClient.get(TOKEN_KEY + SEPARATOR + user.getId());
+ if (StringUtils.isNotBlank(tokenCache)) {
+ //强制删除token,下线
+ removeToken(tokenCache,user.getId());
+ }
+ }
+ try {
+ PhoneAuthenticationToken authRequest = new PhoneAuthenticationToken(tel, smsCode, Constants.USER_TYPE.customer.name());
+ authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
+ Authentication authentication = authenticationManager.authenticate(authRequest);
+ OAuth2AccessToken token = loginService.getAccessToken(authentication, Constants.USER_TYPE.customer.name());
+ //删除缓存中的验证码
+ stringCacheClient.delete(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.customer.name() + SEPARATOR + tel);
+ stringCacheClient.set(TOKEN_KEY + SEPARATOR + user.getId(),token.getValue());
+ return returnData(R.SUCCESS.getCode(),token);
+ }catch (UsernameNotFoundException e){
+ throw new ValidationException("用户不存在");
+ }catch (Exception e) {
+ log.error(e.getMessage(), e);
+ throw new BaseException(R.RUNTIME_EXCEPTION.getCode(),"登录错误");
+ }
+ }
}
diff --git a/src/main/java/com/mzl/flower/web/supplier/SupplierController.java b/src/main/java/com/mzl/flower/web/supplier/SupplierController.java
index 79c4d87..e0671a2 100644
--- a/src/main/java/com/mzl/flower/web/supplier/SupplierController.java
+++ b/src/main/java/com/mzl/flower/web/supplier/SupplierController.java
@@ -33,7 +33,7 @@
@Slf4j
public class SupplierController extends BaseController {
- private static final R ALLOWED_CONTENT_TYPES = R.valueOf("jpg");
+// private static final R ALLOWED_CONTENT_TYPES = R.valueOf("jpg");
private final SupplierService supplierService;
public SupplierController(SupplierService supplierService) {
@@ -74,9 +74,9 @@
// 2. 检查文件类型
String contentType = avatar.getContentType();
- if (!ALLOWED_CONTENT_TYPES.contains(contentType)) {
- throw new ValidationException("不支持的文件类型");
- }
+// if (!ALLOWED_CONTENT_TYPES.contains(contentType)) {
+// throw new ValidationException("不支持的文件类型");
+// }
// 3. 生成文件名
String fileName = "avatar/" + UUID.randomUUID().toString() +
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index df7197a..95fecd6 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -3,7 +3,7 @@
active: test,swagger
datasource:
type: com.alibaba.druid.pool.DruidDataSource
- url: jdbc:mysql://47.96.225.205:3306/flower1?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8&allowMultiQueries=true
+ url: jdbc:mysql://47.96.225.205:3306/smart_message?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8&allowMultiQueries=true
username: root
password: CloudRoam
druid:
--
Gitblit v1.9.3