Commit 71821399 by 段启岩

昵称修改添加上限

parent 901bdabf
package cn.meteor.beyondclouds.modules.user.dto;
import cn.meteor.beyondclouds.modules.user.entity.UserStatistics;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -38,6 +39,9 @@ public class UserInfoDTO {
@ApiModelProperty(value = "QQ号")
private String qqNumber;
@JsonInclude(JsonInclude.Include.NON_NULL)
private Boolean nickCanModify;
private Date createTime;
private Date updateTime;
......
......@@ -54,6 +54,12 @@ public class User implements Serializable {
@ApiModelProperty(value = "QQ号")
private String qqNumber;
@ApiModelProperty(value = "本月开始修改昵称的时间")
private Date nickModifyStartTime;
@ApiModelProperty(value = "本阶段昵称修改次数")
private Integer nickModifyCount;
private Date createTime;
private Date updateTime;
......
......@@ -28,7 +28,8 @@ public enum UserErrorCode implements IErrorCode {
BINDING_MOBILE_VERIFY_CODE_ERROR(10015, "手机验证码错误"),
NON_LOCAL_AUTH_INFO(10016, "该手机未注册"),
USER_NOT_EXISTS(10017, "要查看的用户不存在"),
USER_NICK_NAME_USED(10018,"该昵称已存在");
USER_NICK_NAME_USED(10018,"该昵称已存在"),
NICK_MODIFY_UPPER_LIMIT(10019, "本月昵称修改次数已达上限");
UserErrorCode(long code, String msg) {
this.code = code;
......
......@@ -5,7 +5,6 @@ import cn.meteor.beyondclouds.common.dto.QQAuthResultDTO;
import cn.meteor.beyondclouds.common.exception.OssException;
import cn.meteor.beyondclouds.common.helper.IOssHelper;
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.DataItemType;
import cn.meteor.beyondclouds.core.redis.RedisKey;
......@@ -42,6 +41,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Set;
......@@ -64,6 +64,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
private IUserFollowService userFollowService;
private IMessageQueueService messageQueueService;
private static final long MILLS_OF_DAY = 1000 * 60 * 60 * 24;
@Autowired
public UserServiceImpl(IUserAuthLocalService userAuthLocalService, IRedisHelper redisHelper, IUserAuthAppService userAuthAppService, IMailService mailService) {
this.userAuthLocalService = userAuthLocalService;
......@@ -271,13 +273,45 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
&& !user.getUserAvatar().equals(userIdDb.getUserAvatar());
//查询昵称是否重复
//查询是否到达本月修改上限以及昵称是否重复
if(userNickUpdate){
Date nickModifyStartTime = userIdDb.getNickModifyStartTime();
Integer nickModifyCount = userIdDb.getNickModifyCount();
boolean canModifyNick;
// 如果count等于0或nickModifyStartTime为null,则重置nickModifyStartTime为当前时间,nickModifyCount设置为1
if (0 == nickModifyCount || nickModifyStartTime == null) {
nickModifyStartTime = new Date();
nickModifyCount = 1;
canModifyNick = true;
} else if (System.currentTimeMillis() - nickModifyStartTime.getTime() > MILLS_OF_DAY * 30){
// 判断本月时间是否已经过去,过去则重置
nickModifyStartTime = new Date();
nickModifyCount = 1;
canModifyNick = true;
} else {
// 判断本月修改次数是否超过3次
if (nickModifyCount >= 3) {
throw new UserServiceException(UserErrorCode.NICK_MODIFY_UPPER_LIMIT);
} else {
canModifyNick = true;
nickModifyCount = nickModifyCount + 1;
}
}
if (canModifyNick) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("nick_name", user.getNickName());
if( null != getOne(queryWrapper)){
throw new UserServiceException(UserErrorCode.USER_NICK_NAME_USED);
}
// 更新昵称修改次数和时间
userIdDb.setNickModifyStartTime(nickModifyStartTime);
userIdDb.setNickModifyCount(nickModifyCount);
updateById(userIdDb);
}
}
updateById(user);
......@@ -458,11 +492,34 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
}
UserStatistics userStatistics = getStatistics(userId, updateVisited);
UserInfoDTO userInfoDTO = new UserInfoDTO();
BeanUtils.copyProperties(user, userInfoDTO);
userInfoDTO.setStatistics(userStatistics);
if (SubjectUtils.isAuthenticated()) {
String currentUserId = (String) SubjectUtils.getSubject().getId();
if (currentUserId.equals(userId)) {
Date nickModifyStartTime = user.getNickModifyStartTime();
Integer nickModifyCount = user.getNickModifyCount();
boolean canModifyNick;
// 如果count等于0或nickModifyStartTime为null,则重置nickModifyStartTime为当前时间,nickModifyCount设置为1
if (0 == nickModifyCount || nickModifyStartTime == null) {
canModifyNick = true;
} else if (System.currentTimeMillis() - nickModifyStartTime.getTime() > MILLS_OF_DAY * 30){
// 判断本月时间是否已经过去,过去则重置
canModifyNick = true;
} else {
// 判断本月修改次数是否超过3次
if (nickModifyCount >= 3) {
canModifyNick = false;
} else {
canModifyNick = true;
}
}
userInfoDTO.setNickCanModify(canModifyNick);
}
}
return userInfoDTO;
}
......
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