TUserServiceImpl.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package com.futu.goose.user.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.futu.goose.user.pojo.TUser;
  5. import com.futu.goose.user.service.TUserService;
  6. import com.futu.goose.user.mapper.TUserMapper;
  7. import com.futu.goose.utils.*;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import org.springframework.util.DigestUtils;
  11. import org.springframework.util.StringUtils;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import java.nio.charset.StandardCharsets;
  15. import java.util.HashMap;
  16. import java.util.UUID;
  17. /**
  18. * @author 张大宇
  19. * @description 针对表【t_user(基础用户表)】的数据库操作Service实现
  20. * @createDate 2025-05-06 09:39:58
  21. */
  22. @Service
  23. public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser>
  24. implements TUserService{
  25. private static final Logger logger = LoggerFactory.getLogger(TUserService.class);
  26. @Autowired
  27. private TUserMapper userMapper;
  28. @Autowired
  29. private RedisClient redisClient;
  30. @Override
  31. public ResponseResult login(TUser user) {
  32. if (StringUtils.isEmpty(user.getUsername())||StringUtils.isEmpty(user.getUsername())){
  33. return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
  34. }
  35. QueryWrapper<TUser> wrapper = new QueryWrapper<>();
  36. TUser selectOne = userMapper.selectOne(wrapper.lambda().eq(TUser::getUsername, user.getUsername()));
  37. if (selectOne==null){
  38. return ResponseResult.errorResult(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
  39. }
  40. String salt = selectOne.getSalt();
  41. String password = user.getPassword();
  42. String md5 = DigestUtils.md5DigestAsHex((password + salt).getBytes(StandardCharsets.UTF_8));
  43. if (!md5.equals(selectOne.getPassword())){
  44. return ResponseResult.errorResult(202,"密码错误");
  45. }
  46. String token = AppJwtUtil.getToken(selectOne.getId().longValue());
  47. redisClient.set("token", token);
  48. HashMap<String, String> map = new HashMap<>();
  49. map.put("token",token);
  50. map.put("name",selectOne.getUsername());
  51. return ResponseResult.okResult(map);
  52. }
  53. @Override
  54. public ResponseResult regist(TUser user) {
  55. // 验证码验证
  56. Object code = redisClient.get("CODE");
  57. if (code == null) {
  58. return new ResponseResult(201, "验证码已过期");
  59. }
  60. // 将从 Redis 获取的 Integer 类型的 code 转换为 String 类型
  61. String codeStr = String.valueOf(code);
  62. // 获取用户输入的验证码
  63. String userCode = user.getCode();
  64. if (!codeStr.equals(userCode)) {
  65. return new ResponseResult(201, "验证码错误");
  66. }
  67. // 先判断账号是否存在
  68. QueryWrapper<TUser> queryWrapper = new QueryWrapper<>();
  69. queryWrapper.lambda().eq(TUser::getUsername, user.getUsername());
  70. TUser user1 = userMapper.selectOne(queryWrapper);
  71. if (user1 != null) {
  72. return ResponseResult.errorResult(AppHttpCodeEnum.DATA_EXIST, "账号已存在");
  73. }
  74. // 盐
  75. String salt = UUID.randomUUID().toString();
  76. user.setSalt(salt);
  77. // 密码加密
  78. user.setPassword(DigestUtils.md5DigestAsHex((user.getPassword() + salt).getBytes(StandardCharsets.UTF_8)));
  79. //雪花算法
  80. user.setId(SnowflakeIdGenerator.getSnowId());
  81. // 插入用户数据
  82. userMapper.insert(user);
  83. redisClient.set("uid", user.getId());
  84. redisClient.expire("uid", 60*60);
  85. return ResponseResult.okResult(200, "注册成功");
  86. }
  87. /**
  88. * 手机号验证码登录
  89. * @param user
  90. * @return
  91. */
  92. @Override
  93. public ResponseResult phonelogin(TUser user) {
  94. // 从Redis获取验证码及有效期
  95. Object codeObj = redisClient.get("CODE");
  96. if (codeObj == null) {
  97. logger.info("用户尝试登录,验证码已过期");
  98. return new ResponseResult(201, "验证码已过期");
  99. }
  100. // 将从Redis获取的验证码转换为String类型
  101. String codeStr = String.valueOf(codeObj);
  102. // 获取用户输入的验证码
  103. String userCode = user.getCode();
  104. if (!codeStr.equals(userCode)) {
  105. logger.info("用户尝试登录,验证码错误");
  106. return new ResponseResult(201, "验证码错误");
  107. }
  108. // 先判断账号是否存在
  109. QueryWrapper<TUser> queryWrapper = new QueryWrapper<>();
  110. queryWrapper.lambda().eq(TUser::getPhone, user.getPhone());
  111. TUser user1 = userMapper.selectOne(queryWrapper);
  112. if (user1 == null) {
  113. Long snowId = SnowflakeIdGenerator.getSnowId();
  114. user.setUsername("随机账户"+String.valueOf(snowId));
  115. user.setId(snowId);
  116. userMapper.insert(user);
  117. redisClient.set("uid", user.getId());
  118. redisClient.expire("uid", 60*60);
  119. Long id = user.getId();
  120. String token = AppJwtUtil.getToken(id);
  121. redisClient.set("token", token);
  122. HashMap<String, String> map = new HashMap<>();
  123. map.put("token",token);
  124. return ResponseResult.okResult(map);
  125. }
  126. redisClient.set("uid", user1.getId());
  127. redisClient.expire("uid", 60*60);
  128. String token = AppJwtUtil.getToken(user1.getId().longValue());
  129. redisClient.set("token", token);
  130. HashMap<String, String> map = new HashMap<>();
  131. map.put("token",token);
  132. map.put("name",user1.getUsername());
  133. return ResponseResult.okResult(map);
  134. }
  135. }