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;
|
}
|
}
|
}
|