| 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<Type> GetTenantEntityTypes(TenantTypeEnum? tenantType = null) | 
|         { | 
|             List<Type> types = RepositorySetting.Entitys.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass).ToList(); | 
|   | 
|             List<Type> returnTypes = types.Where(s => IsTenantEntity(s, tenantType)).ToList(); | 
|             return returnTypes; | 
|         } | 
|   | 
|         public static bool IsTenantEntity(this Type u, TenantTypeEnum? tenantType = null) | 
|         { | 
|             var mta = u.GetCustomAttribute<MultiTenantAttribute>(); | 
|             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<SelectModel> GetTenantSelectModels() | 
|         { | 
|             List<SelectModel> selectModels = new List<SelectModel>() | 
|             { | 
|                 new SelectModel | 
|                 { | 
|                     FieldName = MainDb.TenantId | 
|                 }, | 
|                 //new SelectModel | 
|                 //{ | 
|                 //    FieldName = MainDb.TenantName | 
|                 //}, | 
|                 new SelectModel | 
|                 { | 
|                     FieldName = MainDb.ConnectionString, | 
|                 }, | 
|                 new SelectModel | 
|                 { | 
|                     FieldName = MainDb.TenantDbType | 
|                 } | 
|             }; | 
|             return selectModels; | 
|         } | 
|     } | 
| } |