优化:优化部分校验类型(业务验证迁移到 Service 层,使用 CheckUtils 来验证)

This commit is contained in:
2023-01-25 23:07:25 +08:00
parent 693e825144
commit dab3e597c2
17 changed files with 50 additions and 66 deletions

View File

@@ -28,7 +28,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
import top.charles7c.cnadmin.common.model.dto.LoginUser;
import top.charles7c.cnadmin.common.util.SecureUtils;
import top.charles7c.cnadmin.common.util.helper.LoginHelper;
import top.charles7c.cnadmin.common.util.validate.ValidationUtils;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.system.model.entity.SysUser;
import top.charles7c.cnadmin.system.service.UserService;
@@ -46,15 +46,11 @@ public class LoginServiceImpl implements LoginService {
@Override
public String login(String username, String password) {
// 查询用户
SysUser sysUser = userService.getByUsername(username);
// 校验
ValidationUtils.throwIfNull(sysUser, "用户名或密码错误");
CheckUtils.throwIfNull(sysUser, "用户名或密码错误");
Long userId = sysUser.getUserId();
ValidationUtils.throwIfNotEqual(SecureUtils.md5Salt(password, userId.toString()), sysUser.getPassword(),
"用户名或密码错误");
ValidationUtils.throwIfEqual(DisEnableStatusEnum.DISABLE, sysUser.getStatus(), "此账号已被禁用,如有疑问,请联系管理员");
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(password, userId.toString()), sysUser.getPassword(), "用户名或密码错误");
CheckUtils.throwIfEqual(DisEnableStatusEnum.DISABLE, sysUser.getStatus(), "此账号已被禁用,如有疑问,请联系管理员");
// 登录
LoginUser loginUser = BeanUtil.copyProperties(sysUser, LoginUser.class);

View File

@@ -19,12 +19,13 @@ package top.charles7c.cnadmin.system.model.request;
import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import org.hibernate.validator.constraints.Length;
/**
* 创建部门信息
*
@@ -60,6 +61,6 @@ public class CreateDeptRequest implements Serializable {
* 描述
*/
@Schema(description = "描述")
@Size(max = 200, message = "描述长度不能超过 200 个字符")
@Length(max = 200, message = "描述长度不能超过 200 个字符")
private String description;
}

View File

@@ -20,12 +20,13 @@ import java.io.Serializable;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import org.hibernate.validator.constraints.Length;
import top.charles7c.cnadmin.common.enums.GenderEnum;
/**
@@ -45,7 +46,7 @@ public class UpdateBasicInfoRequest implements Serializable {
*/
@Schema(description = "昵称")
@NotBlank(message = "昵称不能为空")
@Size(max = 32, message = "昵称长度不能超过 32 个字符")
@Length(max = 32, message = "昵称长度不能超过 32 个字符")
private String nickname;
/**

View File

@@ -37,6 +37,7 @@ import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
import top.charles7c.cnadmin.common.util.ExceptionUtils;
import top.charles7c.cnadmin.common.util.TreeUtils;
import top.charles7c.cnadmin.common.util.helper.QueryHelper;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.system.mapper.DeptMapper;
import top.charles7c.cnadmin.system.model.entity.SysDept;
import top.charles7c.cnadmin.system.model.query.DeptQuery;
@@ -75,7 +76,7 @@ public class DeptServiceImpl implements DeptService {
return new ArrayList<>();
}
// 去
// 去除重复子部门列表
List<DeptVO> deDuplicationDeptList = deDuplication(list);
return deDuplicationDeptList.stream().map(d -> d.setChildren(this.getChildren(d, list)))
.collect(Collectors.toList());
@@ -134,6 +135,11 @@ public class DeptServiceImpl implements DeptService {
@Override
@Transactional(rollbackFor = Exception.class)
public Long create(CreateDeptRequest request) {
String deptName = request.getDeptName();
boolean isExist = this.checkDeptNameExist(deptName, request.getParentId(), null);
CheckUtils.throwIf(() -> isExist, String.format("新增失败,'%s'已存在", deptName));
// 保存部门信息
SysDept sysDept = BeanUtil.copyProperties(request, SysDept.class);
sysDept.setStatus(DisEnableStatusEnum.ENABLE);
deptMapper.insert(sysDept);

View File

@@ -30,15 +30,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.StrUtil;
import top.charles7c.cnadmin.common.config.properties.LocalStorageProperties;
import top.charles7c.cnadmin.common.consts.FileConstants;
import top.charles7c.cnadmin.common.model.dto.LoginUser;
import top.charles7c.cnadmin.common.util.FileUtils;
import top.charles7c.cnadmin.common.util.SecureUtils;
import top.charles7c.cnadmin.common.util.helper.LoginHelper;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
import top.charles7c.cnadmin.common.util.validate.ValidationUtils;
import top.charles7c.cnadmin.system.mapper.UserMapper;
import top.charles7c.cnadmin.system.model.entity.SysUser;
import top.charles7c.cnadmin.system.service.UserService;
@@ -64,6 +65,14 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public String uploadAvatar(MultipartFile avatarFile, Long userId) {
Long avatarMaxSizeInMb = localStorageProperties.getAvatarMaxSizeInMb();
CheckUtils.throwIf(() -> avatarFile.getSize() > avatarMaxSizeInMb * 1024 * 1024,
String.format("请上传小于 %s MB 的图片", avatarMaxSizeInMb));
String avatarImageType = FileNameUtil.extName(avatarFile.getOriginalFilename());
String[] avatarSupportImgTypes = FileConstants.AVATAR_SUPPORTED_IMG_TYPES;
CheckUtils.throwIf(() -> !StrUtil.equalsAnyIgnoreCase(avatarImageType, avatarSupportImgTypes),
String.format("头像仅支持 %s 格式的图片", String.join("", avatarSupportImgTypes)));
// 上传新头像
String avatarPath = localStorageProperties.getPath().getAvatar();
File newAvatarFile = FileUtils.upload(avatarFile, avatarPath, false);
@@ -103,8 +112,9 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updatePassword(String oldPassword, String newPassword, Long userId) {
CheckUtils.throwIfEqual(newPassword, oldPassword, "新密码不能与当前密码相同");
SysUser sysUser = this.getById(userId);
ValidationUtils.throwIfNotEqual(SecureUtils.md5Salt(oldPassword, userId.toString()), sysUser.getPassword(),
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(oldPassword, userId.toString()), sysUser.getPassword(),
"当前密码错误");
// 更新密码和密码重置时间
@@ -123,13 +133,12 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEmail(String newEmail, String currentPassword, Long userId) {
// 校验
SysUser sysUser = this.getById(userId);
ValidationUtils.throwIfNotEqual(SecureUtils.md5Salt(currentPassword, userId.toString()), sysUser.getPassword(),
CheckUtils.throwIfNotEqual(SecureUtils.md5Salt(currentPassword, userId.toString()), sysUser.getPassword(),
"当前密码错误");
Long count = userMapper.selectCount(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getEmail, newEmail));
ValidationUtils.throwIf(() -> count > 0, "邮箱已绑定其他账号,请更换其他邮箱");
ValidationUtils.throwIfEqual(newEmail, sysUser.getEmail(), "新邮箱不能与当前邮箱相同");
CheckUtils.throwIf(() -> count > 0, "邮箱已绑定其他账号,请更换其他邮箱");
CheckUtils.throwIfEqual(newEmail, sysUser.getEmail(), "新邮箱不能与当前邮箱相同");
// 更新邮箱
userMapper.update(null,
@@ -143,9 +152,8 @@ public class UserServiceImpl implements UserService {
@Override
public SysUser getById(Long userId) {
ValidationUtils.throwIfNull(userId, "用户不存在");
SysUser sysUser = userMapper.selectById(userId);
ValidationUtils.throwIfNull(sysUser, String.format("ID为 [%s] 的用户已不存在", userId));
CheckUtils.throwIfNull(sysUser, String.format("ID为 [%s] 的用户已不存在", userId));
return sysUser;
}
}