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

View File

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

View File

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

View File

@@ -61,10 +61,10 @@ public class TenantResp extends BaseDetailResp {
private String code;
/**
* 绑定域名
* 域名
*/
@Schema(description = "绑定域名", example = "https://T0sL6RWv0vFh.continew.top/")
@ExcelProperty(value = "绑定域名", order = 4)
@Schema(description = "域名", example = "T0sL6RWv0vFh.continew.top")
@ExcelProperty(value = "域名", order = 4)
private String domain;
/**
@@ -88,11 +88,23 @@ public class TenantResp extends BaseDetailResp {
@ExcelProperty(value = "状态", converter = ExcelBaseEnumConverter.class, order = 8)
private DisEnableStatusEnum status;
/**
* 管理员用户
*/
@Schema(description = "管理员用户", example = "2")
private Long adminUser;
/**
* 管理员用户名
*/
@Schema(description = "管理员用户名", example = "admin")
@ExcelProperty(value = "管理员用户名", order = 9)
private String adminUsername;
/**
* 套餐 ID
*/
@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))
private Long packageId;

View File

@@ -36,9 +36,9 @@ import java.util.List;
public interface TenantService extends BaseService<TenantResp, TenantDetailResp, TenantQuery, TenantReq>, IService<TenantDO> {
/**
* 根据绑定域名查询
* 根据域名查询
*
* @param domain 绑定域名
* @param domain 域名
* @return ID
*/
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
*/
private void checkDomainRepeat(String domain, Long id) {
CheckUtils.throwIf(baseMapper.lambdaQuery()
.eq(TenantDO::getDomain, domain)
.ne(id != null, TenantDO::getId, id)
.exists(), "绑定域名为 [{}] 的租户已存在", domain);
.exists(), "域名为 [{}] 的租户已存在", domain);
}
/**

View File

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

View File

@@ -4,19 +4,20 @@
-- comment 初始化租户插件数据表
-- 初始化表结构
CREATE TABLE IF NOT EXISTS "tenant" (
"id" int8 NOT NULL,
"name" varchar(30) NOT NULL,
"code" varchar(30) NOT NULL,
"domain" varchar(255) DEFAULT NULL,
"expire_time" timestamp DEFAULT NULL,
"description" varchar(200) DEFAULT NULL,
"status" int2 NOT NULL DEFAULT 1,
"admin_user" int8 DEFAULT NULL,
"package_id" int8 NOT NULL,
"create_user" int8 NOT NULL,
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"id" int8 NOT NULL,
"name" varchar(30) NOT NULL,
"code" varchar(30) NOT NULL,
"domain" varchar(255) DEFAULT NULL,
"expire_time" timestamp DEFAULT NULL,
"description" varchar(200) DEFAULT NULL,
"status" int2 NOT NULL DEFAULT 1,
"admin_user" int8 DEFAULT NULL,
"admin_username" varchar(64) DEFAULT NULL,
"package_id" int8 NOT NULL,
"create_user" int8 NOT NULL,
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
PRIMARY KEY ("id")
);
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"."name" 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"."description" IS '描述';
COMMENT ON COLUMN "tenant"."status" IS '状态1启用2禁用';
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_time" 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) {
// 解密密码
String password = SecureUtils.decryptPasswordByRsaPrivateKey(tenant.getPassword(), "密码解密失败", true);
String password = SecureUtils.decryptPasswordByRsaPrivateKey(tenant.getAdminPassword(), "密码解密失败", true);
// 初始化用户
UserDO user = new UserDO();
user.setUsername(tenant.getUsername());
user.setUsername(tenant.getAdminUsername());
user.setNickname(RoleCodeEnum.TENANT_ADMIN.getDescription());
user.setPassword(password);
user.setGender(GenderEnum.UNKNOWN);