refactor(tenant): 优化租户管理表字段设计

This commit is contained in:
2025-07-27 14:11:58 +08:00
parent f350ee1567
commit 819be0688d
9 changed files with 76 additions and 56 deletions

View File

@@ -46,12 +46,12 @@ public class TenantDTO implements Serializable {
/** /**
* 管理员用户名 * 管理员用户名
*/ */
private String username; private String adminUsername;
/** /**
* 管理员密码 * 管理员密码
*/ */
private String password; private String adminPassword;
/** /**
* 套餐 ID * 套餐 ID

View File

@@ -49,7 +49,7 @@ public class TenantDO extends BaseDO {
private String code; private String code;
/** /**
* 绑定域名 * 域名
*/ */
private String domain; private String domain;
@@ -69,10 +69,15 @@ public class TenantDO extends BaseDO {
private DisEnableStatusEnum status; private DisEnableStatusEnum status;
/** /**
* 租户管理员 * 管理员用户
*/ */
private Long adminUser; private Long adminUser;
/**
* 管理员用户名
*/
private String adminUsername;
/** /**
* 套餐 ID * 套餐 ID
*/ */

View File

@@ -54,11 +54,11 @@ public class TenantReq implements Serializable {
private String name; private String name;
/** /**
* 绑定域名 * 域名
*/ */
@Schema(description = "绑定域名", example = "https://T0sL6RWv0vFh.continew.top/") @Schema(description = "域名", example = "https://T0sL6RWv0vFh.continew.top/")
@Length(max = 255, message = "绑定域名长度不能超过 {max} 个字符") @Length(max = 255, message = "域名长度不能超过 {max} 个字符")
@Pattern(regexp = RegexConstants.HTTP_HOST, message = "绑定域名格式不正确") @Pattern(regexp = RegexConstants.HTTP_HOST, message = "域名格式不正确")
private String domain; private String domain;
/** /**
@@ -89,19 +89,19 @@ public class TenantReq implements Serializable {
private Long packageId; private Long packageId;
/** /**
* 用户名 * 管理员用户名
*/ */
@Schema(description = "用户名", example = "zhangsan") @Schema(description = "管理员用户名", example = "zhangsan")
@NotBlank(message = "用户名不能为空", groups = CrudValidationGroup.Create.class) @NotBlank(message = "管理员用户名不能为空", groups = CrudValidationGroup.Create.class)
@Pattern(regexp = RegexConstants.USERNAME, message = "用户名长度为 4-64 个字符,支持大小写字母、数字、下划线,以字母开头") @Pattern(regexp = RegexConstants.USERNAME, message = "管理员用户名长度为 4-64 个字符,支持大小写字母、数字、下划线,以字母开头")
private String username; private String adminUsername;
/** /**
* 密码(加密) * 管理员密码(加密)
*/ */
@Schema(description = "密码(加密)", example = "E7c72TH+LDxKTwavjM99W1MdI9Lljh79aPKiv3XB9MXcplhm7qJ1BJCj28yaflbdVbfc366klMtjLIWQGqb0qw==") @Schema(description = "管理员密码(加密)", example = "E7c72TH+LDxKTwavjM99W1MdI9Lljh79aPKiv3XB9MXcplhm7qJ1BJCj28yaflbdVbfc366klMtjLIWQGqb0qw==")
@NotBlank(message = "密码不能为空", groups = CrudValidationGroup.Create.class) @NotBlank(message = "管理员密码不能为空", groups = CrudValidationGroup.Create.class)
private String password; private String adminPassword;
/** /**
* 编码 * 编码

View File

@@ -61,10 +61,10 @@ public class TenantResp extends BaseDetailResp {
private String code; private String code;
/** /**
* 绑定域名 * 域名
*/ */
@Schema(description = "绑定域名", example = "https://T0sL6RWv0vFh.continew.top/") @Schema(description = "域名", example = "T0sL6RWv0vFh.continew.top")
@ExcelProperty(value = "绑定域名", order = 4) @ExcelProperty(value = "域名", order = 4)
private String domain; private String domain;
/** /**
@@ -88,11 +88,23 @@ public class TenantResp extends BaseDetailResp {
@ExcelProperty(value = "状态", converter = ExcelBaseEnumConverter.class, order = 8) @ExcelProperty(value = "状态", converter = ExcelBaseEnumConverter.class, order = 8)
private DisEnableStatusEnum status; private DisEnableStatusEnum status;
/**
* 管理员用户
*/
@Schema(description = "管理员用户", example = "2")
private Long adminUser;
/**
* 管理员用户名
*/
@Schema(description = "管理员用户名", example = "admin")
@ExcelProperty(value = "管理员用户名", order = 9)
private String adminUsername;
/** /**
* 套餐 ID * 套餐 ID
*/ */
@Schema(description = "套餐 ID", example = "1") @Schema(description = "套餐 ID", example = "1")
@ExcelProperty(value = "套餐 ID", order = 9)
@AssembleMethod(props = @Mapping(src = "name", ref = "packageName"), targetType = PackageService.class, method = @ContainerMethod(bindMethod = "get", resultType = PackageResp.class)) @AssembleMethod(props = @Mapping(src = "name", ref = "packageName"), targetType = PackageService.class, method = @ContainerMethod(bindMethod = "get", resultType = PackageResp.class))
private Long packageId; private Long packageId;

View File

@@ -36,9 +36,9 @@ import java.util.List;
public interface TenantService extends BaseService<TenantResp, TenantDetailResp, TenantQuery, TenantReq>, IService<TenantDO> { public interface TenantService extends BaseService<TenantResp, TenantDetailResp, TenantQuery, TenantReq>, IService<TenantDO> {
/** /**
* 根据绑定域名查询 * 根据域名查询
* *
* @param domain 绑定域名 * @param domain 域名
* @return ID * @return ID
*/ */
Long getIdByDomain(String domain); Long getIdByDomain(String domain);

View File

@@ -197,16 +197,16 @@ public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, TenantDO, T
} }
/** /**
* 检查绑定域名是否重复 * 检查域名是否重复
* *
* @param domain 绑定域名 * @param domain 域名
* @param id ID * @param id ID
*/ */
private void checkDomainRepeat(String domain, Long id) { private void checkDomainRepeat(String domain, Long id) {
CheckUtils.throwIf(baseMapper.lambdaQuery() CheckUtils.throwIf(baseMapper.lambdaQuery()
.eq(TenantDO::getDomain, domain) .eq(TenantDO::getDomain, domain)
.ne(id != null, TenantDO::getId, id) .ne(id != null, TenantDO::getId, id)
.exists(), "绑定域名为 [{}] 的租户已存在", domain); .exists(), "域名为 [{}] 的租户已存在", domain);
} }
/** /**

View File

@@ -4,19 +4,20 @@
-- comment 初始化租户插件数据表 -- comment 初始化租户插件数据表
-- 初始化表结构 -- 初始化表结构
CREATE TABLE IF NOT EXISTS `tenant` ( CREATE TABLE IF NOT EXISTS `tenant` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(30) NOT NULL COMMENT '名称', `name` varchar(30) NOT NULL COMMENT '名称',
`code` varchar(30) NOT NULL COMMENT '编码', `code` varchar(30) NOT NULL COMMENT '编码',
`domain` varchar(255) DEFAULT NULL COMMENT '绑定域名', `domain` varchar(255) DEFAULT NULL COMMENT '域名',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间', `expire_time` datetime DEFAULT NULL COMMENT '过期时间',
`description` varchar(200) DEFAULT NULL COMMENT '描述', `description` varchar(200) DEFAULT NULL COMMENT '描述',
`status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态1启用2禁用', `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态1启用2禁用',
`admin_user` bigint(20) DEFAULT NULL COMMENT '租户管理员', `admin_user` bigint(20) DEFAULT NULL COMMENT '管理员用户',
`package_id` bigint(20) NOT NULL COMMENT '套餐ID', `admin_username` varchar(64) DEFAULT NULL COMMENT '管理员用户名',
`create_user` bigint(20) NOT NULL COMMENT '创建人', `package_id` bigint(20) NOT NULL COMMENT '套餐ID',
`create_time` datetime NOT NULL COMMENT '创建时间', `create_user` bigint(20) NOT NULL COMMENT '创建',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人', `create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间', `update_user` bigint(20) DEFAULT NULL COMMENT '修改',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE INDEX `uk_code`(`code`), UNIQUE INDEX `uk_code`(`code`),
INDEX `idx_admin_user`(`admin_user`), INDEX `idx_admin_user`(`admin_user`),

View File

@@ -4,19 +4,20 @@
-- comment 初始化租户插件数据表 -- comment 初始化租户插件数据表
-- 初始化表结构 -- 初始化表结构
CREATE TABLE IF NOT EXISTS "tenant" ( CREATE TABLE IF NOT EXISTS "tenant" (
"id" int8 NOT NULL, "id" int8 NOT NULL,
"name" varchar(30) NOT NULL, "name" varchar(30) NOT NULL,
"code" varchar(30) NOT NULL, "code" varchar(30) NOT NULL,
"domain" varchar(255) DEFAULT NULL, "domain" varchar(255) DEFAULT NULL,
"expire_time" timestamp DEFAULT NULL, "expire_time" timestamp DEFAULT NULL,
"description" varchar(200) DEFAULT NULL, "description" varchar(200) DEFAULT NULL,
"status" int2 NOT NULL DEFAULT 1, "status" int2 NOT NULL DEFAULT 1,
"admin_user" int8 DEFAULT NULL, "admin_user" int8 DEFAULT NULL,
"package_id" int8 NOT NULL, "admin_username" varchar(64) DEFAULT NULL,
"create_user" int8 NOT NULL, "package_id" int8 NOT NULL,
"create_time" timestamp NOT NULL, "create_user" int8 NOT NULL,
"update_user" int8 DEFAULT NULL, "create_time" timestamp NOT NULL,
"update_time" timestamp DEFAULT NULL, "update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
PRIMARY KEY ("id") PRIMARY KEY ("id")
); );
CREATE UNIQUE INDEX "uk_tenant_code" ON "tenant" ("code"); CREATE UNIQUE INDEX "uk_tenant_code" ON "tenant" ("code");
@@ -27,12 +28,13 @@ CREATE INDEX "idx_tenant_update_user" ON "tenant" ("update_user");
COMMENT ON COLUMN "tenant"."id" IS 'ID'; COMMENT ON COLUMN "tenant"."id" IS 'ID';
COMMENT ON COLUMN "tenant"."name" IS '名称'; COMMENT ON COLUMN "tenant"."name" IS '名称';
COMMENT ON COLUMN "tenant"."code" IS '编码'; COMMENT ON COLUMN "tenant"."code" IS '编码';
COMMENT ON COLUMN "tenant"."domain" IS '绑定域名'; COMMENT ON COLUMN "tenant"."domain" IS '域名';
COMMENT ON COLUMN "tenant"."expire_time" IS '过期时间'; COMMENT ON COLUMN "tenant"."expire_time" IS '过期时间';
COMMENT ON COLUMN "tenant"."description" IS '描述'; COMMENT ON COLUMN "tenant"."description" IS '描述';
COMMENT ON COLUMN "tenant"."status" IS '状态1启用2禁用'; COMMENT ON COLUMN "tenant"."status" IS '状态1启用2禁用';
COMMENT ON COLUMN "tenant"."package_id" IS '套餐ID'; COMMENT ON COLUMN "tenant"."package_id" IS '套餐ID';
COMMENT ON COLUMN "tenant"."admin_user" IS '租户管理员'; COMMENT ON COLUMN "tenant"."admin_user" IS '管理员用户';
COMMENT ON COLUMN "tenant"."admin_username" IS '管理员用户名';
COMMENT ON COLUMN "tenant"."create_user" IS '创建人'; COMMENT ON COLUMN "tenant"."create_user" IS '创建人';
COMMENT ON COLUMN "tenant"."create_time" IS '创建时间'; COMMENT ON COLUMN "tenant"."create_time" IS '创建时间';
COMMENT ON COLUMN "tenant"."update_user" IS '修改人'; COMMENT ON COLUMN "tenant"."update_user" IS '修改人';

View File

@@ -183,10 +183,10 @@ public class TenantDataApiForSystemImpl implements TenantDataApi {
*/ */
private Long initUserData(TenantDTO tenant, Long deptId) { private Long initUserData(TenantDTO tenant, Long deptId) {
// 解密密码 // 解密密码
String password = SecureUtils.decryptPasswordByRsaPrivateKey(tenant.getPassword(), "密码解密失败", true); String password = SecureUtils.decryptPasswordByRsaPrivateKey(tenant.getAdminPassword(), "密码解密失败", true);
// 初始化用户 // 初始化用户
UserDO user = new UserDO(); UserDO user = new UserDO();
user.setUsername(tenant.getUsername()); user.setUsername(tenant.getAdminUsername());
user.setNickname(RoleCodeEnum.TENANT_ADMIN.getDescription()); user.setNickname(RoleCodeEnum.TENANT_ADMIN.getDescription());
user.setPassword(password); user.setPassword(password);
user.setGender(GenderEnum.UNKNOWN); user.setGender(GenderEnum.UNKNOWN);