优化用户账号名称校验和错误码

This commit is contained in:
aikai 2025-03-31 10:21:12 +08:00
parent e20ab5d933
commit 4dd58bdfeb
18 changed files with 67 additions and 30 deletions

View File

@ -24,9 +24,9 @@ public class LoginLogCreateReqDTO {
@Schema(description = "用户类型,参见 UserTypeEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "2" )
@NotNull(message = "用户类型不能为空")
private Integer userType;
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@NotBlank(message = "用户账号不能为空")
@Size(max = 30, message = "用户账号长度不能超过30个字符")
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@NotBlank(message = "用户名称不能为空")
@Size(max = 30, message = "用户名称长度不能超过30个字符")
private String username;
@Schema(description = "登录结果,参见 LoginResultEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")

View File

@ -34,7 +34,7 @@ public interface ErrorCodeConstants {
ErrorCode ROLE_ADMIN_CODE_ERROR = new ErrorCode(1_002_002_005, "标识【{}】不能使用");
// ========== 用户模块 1-002-003-000 ==========
ErrorCode USER_USERNAME_EXISTS = new ErrorCode(1_002_003_000, "用户账号已经存在");
ErrorCode USER_USERNAME_EXISTS = new ErrorCode(1_002_003_000, "用户名称已经存在");
ErrorCode USER_MOBILE_EXISTS = new ErrorCode(1_002_003_001, "手机号已经存在");
ErrorCode USER_EMAIL_EXISTS = new ErrorCode(1_002_003_002, "邮箱已经存在");
ErrorCode USER_NOT_EXISTS = new ErrorCode(1_002_003_003, "用户不存在");

View File

@ -14,10 +14,10 @@ import javax.validation.constraints.Size;
@Data
public class AuthRegisterReqVO {
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@NotBlank(message = "用户账号不能为空")
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@NotBlank(message = "用户名称不能为空")
@Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户名称由 数字、字母 组成")
@Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符")
@Size(min = 4, max = 30, message = "用户名称长度为 4-30 个字符")
private String username;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")

View File

@ -36,4 +36,7 @@ public class HouseAreaRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "地图库位节点ids")
private List<Long> mapItemIds;
}

View File

@ -18,7 +18,7 @@ public class LoginLogPageReqVO extends PageParam {
@Schema(description = "用户 IP模拟匹配", example = "127.0.0.1")
private String userIp;
@Schema(description = "用户账号,模拟匹配", example = "芋道")
@Schema(description = "用户名称,模拟匹配", example = "芋道")
private String username;
@Schema(description = "操作状态", example = "true")

View File

@ -33,8 +33,8 @@ public class LoginLogRespVO {
@Schema(description = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
private String traceId;
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@ExcelProperty("用户账号")
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@ExcelProperty("用户名称")
private String username;
@Schema(description = "登录结果,参见 LoginResultEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")

View File

@ -16,7 +16,7 @@ public class OAuth2UserInfoRespVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
private String username;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")

View File

@ -25,7 +25,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 仓库点位地图")
@RestController
@RequestMapping("/system/position-map/")
@RequestMapping("/system/position-map")
@Validated
public class PositionMapController {

View File

@ -51,16 +51,16 @@ public class TenantSaveReqVO {
// ========== 创建需要传递的字段 ==========
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户名称由 数字、字母 组成")
@Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符")
@Size(min = 4, max = 30, message = "用户名称长度为 4-30 个字符")
private String username;
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
@Length(min = 4, max = 16, message = "密码长度为 4-16 位")
private String password;
@AssertTrue(message = "用户账号、密码不能为空")
@AssertTrue(message = "用户名称、密码不能为空")
@JsonIgnore
public boolean isUsernameValid() {
return id != null // 修改时不需要传递

View File

@ -16,7 +16,7 @@ public class UserProfileRespVO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
private String username;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")

View File

@ -19,7 +19,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@EqualsAndHashCode(callSuper = true)
public class UserPageReqVO extends PageParam {
@Schema(description = "用户账号,模糊匹配", example = "yudao")
@Schema(description = "用户名称,模糊匹配", example = "yudao")
private String username;
@Schema(description = "手机号码,模糊匹配", example = "yudao")

View File

@ -20,7 +20,7 @@ public class UserRespVO{
@ExcelProperty("用户编号")
private Long id;
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@ExcelProperty("用户名称")
private String username;

View File

@ -21,11 +21,11 @@ public class UserSaveReqVO {
@Schema(description = "用户编号", example = "1024")
private Long id;
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@NotBlank(message = "用户账号不能为空")
@Schema(description = "用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
@NotBlank(message = "用户名称不能为空")
@Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户名称由 数字、字母 组成")
@Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符")
@DiffLogField(name = "用户账号")
@Size(min = 4, max = 30, message = "用户名称长度为 4-30 个字符")
@DiffLogField(name = "用户名称")
private String username;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")

View File

@ -1,12 +1,11 @@
package cn.iocoder.yudao.module.system.dal.dataobject.housearea;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import lombok.*;
import java.util.List;
/**
* 库区 DO
*
@ -45,4 +44,9 @@ public class HouseAreaDO extends BaseDO {
*/
private String areaMsg;
/**
* 地图库位节点ids
*/
@TableField(exist = false)
private List<Long> mapItemIds;
}

View File

@ -49,7 +49,7 @@ public class LoginLogDO extends BaseDO {
*/
private Integer userType;
/**
* 用户账号
* 用户名称
*
* 冗余因为账号可以变更
*/

View File

@ -34,7 +34,7 @@ public class AdminUserDO extends TenantBaseDO {
@TableId
private Long id;
/**
* 用户账号
* 用户名称
*/
private String username;
/**

View File

@ -28,6 +28,7 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -89,7 +90,20 @@ public class HouseAreaServiceImpl extends ServiceImpl<HouseAreaMapper, HouseArea
@Override
public PageResult<HouseAreaDO> getHouseAreaPage(HouseAreaPageReqVO pageReqVO) {
return houseAreaMapper.selectPage(pageReqVO);
PageResult<HouseAreaDO> houseAreaDOPageResult = houseAreaMapper.selectPage(pageReqVO);
if (CollUtil.isNotEmpty(houseAreaDOPageResult.getList())) {
List<Long> ids = houseAreaDOPageResult.getList().stream().map(HouseAreaDO::getId).collect(Collectors.toList());
List<PositionMapItemDO> list = positionMapItemService.list(new LambdaQueryWrapper<PositionMapItemDO>()
.eq(PositionMapItemDO::getPositionMapId, pageReqVO.getPositionMapId())
.in(PositionMapItemDO::getAreaId, ids));
if (CollUtil.isNotEmpty(list)) {
Map<Long, List<Long>> map = CollectionUtils.convertMultiMap(list, PositionMapItemDO::getAreaId, PositionMapItemDO::getId);
for (HouseAreaDO houseAreaDO : houseAreaDOPageResult.getList()) {
houseAreaDO.setMapItemIds(map.getOrDefault(houseAreaDO.getId(), Collections.emptyList()));
}
}
}
return houseAreaDOPageResult;
}
@Override
@ -98,6 +112,7 @@ public class HouseAreaServiceImpl extends ServiceImpl<HouseAreaMapper, HouseArea
// 判断名称唯一
Long count = houseAreaMapper.selectCount(
new LambdaQueryWrapper<HouseAreaDO>()
.eq(HouseAreaDO::getPositionMapId, createReqVO.getPositionMapId())
.eq(HouseAreaDO::getAreaName, createReqVO.getAreaName())
.ne(ObjectUtil.isNotNull(createReqVO.getId()), HouseAreaDO::getId, createReqVO.getId())
);

View File

@ -27,6 +27,7 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -63,7 +64,20 @@ public class WareHouseLaneServiceImpl extends ServiceImpl<WareHouseLaneMapper, W
@Override
public PageResult<WareHouseLaneDO> getHouseLanePage(WareHouseLanePageReqVO pageReqVO) {
return houseLaneMapper.selectPage(pageReqVO);
PageResult<WareHouseLaneDO> houseLaneDOPageResult = houseLaneMapper.selectPage(pageReqVO);
if (CollUtil.isNotEmpty(houseLaneDOPageResult.getList())) {
List<Long> ids = houseLaneDOPageResult.getList().stream().map(WareHouseLaneDO::getId).collect(Collectors.toList());
List<PositionMapItemDO> list = positionMapItemService.list(new LambdaQueryWrapper<PositionMapItemDO>()
.eq(PositionMapItemDO::getPositionMapId, pageReqVO.getPositionMapId())
.in(PositionMapItemDO::getLaneId, ids));
if (CollUtil.isNotEmpty(list)) {
Map<Long, List<Long>> map = CollectionUtils.convertMultiMap(list, PositionMapItemDO::getLaneId, PositionMapItemDO::getId);
for (WareHouseLaneDO wareHouseLaneDO : houseLaneDOPageResult.getList()) {
wareHouseLaneDO.setMapItemIds(map.getOrDefault(wareHouseLaneDO.getId(), Collections.emptyList()));
}
}
}
return houseLaneDOPageResult;
}
@Override
@ -73,6 +87,7 @@ public class WareHouseLaneServiceImpl extends ServiceImpl<WareHouseLaneMapper, W
Long num = houseLaneMapper.selectCount(
new LambdaQueryWrapper<WareHouseLaneDO>()
.eq(WareHouseLaneDO::getLaneName, createReqVO.getLaneName())
.eq(WareHouseLaneDO::getPositionMapId, createReqVO.getPositionMapId())
.ne(ObjectUtil.isNotNull(createReqVO.getId()), WareHouseLaneDO::getId, createReqVO.getId())
);
if (num > 0) {