From eff1dfad3cb6bbf7fbcd987d31703b8084f4190b Mon Sep 17 00:00:00 2001
From: gongzuming <gongzuming>
Date: 星期日, 27 十月 2024 17:08:33 +0800
Subject: [PATCH] 重复点击问题
---
src/main/java/com/mzl/flower/service/register/RegisterService.java | 78 +++++++++++++++++++++++----------------
1 files changed, 46 insertions(+), 32 deletions(-)
diff --git a/src/main/java/com/mzl/flower/service/register/RegisterService.java b/src/main/java/com/mzl/flower/service/register/RegisterService.java
index 7bdafa8..81b9ec2 100644
--- a/src/main/java/com/mzl/flower/service/register/RegisterService.java
+++ b/src/main/java/com/mzl/flower/service/register/RegisterService.java
@@ -1,7 +1,6 @@
package com.mzl.flower.service.register;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.constant.Constants;
import com.mzl.flower.dto.request.register.RegisterCustomerDTO;
@@ -13,6 +12,7 @@
import com.mzl.flower.mapper.system.UserWechatMapper;
import com.mzl.flower.service.customer.CustomerService;
import com.mzl.flower.service.partner.PartnerService;
+import com.mzl.flower.service.payment.RedisLockService;
import com.mzl.flower.utils.UUIDGenerator;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.crypto.password.PasswordEncoder;
@@ -36,15 +36,19 @@
private final UserWechatMapper wechatMapper;
+ private final RedisLockService lockService;
+
public RegisterService(UserMapper userMapper,
PasswordEncoder passwordEncoder,
PartnerService partnerService,
- CustomerService customerService, UserWechatMapper wechatMapper) {
+ CustomerService customerService, UserWechatMapper wechatMapper,
+ RedisLockService lockService) {
this.userMapper = userMapper;
this.passwordEncoder = passwordEncoder;
this.partnerService = partnerService;
this.customerService = customerService;
this.wechatMapper = wechatMapper;
+ this.lockService = lockService;
}
public void registerUser(RegisterDTO dto, String userType) {
@@ -65,39 +69,49 @@
}
public void registerCustomerUser(RegisterCustomerDTO dto, String userType, String openId, String sessionKey, String unionId) {
- if(checkUserExist(dto.getTel(),userType)){
- throw new ValidationException("该手机号码已经注册");
+ String key = dto.getTel() + "_" + userType;
+ boolean lock = lockService.getObjectLock(RedisLockService.LOCK_KEY_CART_, key);
+ if(!lock){
+ return;
}
- User user = new User();
- user.setId(UUIDGenerator.getUUID());
- user.setLoginName(dto.getTel());
- user.setTel(dto.getTel());
- user.setNickName(dto.getTel());
- user.setPassword(passwordEncoder.encode(dto.getPassword()));
- user.setType(userType);
- user.setStatus(Constants.STATUS_ACTIVE);
- user.setIsSys(Constants.N);
- user.create();
- userMapper.insert(user);
-
- if(StringUtils.isNotBlank(openId)){
- UserWechat wechat = wechatMapper.selectOne(new LambdaQueryWrapper<UserWechat>()
- .eq(UserWechat::getUserId,user.getId())
- .eq(UserWechat::getOpenId,openId));
- if(wechat != null){
- throw new ValidationException("该微信用户已经注册");
+ try {
+ if(checkUserExist(dto.getTel(),userType)){
+ throw new ValidationException("该手机号码已经注册");
}
- wechat = new UserWechat();
- wechat.setUserId(user.getId());
- wechat.setId(UUIDGenerator.getUUID());
- wechat.setOpenId(openId);
- wechat.setUnionId(unionId);
- wechat.setSessionKey(sessionKey);
- wechat.create(user.getId());
- wechatMapper.insert(wechat);
+ User user = new User();
+ user.setId(UUIDGenerator.getUUID());
+ user.setLoginName(dto.getTel());
+ user.setTel(dto.getTel());
+ user.setNickName(dto.getTel());
+ user.setPassword(passwordEncoder.encode(dto.getPassword()));
+ user.setType(userType);
+ user.setStatus(Constants.STATUS_ACTIVE);
+ user.setIsSys(Constants.N);
+ user.create();
+ userMapper.insert(user);
+
+ if(StringUtils.isNotBlank(openId)){
+ UserWechat wechat = wechatMapper.selectOne(new LambdaQueryWrapper<UserWechat>()
+ .eq(UserWechat::getUserId,user.getId())
+ .eq(UserWechat::getOpenId,openId));
+ if(wechat != null){
+ throw new ValidationException("该微信用户已经注册");
+ }
+ wechat = new UserWechat();
+ wechat.setUserId(user.getId());
+ wechat.setId(UUIDGenerator.getUUID());
+ wechat.setOpenId(openId);
+ wechat.setUnionId(unionId);
+ wechat.setSessionKey(sessionKey);
+ wechat.create(user.getId());
+ wechatMapper.insert(wechat);
+ }
+ dto.getDto().setUserId(user.getId());
+ customerService.addOrUpdateCustomer(dto.getDto());
+ }finally {
+ lockService.releaseObjectLock(RedisLockService.LOCK_KEY_CART_, key);
}
- dto.getDto().setUserId(user.getId());
- customerService.addOrUpdateCustomer(dto.getDto());
+
}
--
Gitblit v1.9.3