using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core.DB; namespace WIDESEAWCS_Core.Tenants { public static class TenantUtil { //public static SysTenant DefaultTenantConfig(this SysTenant tenant) //{ // tenant.DbType ??= DbType.Sqlite; // //如果没有配置连接 // if (tenant.Connection.IsNullOrEmpty()) // { // //此处默认配置 Sqlite 地址 // //实际业务中 也会有运维、系统管理员等来维护 // switch (tenant.DbType.Value) // { // case DbType.Sqlite: // tenant.Connection = $"DataSource={Path.Combine(Environment.CurrentDirectory, tenant.ConfigId)}.db"; // break; // } // } // return tenant; //} //public static ConnectionConfig GetConnectionConfig(this SysTenant tenant) //{ // if (tenant.DbType is null) // { // throw new ArgumentException("Tenant DbType Must"); // } // return new ConnectionConfig() // { // ConfigId = tenant.ConfigId, // DbType = tenant.DbType.Value, // ConnectionString = tenant.Connection, // IsAutoCloseConnection = true, // MoreSettings = new ConnMoreSettings() // { // IsAutoRemoveDataCache = true // }, // }; //} public static List GetTenantEntityTypes(TenantTypeEnum? tenantType = null) { List types = RepositorySetting.Entitys.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass).ToList(); List returnTypes = types.Where(s => IsTenantEntity(s, tenantType)).ToList(); return returnTypes; } public static bool IsTenantEntity(this Type u, TenantTypeEnum? tenantType = null) { var mta = u.GetCustomAttribute(); if (mta is null) { return false; } if (tenantType != null) { if (mta.TenantType != tenantType) { return false; } } return true; } public static string GetTenantTableName(this Type type, ISqlSugarClient db, string id) { var entityInfo = db.EntityMaintenance.GetEntityInfo(type); return $@"{entityInfo.DbTableName}_{id}"; } //public static string GetTenantTableName(this Type type, ISqlSugarClient db, SysTenant tenant) //{ // return GetTenantTableName(type, db, tenant.Id.ToString()); //} public static void SetTenantTable(this ISqlSugarClient db, string id) { var types = GetTenantEntityTypes(TenantTypeEnum.Tables); foreach (var type in types) { db.MappingTables.Add(type.Name, type.GetTenantTableName(db, id)); } } public static List GetTenantSelectModels() { List selectModels = new List() { new SelectModel { FieldName = MainDb.TenantId }, //new SelectModel //{ // FieldName = MainDb.TenantName //}, new SelectModel { FieldName = MainDb.ConnectionString, }, new SelectModel { FieldName = MainDb.TenantDbType } }; return selectModels; } } }