diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index d5e68460..7d16577b 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -8,6 +8,8 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.security.config.SecurityProperties; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO; import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; @@ -71,6 +73,13 @@ public class AuthController { return success(authService.login(reqVO)); } + @PostMapping("/login-for-tenant-list") + @PermitAll + @Operation(summary = "使用账号密码登录-前置操作-返回租户列表") + public CommonResult> loginForTenantList(@RequestBody @Valid LoginForTenantReqVO reqVO) { + return success(authService.loginForTenantList(reqVO)); + } + @PostMapping("/logout") @PermitAll @Operation(summary = "登出系统") diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/diy/LoginForTenantReqVO.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/diy/LoginForTenantReqVO.java new file mode 100644 index 00000000..1e062152 --- /dev/null +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/diy/LoginForTenantReqVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: TODO + * @author: binda + * @date: 2025/10/30 15:03 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LoginForTenantReqVO { + + private String username; + private String password; + +} diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/diy/TenantRespVO.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/diy/TenantRespVO.java new file mode 100644 index 00000000..14e23f0c --- /dev/null +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/diy/TenantRespVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: 租户列表 + * @author: binda + * @date: 2025/10/30 14:53 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TenantRespVO { + + @Schema(description = "租户ID") + private Long tenantId; + @Schema(description = "租户名称") + private String tenantName; + + @Schema(description = "套餐ID") + private Long packageId; + @Schema(description = "套餐名称") + private String packageName; + +} diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java index 07c54844..7d1dcbb3 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.system.service.auth; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import jakarta.validation.Valid; @@ -104,4 +106,12 @@ public interface AdminAuthService { * @return */ List getTenantTokenList(String phoneNumber,String accessToken); + + /** + * 登录前置操作 + * 1. 获取用户所拥有的租户列表 + * @param reqVO + * @return + */ + List loginForTenantList(LoginForTenantReqVO reqVO); } diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index cf3205d0..3d837858 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -18,6 +18,8 @@ import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; @@ -531,6 +533,11 @@ public class AdminAuthServiceImpl implements AdminAuthService { return res; } + @Override + public List loginForTenantList(LoginForTenantReqVO reqVO) { + return userService.loginForTenantList(reqVO); + } + /** * 解密微信小程序数据 * 根据微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java index 7ec3f941..92e64603 100755 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantService.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.system.service.tenant; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; @@ -142,4 +144,5 @@ public interface TenantService { */ void validTenant(Long id); + List loginForTenantList(LoginForTenantReqVO reqVO); } diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java index 30c63400..e8380a6e 100755 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java @@ -13,6 +13,8 @@ import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; import cn.iocoder.yudao.framework.tenant.config.TenantProperties; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.tenant.TenantSaveReqVO; @@ -39,8 +41,10 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -95,6 +99,21 @@ public class TenantServiceImpl implements TenantService { } } + @Override + public List loginForTenantList(LoginForTenantReqVO reqVO) { + List pList = tenantPackageService.getTenantPackageListByStatus(0); + Map pMap = pList.stream().collect(Collectors.toMap(TenantPackageDO::getId, TenantPackageDO::getName, (v1, v2) -> v1)); + + List tList = tenantMapper.selectList(TenantDO::getContactMobile,reqVO.getUsername()); + return tList.stream().map(t -> + new TenantRespVO( + t.getId(), + t.getName(), + t.getPackageId(), + pMap.getOrDefault(t.getPackageId(), ""))).toList(); + + } + @Override @DSTransactional // 多数据源,使用 @DSTransactional 保证本地事务,以及数据源的切换 @DataPermission(enable = false) // 参见 https://gitee.com/zhijiantianya/ruoyi-vue-pro/pulls/1154 说明 diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index 72085a5a..7ab4b9b0 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthRegisterReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO; @@ -223,4 +225,12 @@ public interface AdminUserService { * @return 是否修复成功 */ Boolean fixUserTenantId(Long userId); + + /** + * 登录前置操作 + * 1. 获取用户拥有的租户列表 + * @param reqVO + * @return + */ + List loginForTenantList(LoginForTenantReqVO reqVO); } diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 3f554d6e..69effd17 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -15,6 +15,8 @@ import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; 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.auth.vo.diy.LoginForTenantReqVO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO; @@ -23,6 +25,7 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqV import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO; +import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.PersonnelDO; import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper; @@ -624,4 +627,9 @@ public class AdminUserServiceImpl implements AdminUserService { return true; } + @Override + public List loginForTenantList(LoginForTenantReqVO reqVO) { + return tenantService.loginForTenantList(reqVO); + } + } diff --git a/yudao-server/src/main/resources/application-gtr7.yaml b/yudao-server/src/main/resources/application-gtr7.yaml index 31c1da6f..76f72134 100644 --- a/yudao-server/src/main/resources/application-gtr7.yaml +++ b/yudao-server/src/main/resources/application-gtr7.yaml @@ -179,7 +179,8 @@ yudao: transfer-notify-url: https://yunai.natapp1.cc/admin-api/pay/notify/transfer # 支付渠道的【转账】回调地址 demo: false # 开启演示模式 tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc - + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试 justauth: enabled: true type: