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