From 6d2ec1b3b6979bce9c8f9244c8a17f5ccfa67063 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期四, 26 十二月 2024 17:21:36 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master-v4' into master-v4 --- src/main/java/com/mzl/flower/service/system/UserService.java | 77 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 77 insertions(+), 0 deletions(-) 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 e5286b5..fafa505 100644 --- a/src/main/java/com/mzl/flower/service/system/UserService.java +++ b/src/main/java/com/mzl/flower/service/system/UserService.java @@ -7,6 +7,8 @@ import com.mzl.flower.config.security.SecurityUtils; 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.customer.UpdateCustomerDTO; import com.mzl.flower.dto.request.system.*; import com.mzl.flower.dto.response.current.CurrentUserDTO; import com.mzl.flower.dto.response.system.EmployeeDTO; @@ -20,6 +22,7 @@ import com.mzl.flower.mapper.system.*; 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.service.point.CustomerPointService; import com.mzl.flower.service.supplier.StationService; import com.mzl.flower.service.supplier.SupplierService; @@ -27,15 +30,21 @@ import com.mzl.flower.utils.UUIDGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import javax.validation.constraints.NotBlank; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.concurrent.TimeUnit; @Service @Transactional @@ -83,6 +92,8 @@ @Autowired private StationService stationService; + @Autowired + RedissonClient redissonClient; public User findUserByOpenId(String openId, String sessionKey, String unionId , String imgUrl, String nickname,String userType){ @@ -483,4 +494,70 @@ .eq(User::getVipGrade,getVipGrade); return userMapper.selectList(queryWrapper); } + + /** + * 查看微信是否已经存在用户 + * @param openId + * @param sessionKey + * @param unionId + * @param userType + * @return + */ + public User getExistUserByOpenId(String openId, String sessionKey, String unionId, String userType) { + List<String> userTypes = new ArrayList<>(); + userTypes.add(userType); + User user = userMapper.getByOpenID(openId,userTypes); + return user; + } + + public void registWxUser(CreateWechatUserDTO dto) { + String RETISTER_KEY = "%s_%s"; + RLock lock = redissonClient.getLock(String.format(RETISTER_KEY,dto.getPurePhoneNumber(),dto.getUserType())); + try { + // 获取锁,最多等待 10 秒,锁自动释放时间 30 秒 + if (lock.tryLock(10, 30, TimeUnit.SECONDS)) { + try{ + // 其次查找当前loginName是prephonenume的,userType是customer的用户存在不存在 + if (StringUtils.isEmpty(dto.getPurePhoneNumber()) && StringUtils.isEmpty(dto.getPhoneNumber())) { + throw new ValidationException("微信获取的电话号码为空!无法注册"); + } + // 1:查看用户存在不存在 + List<String> userTypes = new ArrayList<>(); + userTypes.add(dto.getUserType()); + User user = findByLoginName(dto.getPurePhoneNumber(), userTypes); + if (ObjectUtils.isEmpty(user)) { + // 是新用户,需要注册 + user = new User(); + user.setId(UUIDGenerator.getUUID()); + user.setLoginName(dto.getPurePhoneNumber()); + user.setTel(dto.getPurePhoneNumber()); + user.setNickName(dto.getPurePhoneNumber()); + 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.getPurePhoneNumber())) { + updateCustomerDTO.setName("花满芫-" + dto.getPurePhoneNumber().substring(dto.getPurePhoneNumber().length() - 4)); + } + customerService.addOrUpdateCustomer(updateCustomerDTO); + } + + BindWechatDTO wechatDTO = new BindWechatDTO(); + wechatDTO.setRealName(dto.getPurePhoneNumber()); + bindWechat(user.getId(), dto.getOpenId(), dto.getUnionId(), dto.getSessionKey(), wechatDTO); + }finally { + lock.unlock(); + } + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } -- Gitblit v1.9.3