From 761fa70e5957722a41340be8b9f817dabed9a188 Mon Sep 17 00:00:00 2001 From: carlyin Date: Tue, 14 Jan 2025 17:01:35 +0800 Subject: [PATCH] =?UTF-8?q?pref:=E5=88=86=E8=A1=A8=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E8=A7=84=E5=88=99=E4=BC=98=E5=8C=96=20#11406?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/pojo/TableShardingConfig.kt | 4 +- .../project/dao/TableShardingConfigDao.kt | 12 ++++- .../service/TableShardingConfigService.kt | 7 ++- .../ShardingRoutingRuleAssignServiceImpl.kt | 3 +- .../ShardingRoutingRuleFacadeServiceImpl.kt | 3 +- .../impl/TableShardingConfigServiceImpl.kt | 44 ++++++++++++------- 6 files changed, 49 insertions(+), 24 deletions(-) diff --git a/src/backend/ci/core/project/api-project/src/main/kotlin/com/tencent/devops/project/pojo/TableShardingConfig.kt b/src/backend/ci/core/project/api-project/src/main/kotlin/com/tencent/devops/project/pojo/TableShardingConfig.kt index 81b577a032a..e7a3a87c79c 100644 --- a/src/backend/ci/core/project/api-project/src/main/kotlin/com/tencent/devops/project/pojo/TableShardingConfig.kt +++ b/src/backend/ci/core/project/api-project/src/main/kotlin/com/tencent/devops/project/pojo/TableShardingConfig.kt @@ -40,5 +40,7 @@ data class TableShardingConfig( @field:BkField(minLength = 1, maxLength = 128) val tableName: String, @get:Schema(title = "分表数量") - val shardingNum: Int + val shardingNum: Int, + @get:Schema(title = "表范围") + val tableScope: List ) diff --git a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/dao/TableShardingConfigDao.kt b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/dao/TableShardingConfigDao.kt index 0e6408228e8..bc982f59877 100644 --- a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/dao/TableShardingConfigDao.kt +++ b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/dao/TableShardingConfigDao.kt @@ -28,6 +28,8 @@ package com.tencent.devops.project.dao import com.tencent.devops.common.api.enums.SystemModuleEnum +import com.tencent.devops.common.api.pojo.ShardingRuleTypeEnum +import com.tencent.devops.common.api.util.JsonUtil import com.tencent.devops.common.api.util.UUIDUtil import com.tencent.devops.model.project.tables.TTableShardingConfig import com.tencent.devops.model.project.tables.records.TTableShardingConfigRecord @@ -50,6 +52,7 @@ class TableShardingConfigDao { MODULE_CODE, TABLE_NAME, SHARDING_NUM, + TABLE_SCOPE, CREATOR, MODIFIER ) @@ -59,6 +62,7 @@ class TableShardingConfigDao { tableShardingConfig.moduleCode.name, tableShardingConfig.tableName, tableShardingConfig.shardingNum, + JsonUtil.toJson(tableShardingConfig.tableScope), userId, userId ).onDuplicateKeyUpdate() @@ -106,7 +110,8 @@ class TableShardingConfigDao { dslContext: DSLContext, clusterName: String, moduleCode: SystemModuleEnum, - tableName: String + tableName: String, + tableRuleType: ShardingRuleTypeEnum = ShardingRuleTypeEnum.TABLE ): TTableShardingConfigRecord? { return with(TTableShardingConfig.T_TABLE_SHARDING_CONFIG) { dslContext.selectFrom(this) @@ -114,6 +119,7 @@ class TableShardingConfigDao { CLUSTER_NAME.eq(clusterName) .and(MODULE_CODE.eq(moduleCode.name)) .and(TABLE_NAME.eq(tableName)) + .and(TABLE_SCOPE.contains(tableRuleType.name)) ) .limit(1) .fetchOne() @@ -123,12 +129,14 @@ class TableShardingConfigDao { fun listByModule( dslContext: DSLContext, clusterName: String, - moduleCode: SystemModuleEnum + moduleCode: SystemModuleEnum, + tableRuleType: ShardingRuleTypeEnum = ShardingRuleTypeEnum.TABLE ): Result? { return with(TTableShardingConfig.T_TABLE_SHARDING_CONFIG) { val conditions = mutableListOf() conditions.add(CLUSTER_NAME.eq(clusterName)) conditions.add(MODULE_CODE.eq(moduleCode.name)) + conditions.add(TABLE_SCOPE.contains(tableRuleType.name)) dslContext.selectFrom(this).where(conditions).fetch() } } diff --git a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/TableShardingConfigService.kt b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/TableShardingConfigService.kt index 889d0b19979..73643c7177f 100644 --- a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/TableShardingConfigService.kt +++ b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/TableShardingConfigService.kt @@ -28,6 +28,7 @@ package com.tencent.devops.project.service import com.tencent.devops.common.api.enums.SystemModuleEnum +import com.tencent.devops.common.api.pojo.ShardingRuleTypeEnum import com.tencent.devops.project.pojo.TableShardingConfig import org.jooq.DSLContext @@ -44,12 +45,14 @@ interface TableShardingConfigService { fun getTableShardingConfigByName( clusterName: String, moduleCode: SystemModuleEnum, - tableName: String + tableName: String, + ruleType: ShardingRuleTypeEnum = ShardingRuleTypeEnum.TABLE ): TableShardingConfig? fun listByModule( dslContext: DSLContext, clusterName: String, - moduleCode: SystemModuleEnum + moduleCode: SystemModuleEnum, + ruleType: ShardingRuleTypeEnum = ShardingRuleTypeEnum.TABLE ): List? } diff --git a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/ShardingRoutingRuleAssignServiceImpl.kt b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/ShardingRoutingRuleAssignServiceImpl.kt index 6cb5e69df21..720d1abce15 100644 --- a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/ShardingRoutingRuleAssignServiceImpl.kt +++ b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/ShardingRoutingRuleAssignServiceImpl.kt @@ -98,7 +98,8 @@ class ShardingRoutingRuleAssignServiceImpl @Autowired constructor( val tableShardingConfigs = tableShardingConfigService.listByModule( dslContext = dslContext, clusterName = clusterName, - moduleCode = moduleCode + moduleCode = moduleCode, + ruleType = ShardingRuleTypeEnum.TABLE ) tableShardingConfigs?.forEach { tableShardingConfig -> assignTableShardingRoutingRule( diff --git a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/ShardingRoutingRuleFacadeServiceImpl.kt b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/ShardingRoutingRuleFacadeServiceImpl.kt index 133137c28f4..65fd5de43a5 100644 --- a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/ShardingRoutingRuleFacadeServiceImpl.kt +++ b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/ShardingRoutingRuleFacadeServiceImpl.kt @@ -74,7 +74,8 @@ class ShardingRoutingRuleFacadeServiceImpl @Autowired constructor( val tableShardingConfig = tableShardingConfigService.getTableShardingConfigByName( clusterName = clusterName, moduleCode = moduleCode, - tableName = tableName + tableName = tableName, + ruleType = ruleType ) tableShardingConfig?.let { // 查找该分片规则对应的数据源 diff --git a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/TableShardingConfigServiceImpl.kt b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/TableShardingConfigServiceImpl.kt index f4a8b3760ab..33839796ffc 100644 --- a/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/TableShardingConfigServiceImpl.kt +++ b/src/backend/ci/core/project/biz-project/src/main/kotlin/com/tencent/devops/project/service/impl/TableShardingConfigServiceImpl.kt @@ -27,9 +27,13 @@ package com.tencent.devops.project.service.impl +import com.fasterxml.jackson.core.type.TypeReference import com.tencent.devops.common.api.constant.CommonMessageCode import com.tencent.devops.common.api.enums.SystemModuleEnum import com.tencent.devops.common.api.exception.ErrorCodeException +import com.tencent.devops.common.api.pojo.ShardingRuleTypeEnum +import com.tencent.devops.common.api.util.JsonUtil +import com.tencent.devops.model.project.tables.records.TTableShardingConfigRecord import com.tencent.devops.project.dao.TableShardingConfigDao import com.tencent.devops.project.pojo.TableShardingConfig import com.tencent.devops.project.service.TableShardingConfigService @@ -104,48 +108,53 @@ class TableShardingConfigServiceImpl @Autowired constructor( override fun getTableShardingConfigById(id: String): TableShardingConfig? { val record = tableShardingConfigDao.getById(dslContext, id) - return if (record != null) { - TableShardingConfig( - clusterName = record.clusterName, - moduleCode = SystemModuleEnum.valueOf(record.moduleCode), - tableName = record.tableName, - shardingNum = record.shardingNum - ) - } else { - null - } + return convertTableShardingConfig(record) } override fun getTableShardingConfigByName( clusterName: String, moduleCode: SystemModuleEnum, - tableName: String + tableName: String, + ruleType: ShardingRuleTypeEnum ): TableShardingConfig? { val record = tableShardingConfigDao.getByName( dslContext = dslContext, clusterName = clusterName, moduleCode = moduleCode, - tableName = tableName + tableName = tableName, + tableRuleType = ruleType ) - return if (record != null) { + return convertTableShardingConfig(record) + } + + private fun convertTableShardingConfig(record: TTableShardingConfigRecord?): TableShardingConfig? { + val tableShardingConfig = if (record != null) { TableShardingConfig( clusterName = record.clusterName, moduleCode = SystemModuleEnum.valueOf(record.moduleCode), tableName = record.tableName, - shardingNum = record.shardingNum + shardingNum = record.shardingNum, + tableScope = JsonUtil.to(record.tableScope, object : TypeReference>() {}) ) } else { null } + return tableShardingConfig } override fun listByModule( dslContext: DSLContext, clusterName: String, - moduleCode: SystemModuleEnum + moduleCode: SystemModuleEnum, + ruleType: ShardingRuleTypeEnum ): List? { var tableShardingConfigs: MutableList? = null - val records = tableShardingConfigDao.listByModule(dslContext, clusterName, moduleCode) + val records = tableShardingConfigDao.listByModule( + dslContext = dslContext, + clusterName = clusterName, + moduleCode = moduleCode, + tableRuleType = ruleType + ) records?.forEach { record -> if (tableShardingConfigs == null) { tableShardingConfigs = mutableListOf() @@ -155,7 +164,8 @@ class TableShardingConfigServiceImpl @Autowired constructor( clusterName = record.clusterName, moduleCode = SystemModuleEnum.valueOf(record.moduleCode), tableName = record.tableName, - shardingNum = record.shardingNum + shardingNum = record.shardingNum, + tableScope = JsonUtil.to(record.tableScope, object : TypeReference>() {}) ) ) }