Commit 0f729c81 by 段启岩

用户昵称自动生成

parent c5439361
package cn.meteor.beyondclouds.core.generator;
/**
* 生成器接口
* @author meteor
*/
public interface Generator<T> {
/**
* 获取下一个生产的对象
* @return
*/
T next();
}
...@@ -77,4 +77,8 @@ public final class RedisKey { ...@@ -77,4 +77,8 @@ public final class RedisKey {
public static String IP_FILED_LATEST_VISIT_TIME(String ipAddress, ParamType paramType, String paramValue) { public static String IP_FILED_LATEST_VISIT_TIME(String ipAddress, ParamType paramType, String paramValue) {
return "IP_FILED_LATEST_VISIT_TIME:" + ipAddress + ":" + paramType.name() + ":" + paramValue; return "IP_FILED_LATEST_VISIT_TIME:" + ipAddress + ":" + paramType.name() + ":" + paramValue;
} }
public static String USER_NICK_GEN(String datePrefix) {
return "USER_NICK_GEN:" + datePrefix;
}
} }
package cn.meteor.beyondclouds.modules.user.generator;
import cn.meteor.beyondclouds.common.helper.IRedisHelper;
import cn.meteor.beyondclouds.core.generator.Generator;
import cn.meteor.beyondclouds.core.lock.RedisLockFactory;
import cn.meteor.beyondclouds.core.redis.RedisKey;
import cn.meteor.beyondclouds.modules.user.entity.User;
import cn.meteor.beyondclouds.modules.user.service.IUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.concurrent.locks.Lock;
/**
* 用户昵称生成器
* @author meteor
*/
@Component
public class UserNickGenerator implements Generator<String> {
private static final String NICK_PREFIX = "y";
private IUserService userService;
private IRedisHelper redisHelper;
private RedisLockFactory redisLockFactory;
@Autowired
public UserNickGenerator(IUserService userService, IRedisHelper redisHelper, RedisLockFactory redisLockFactory) {
this.userService = userService;
this.redisHelper = redisHelper;
this.redisLockFactory = redisLockFactory;
}
@Override
public String next() {
boolean repeat;
String nickName;
do {
nickName = generateNickName();
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("nick_name", nickName);
userService.list(userQueryWrapper);
if (userService.list(userQueryWrapper).size() > 0) {
repeat = true;
} else {
repeat = false;
}
} while (repeat);
return nickName;
}
private String generateNickName() {
LocalDateTime localDateTime = LocalDateTime.now();
int year = localDateTime.getYear();
year = year % 10;
int month = localDateTime.getMonthValue();
int day = localDateTime.getMonthValue();
String datePrefix = String.format("%d%d%d", year, month, day);
datePrefix.replaceAll("0", "");
int count = getAndIncreaseNickCount(datePrefix);
return NICK_PREFIX + datePrefix + count;
}
/**
* @param datePrefix
* @return
*/
private int getAndIncreaseNickCount(String datePrefix) {
Lock lock = redisLockFactory.createLock(datePrefix);
// 获取redis锁
while (!lock.tryLock()) {};
Integer count = redisHelper.get(RedisKey.USER_NICK_GEN(datePrefix), Integer.class);
if (null == count) {
count = 1;
redisHelper.set(RedisKey.USER_NICK_GEN(datePrefix), 1);
} else {
redisHelper.set(RedisKey.USER_NICK_GEN(datePrefix), count + 1);
}
// 释放锁
lock.unlock();
return count;
}
}
...@@ -5,6 +5,7 @@ import cn.meteor.beyondclouds.common.dto.QQAuthResultDTO; ...@@ -5,6 +5,7 @@ import cn.meteor.beyondclouds.common.dto.QQAuthResultDTO;
import cn.meteor.beyondclouds.common.exception.OssException; import cn.meteor.beyondclouds.common.exception.OssException;
import cn.meteor.beyondclouds.common.helper.IOssHelper; import cn.meteor.beyondclouds.common.helper.IOssHelper;
import cn.meteor.beyondclouds.common.helper.IRedisHelper; import cn.meteor.beyondclouds.common.helper.IRedisHelper;
import cn.meteor.beyondclouds.core.generator.Generator;
import cn.meteor.beyondclouds.core.queue.message.DataItemChangeMessage; import cn.meteor.beyondclouds.core.queue.message.DataItemChangeMessage;
import cn.meteor.beyondclouds.core.queue.message.DataItemType; import cn.meteor.beyondclouds.core.queue.message.DataItemType;
import cn.meteor.beyondclouds.core.redis.RedisKey; import cn.meteor.beyondclouds.core.redis.RedisKey;
...@@ -23,6 +24,7 @@ import cn.meteor.beyondclouds.modules.user.enums.AuthStatus; ...@@ -23,6 +24,7 @@ import cn.meteor.beyondclouds.modules.user.enums.AuthStatus;
import cn.meteor.beyondclouds.modules.user.enums.ThirdPartyAppType; import cn.meteor.beyondclouds.modules.user.enums.ThirdPartyAppType;
import cn.meteor.beyondclouds.modules.user.enums.UserErrorCode; import cn.meteor.beyondclouds.modules.user.enums.UserErrorCode;
import cn.meteor.beyondclouds.modules.user.exception.UserServiceException; import cn.meteor.beyondclouds.modules.user.exception.UserServiceException;
import cn.meteor.beyondclouds.modules.user.generator.UserNickGenerator;
import cn.meteor.beyondclouds.modules.user.mapper.UserMapper; import cn.meteor.beyondclouds.modules.user.mapper.UserMapper;
import cn.meteor.beyondclouds.modules.user.service.*; import cn.meteor.beyondclouds.modules.user.service.*;
import cn.meteor.beyondclouds.util.*; import cn.meteor.beyondclouds.util.*;
...@@ -58,7 +60,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU ...@@ -58,7 +60,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
private IMailService mailService; private IMailService mailService;
private IUserStatisticsService userStatisticsService; private IUserStatisticsService userStatisticsService;
private UserMapper userMapper; private UserMapper userMapper;
private UserNickGenerator userNickGenerator;
private IUserFollowService userFollowService; private IUserFollowService userFollowService;
private IMessageQueueService messageQueueService; private IMessageQueueService messageQueueService;
...@@ -71,6 +73,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU ...@@ -71,6 +73,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
} }
@Autowired @Autowired
public void setUserNickGenerator(UserNickGenerator userNickGenerator) {
this.userNickGenerator = userNickGenerator;
}
@Autowired
public void setOssHelper(IOssHelper ossHelper) { public void setOssHelper(IOssHelper ossHelper) {
this.ossHelper = ossHelper; this.ossHelper = ossHelper;
} }
...@@ -124,7 +131,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU ...@@ -124,7 +131,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
} }
//3. 创建用户 //3. 创建用户
User user = new User(); User user = new User();
user.setNickName("昵称"); user.setNickName(userNickGenerator.next());
user.setSignature("该用户很懒,还没设置签名"); user.setSignature("该用户很懒,还没设置签名");
user.setUserAvatar(avatar); user.setUserAvatar(avatar);
user.setMobile(mobile); user.setMobile(mobile);
...@@ -179,7 +186,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU ...@@ -179,7 +186,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
//3. 创建用户 //3. 创建用户
User user = new User(); User user = new User();
user.setNickName("昵称"); user.setNickName(userNickGenerator.next());
user.setSignature("默认签名"); user.setSignature("默认签名");
user.setUserAvatar(avatar); user.setUserAvatar(avatar);
user.setEmail(email); user.setEmail(email);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment