dengjunjie
2024-12-05 46e98339480d853fc78a014c34d7ff9fcaf13890
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Core/Tenants/TenantUtil.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB;
namespace WIDESEA_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;
        }
    }
}