From 09cef02a870a61e51893dc4257c6f0d839251a18 Mon Sep 17 00:00:00 2001 From: wangrunpu <2095588299@qq.com> Date: Tue, 13 Jan 2026 14:22:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E7=94=A8=E6=88=B7mobi?= =?UTF-8?q?le=E5=AD=97=E6=AE=B5=EF=BC=8C=E4=BD=BF=E7=94=A8username?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=E6=89=8B=E6=9C=BA=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/IotDeviceMessageController.java | 2 +- .../admin/auth/vo/AuthLoginRespVO.java | 3 + .../vo/DustCompanyinfoPageReqVO.java | 2 +- .../vo/DustCompanyinfoRespVO.java | 4 +- .../vo/DustCompanyinfoSaveReqVO.java | 4 +- .../tenant/vo/tenant/TenantSaveReqVO.java | 7 +- .../controller/admin/user/UserController.java | 4 +- .../vo/profile/UserProfileUpdateReqVO.java | 2 +- .../admin/user/vo/user/UserImportExcelVO.java | 5 +- .../admin/user/vo/user/UserSaveReqVO.java | 12 +- .../system/convert/tenant/TenantConvert.java | 4 +- .../dustcompanyinfo/DustCompanyinfoDO.java | 2 +- .../dal/dataobject/user/AdminUserDO.java | 4 - .../dal/mysql/user/AdminUserMapper.java | 5 - .../core/AdminUserParseFunction.java | 4 +- .../service/auth/AdminAuthServiceImpl.java | 8 +- .../service/sms/SmsSendServiceImpl.java | 2 +- .../service/tenant/TenantServiceImpl.java | 11 ++ .../system/service/user/AdminUserService.java | 8 -- .../service/user/AdminUserServiceImpl.java | 110 +++++++++--------- .../src/main/resources/application.yaml | 1 + 21 files changed, 97 insertions(+), 107 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceMessageController.java b/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceMessageController.java index 8e9d148c9..79b5d5ab6 100644 --- a/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceMessageController.java +++ b/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/IotDeviceMessageController.java @@ -83,7 +83,7 @@ public class IotDeviceMessageController { @PostMapping("/send") @Operation(summary = "发送消息", description = "可用于设备模拟") - @PreAuthorize("@ss.hasPermission('iot:device:message-end')") + @PreAuthorize("@ss.hasPermission('iot:device:message-send')") public CommonResult sendDeviceMessage(@Valid @RequestBody IotDeviceMessageSendReqVO sendReqVO) { deviceMessageService.sendDeviceMessage(BeanUtils.toBean(sendReqVO, IotDeviceMessage.class)); return success(true); diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginRespVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginRespVO.java index 1720d073b..bc8257160 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginRespVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginRespVO.java @@ -27,4 +27,7 @@ public class AuthLoginRespVO { @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime expiresTime; + @Schema(description = "租户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") + private Long tenantId; + } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoPageReqVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoPageReqVO.java index 4ce1f0409..140beaeff 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoPageReqVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoPageReqVO.java @@ -19,7 +19,7 @@ public class DustCompanyinfoPageReqVO extends PageParam { @Schema(description = "营业状态", example = "1") private String businessStatus; - @Schema(description = "生成经营方式") + @Schema(description = "生产经营方式") private String productionMode; @Schema(description = "行政隶属关系") diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoRespVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoRespVO.java index 76ff66bfb..29419bb84 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoRespVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoRespVO.java @@ -29,8 +29,8 @@ public class DustCompanyinfoRespVO { @DictFormat("business_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 private String businessStatus; - @Schema(description = "生成经营方式", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty(value = "生成经营方式", converter = DictConvert.class) + @Schema(description = "生产经营方式", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value = "生产经营方式", converter = DictConvert.class) @DictFormat("production_mode") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 private String productionMode; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoSaveReqVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoSaveReqVO.java index 5b35efc51..e582479e0 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dustcompanyinfo/vo/DustCompanyinfoSaveReqVO.java @@ -21,8 +21,8 @@ public class DustCompanyinfoSaveReqVO { @NotEmpty(message = "营业状态不能为空") private String businessStatus; - @Schema(description = "生成经营方式", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "生成经营方式不能为空") + @Schema(description = "生产经营方式", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "生产经营方式不能为空") private String productionMode; @Schema(description = "行政隶属关系", requiredMode = Schema.RequiredMode.REQUIRED) diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java index 1d96e5e50..4458e66e0 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tenant/vo/tenant/TenantSaveReqVO.java @@ -29,6 +29,7 @@ public class TenantSaveReqVO { private String contactName; @Schema(description = "联系手机", example = "15601691300") + @NotNull(message = "联系手机不能为空") private String contactMobile; @Schema(description = "租户状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @@ -53,19 +54,17 @@ public class TenantSaveReqVO { // ========== 仅【创建】时,需要传递的字段 ========== @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 个字符") 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 // 修改时,不需要传递 - || (ObjectUtil.isAllNotEmpty(username, password)); // 新增时,必须都传递 username、password + || (ObjectUtil.isAllNotEmpty(contactMobile, password)); // 新增时,必须都传递 username、password } } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index 9a90117cf..7c1a28457 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -156,9 +156,9 @@ public class UserController { public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo List list = Arrays.asList( - UserImportExcelVO.builder().username("yunai").deptId(1L).email("yunai@iocoder.cn").mobile("15601691300") + UserImportExcelVO.builder().username("15601691301").deptId(1L).email("yunai@iocoder.cn") .nickname("芋道").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex()).build(), - UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") + UserImportExcelVO.builder().username("15601701300").deptId(2L).email("yuanma@iocoder.cn") .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build() ); // 输出 diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java index 150fbb933..ca54f29a0 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java @@ -24,7 +24,7 @@ public class UserProfileUpdateReqVO { @Schema(description = "手机号码", example = "15601691300") @Length(min = 11, max = 11, message = "手机号长度必须 11 位") - private String mobile; + private String username; @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") private Integer sex; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java index 3d824f27f..b574316d8 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java @@ -18,7 +18,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class UserImportExcelVO { - @ExcelProperty("登录名称") + @ExcelProperty("手机号码") private String username; @ExcelProperty("用户名称") @@ -30,9 +30,6 @@ public class UserImportExcelVO { @ExcelProperty("用户邮箱") private String email; - @ExcelProperty("手机号码") - private String mobile; - @ExcelProperty(value = "用户性别", converter = DictConvert.class) @DictFormat(DictTypeConstants.USER_SEX) private Integer sex; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java index 482d14053..23613dadb 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java @@ -21,11 +21,10 @@ public class UserSaveReqVO { @Schema(description = "用户编号", example = "1024") private Long id; - @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao") + @Schema(description = "手机号码", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") @NotBlank(message = "用户账号不能为空") - @Pattern(regexp = "^[a-zA-Z0-9]+$", message = "用户账号由 数字、字母 组成") - @Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符") - @DiffLogField(name = "用户账号") + @Mobile + @DiffLogField(name = "手机号码") private String username; @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") @@ -51,11 +50,6 @@ public class UserSaveReqVO { @DiffLogField(name = "用户邮箱") private String email; - @Schema(description = "手机号码", example = "15601691300") - @Mobile - @DiffLogField(name = "手机号码") - private String mobile; - @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") @DiffLogField(name = "用户性别", function = SexParseFunction.NAME) private Integer sex; diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java index 669954d7e..87124c97b 100755 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/convert/tenant/TenantConvert.java @@ -17,9 +17,9 @@ public interface TenantConvert { default UserSaveReqVO convert02(TenantSaveReqVO bean) { UserSaveReqVO reqVO = new UserSaveReqVO(); - reqVO.setUsername(bean.getUsername()); + reqVO.setUsername(bean.getContactMobile()); reqVO.setPassword(bean.getPassword()); - reqVO.setNickname(bean.getContactName()).setMobile(bean.getContactMobile()); + reqVO.setNickname(bean.getContactName()); return reqVO; } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dustcompanyinfo/DustCompanyinfoDO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dustcompanyinfo/DustCompanyinfoDO.java index 2de67343f..9b7699c0d 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dustcompanyinfo/DustCompanyinfoDO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dustcompanyinfo/DustCompanyinfoDO.java @@ -38,7 +38,7 @@ public class DustCompanyinfoDO extends BaseDO { */ private String businessStatus; /** - * 生成经营方式 + * 生产经营方式 * * 枚举 {@link TODO production_mode 对应的类} */ diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java index 2f07a3015..7cd77c921 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java @@ -64,10 +64,6 @@ public class AdminUserDO extends TenantBaseDO { * 用户邮箱 */ private String email; - /** - * 手机号码 - */ - private String mobile; /** * 用户性别 * diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java index c0c9be8e4..f7eedd681 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java @@ -21,14 +21,9 @@ public interface AdminUserMapper extends BaseMapperX { return selectOne(AdminUserDO::getEmail, email); } - default AdminUserDO selectByMobile(String mobile) { - return selectOne(AdminUserDO::getMobile, mobile); - } - default PageResult selectPage(UserPageReqVO reqVO, Collection deptIds, Collection userIds) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername()) - .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile()) .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus()) .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime()) .inIfPresent(AdminUserDO::getDeptId, deptIds) diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/framework/operatelog/core/AdminUserParseFunction.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/framework/operatelog/core/AdminUserParseFunction.java index f07125128..e48ae23f2 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/framework/operatelog/core/AdminUserParseFunction.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/framework/operatelog/core/AdminUserParseFunction.java @@ -42,10 +42,10 @@ public class AdminUserParseFunction implements IParseFunction { } // 返回格式 芋道源码(13888888888) String nickname = user.getNickname(); - if (StrUtil.isEmpty(user.getMobile())) { + if (StrUtil.isEmpty(user.getUsername())) { return nickname; } - return StrUtil.format("{}({})", nickname, user.getMobile()); + return StrUtil.format("{}({})", nickname, user.getUsername()); } } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index ee3d29fd0..4d841865d 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; @@ -112,6 +113,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { socialUserService.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState())); } + if (ObjectUtil.isNull(TenantContextHolder.getTenantId())) TenantContextHolder.setTenantId(user.getTenantId()); // 创建 Token 令牌,记录登录日志 return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME); } @@ -127,7 +129,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { } // 登录场景,验证是否存在 - if (userService.getUserByMobile(reqVO.getMobile()) == null) { + if (userService.getUserByUsername(reqVO.getMobile()) == null) { throw exception(AUTH_MOBILE_NOT_EXISTS); } // 发送验证码 @@ -140,7 +142,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene(), getClientIP())).checkError(); // 获得用户信息 - AdminUserDO user = userService.getUserByMobile(reqVO.getMobile()); + AdminUserDO user = userService.getUserByUsername(reqVO.getMobile()); if (user == null) { throw exception(USER_NOT_EXISTS); } @@ -289,7 +291,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Override @Transactional(rollbackFor = Exception.class) public void resetPassword(AuthResetPasswordReqVO reqVO) { - AdminUserDO userByMobile = userService.getUserByMobile(reqVO.getMobile()); + AdminUserDO userByMobile = userService.getUserByUsername(reqVO.getMobile()); if (userByMobile == null) { throw exception(USER_MOBILE_NOT_EXISTS); } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java index bd5068f7b..e209cdc1f 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java @@ -60,7 +60,7 @@ public class SmsSendServiceImpl implements SmsSendService { if (StrUtil.isEmpty(mobile)) { AdminUserDO user = adminUserService.getUser(userId); if (user != null) { - mobile = user.getMobile(); + mobile = user.getUsername(); } } // 执行发送 diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java index a3139a943..d44314010 100755 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java @@ -20,6 +20,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantPackageDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.tenant.TenantMapper; import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; import cn.iocoder.yudao.module.system.enums.permission.RoleTypeEnum; @@ -102,6 +103,8 @@ public class TenantServiceImpl implements TenantService { validTenantNameDuplicate(createReqVO.getName(), null); // 校验租户域名是否重复 validTenantWebsiteDuplicate(createReqVO.getWebsites(), null); + // 校验租户管理员账号是否重复 + validAdminDuplicate(createReqVO); // 校验套餐被禁用 TenantPackageDO tenantPackage = tenantPackageService.validTenantPackage(createReqVO.getPackageId()); @@ -189,6 +192,14 @@ public class TenantServiceImpl implements TenantService { }); } + private void validAdminDuplicate(TenantSaveReqVO createReqVO) { + TenantUtils.executeIgnore(() -> { + AdminUserDO userByUsername = userService.getUserByUsername(createReqVO.getUsername()); + if (ObjectUtil.isNotNull(userByUsername)) + throw exception(USER_MOBILE_EXISTS, userByUsername.getUsername()); + }); + } + @Override @DSTransactional public void updateTenantRoleMenu(Long tenantId, Set menuIds) { diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index 947c72376..af655f83f 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -110,14 +110,6 @@ public interface AdminUserService { */ AdminUserDO getUserByUsername(String username); - /** - * 通过手机号获取用户 - * - * @param mobile 手机号 - * @return 用户对象信息 - */ - AdminUserDO getUserByMobile(String mobile); - /** * 获得用户分页列表 * diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index ac1d88be9..452292baa 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -12,6 +12,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; +import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthRegisterReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; @@ -101,7 +102,7 @@ public class AdminUserServiceImpl implements AdminUserService { }); // 1.2 校验正确性 validateUserForCreateOrUpdate(null, createReqVO.getUsername(), - createReqVO.getMobile(), createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds()); + createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds()); // 2.1 插入用户 AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class); user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 @@ -132,7 +133,7 @@ public class AdminUserServiceImpl implements AdminUserService { } }); // 1.3 校验正确性 - validateUserForCreateOrUpdate(null, registerReqVO.getUsername(), null, null, null, null); + validateUserForCreateOrUpdate(null, registerReqVO.getUsername(), null, null, null); // 2. 插入用户 AdminUserDO user = BeanUtils.toBean(registerReqVO, AdminUserDO.class); @@ -150,7 +151,7 @@ public class AdminUserServiceImpl implements AdminUserService { updateReqVO.setPassword(null); // 特殊:此处不更新密码 // 1. 校验正确性 AdminUserDO oldUser = validateUserForCreateOrUpdate(updateReqVO.getId(), updateReqVO.getUsername(), - updateReqVO.getMobile(), updateReqVO.getEmail(), updateReqVO.getDeptId(), updateReqVO.getPostIds()); + updateReqVO.getEmail(), updateReqVO.getDeptId(), updateReqVO.getPostIds()); // 2.1 更新用户 AdminUserDO updateObj = BeanUtils.toBean(updateReqVO, AdminUserDO.class); @@ -190,7 +191,7 @@ public class AdminUserServiceImpl implements AdminUserService { // 校验正确性 validateUserExists(id); validateEmailUnique(id, reqVO.getEmail()); - validateMobileUnique(id, reqVO.getMobile()); + validateUsernameUnique(id, reqVO.getUsername()); // 执行更新 userMapper.updateById(BeanUtils.toBean(reqVO, AdminUserDO.class).setId(id)); } @@ -276,11 +277,6 @@ public class AdminUserServiceImpl implements AdminUserService { return userMapper.selectByUsername(username); } - @Override - public AdminUserDO getUserByMobile(String mobile) { - return userMapper.selectByMobile(mobile); - } - @Override public PageResult getUserPage(UserPageReqVO reqVO) { // 如果有角色编号,查询角色对应的用户编号 @@ -366,7 +362,7 @@ public class AdminUserServiceImpl implements AdminUserService { return deptIds; } - private AdminUserDO validateUserForCreateOrUpdate(Long id, String username, String mobile, String email, + private AdminUserDO validateUserForCreateOrUpdate(Long id, String username, String email, Long deptId, Set postIds) { // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 return DataPermissionUtils.executeIgnore(() -> { @@ -374,8 +370,6 @@ public class AdminUserServiceImpl implements AdminUserService { AdminUserDO user = validateUserExists(id); // 校验用户名唯一 validateUsernameUnique(id, username); - // 校验手机号唯一 - validateMobileUnique(id, mobile); // 校验邮箱唯一 validateEmailUnique(id, email); // 校验部门处于开启状态 @@ -400,56 +394,62 @@ public class AdminUserServiceImpl implements AdminUserService { @VisibleForTesting void validateUsernameUnique(Long id, String username) { - if (StrUtil.isBlank(username)) { - return; - } - AdminUserDO user = userMapper.selectByUsername(username); - if (user == null) { - return; - } - // 如果 id 为空,说明不用比较是否为相同 id 的用户 - if (id == null) { - throw exception(USER_USERNAME_EXISTS); - } - if (!user.getId().equals(id)) { - throw exception(USER_USERNAME_EXISTS); - } + TenantUtils.executeIgnore(() -> { + if (StrUtil.isBlank(username)) { + return; + } + AdminUserDO user = userMapper.selectByUsername(username); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_USERNAME_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_USERNAME_EXISTS); + } + }); } @VisibleForTesting void validateEmailUnique(Long id, String email) { - if (StrUtil.isBlank(email)) { - return; - } - AdminUserDO user = userMapper.selectByEmail(email); - if (user == null) { - return; - } - // 如果 id 为空,说明不用比较是否为相同 id 的用户 - if (id == null) { - throw exception(USER_EMAIL_EXISTS); - } - if (!user.getId().equals(id)) { - throw exception(USER_EMAIL_EXISTS); - } + TenantUtils.executeIgnore(() -> { + if (StrUtil.isBlank(email)) { + return; + } + AdminUserDO user = userMapper.selectByEmail(email); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_EMAIL_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_EMAIL_EXISTS); + } + }); } @VisibleForTesting void validateMobileUnique(Long id, String mobile) { - if (StrUtil.isBlank(mobile)) { - return; - } - AdminUserDO user = userMapper.selectByMobile(mobile); - if (user == null) { - return; - } - // 如果 id 为空,说明不用比较是否为相同 id 的用户 - if (id == null) { - throw exception(USER_MOBILE_EXISTS); - } - if (!user.getId().equals(id)) { - throw exception(USER_MOBILE_EXISTS); - } + TenantUtils.executeIgnore(() ->{ + if (StrUtil.isBlank(mobile)) { + return; + } + AdminUserDO user = userMapper.selectByUsername(mobile); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_MOBILE_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_MOBILE_EXISTS); + } + }); } /** @@ -494,7 +494,7 @@ public class AdminUserServiceImpl implements AdminUserService { } // 2.1.2 校验,判断是否有不符合的原因 try { - validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), + validateUserForCreateOrUpdate(null, importUser.getUsername(), importUser.getEmail(), importUser.getDeptId(), null); } catch (ServiceException ex) { respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage()); diff --git a/yudao-module-system/yudao-module-system-server/src/main/resources/application.yaml b/yudao-module-system/yudao-module-system-server/src/main/resources/application.yaml index 09f4f0e22..7c9a8f6b6 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/resources/application.yaml +++ b/yudao-module-system/yudao-module-system-server/src/main/resources/application.yaml @@ -174,6 +174,7 @@ yudao: tenant: # 多租户相关配置项 enable: true ignore-urls: + - /admin-api/system/auth/login ignore-visit-urls: - /admin-api/system/user/profile/** - /admin-api/system/auth/**