2025-08-13 11:14:39 +08:00
|
|
|
|
using Learun.Cache.Redis;
|
|
|
|
|
using Learun.Util;
|
|
|
|
|
using Learun.Util.SqlSugar;
|
|
|
|
|
using SqlSugar;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using System.Windows.Documents;
|
|
|
|
|
|
|
|
|
|
namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
|
|
|
|
{
|
|
|
|
|
public class ProjectSugar //不能是泛型类
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
private static string redisKey = "_ec_project";//不需要后缀
|
|
|
|
|
/// <summary>
|
2025-09-02 16:14:43 +08:00
|
|
|
|
/// 按项目取表名
|
2025-08-13 11:14:39 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
/// <typeparam name="T">实体类Entity</typeparam>
|
|
|
|
|
/// <param name="projectIdOrIndex">项目ID或Index</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static string TableName<T>(string projectIdOrIndex) where T : class, new()
|
|
|
|
|
{
|
|
|
|
|
//按项目取表名公用方法
|
|
|
|
|
string tableName = SqlSugarHelper.Db.EntityMaintenance.GetTableName<T>();
|
|
|
|
|
if (int.TryParse(projectIdOrIndex, out int ProjIndex))
|
|
|
|
|
{
|
|
|
|
|
tableName += "_" + projectIdOrIndex;//免得再去查一下数据库,直接给index的情况下
|
|
|
|
|
}
|
|
|
|
|
else if (!projectIdOrIndex.IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
//var project = SqlSugarHelper.Db.Queryable<ec_projectEntity>().First(x => x.ProjectId == projectIdOrIndex);
|
|
|
|
|
var list = new CacheByRedis().GetRedisOrDBData(redisKey,"", () => SqlSugarHelper.Db.Queryable<ec_projectEntity>().ToList());
|
|
|
|
|
if (list != null)
|
|
|
|
|
{
|
|
|
|
|
var project = list.FirstOrDefault(x=>x.ProjectId == projectIdOrIndex);
|
|
|
|
|
if (project != null)
|
|
|
|
|
{
|
|
|
|
|
tableName += "_" + project.ProjectIndex.Value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
throw ExceptionEx.ThrowServiceException(new System.Exception(), "无效的ProjectId");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return tableName;//空就返回原表名
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Type FindEntityTypeByTableName(string tableName)
|
|
|
|
|
{
|
|
|
|
|
// 假设所有实体类都在这个命名空间或者程序集
|
|
|
|
|
var allTypes = Assembly.GetExecutingAssembly().GetTypes();
|
|
|
|
|
|
|
|
|
|
foreach (var type in allTypes)
|
|
|
|
|
{
|
|
|
|
|
if (!type.IsClass) continue;
|
|
|
|
|
|
|
|
|
|
var attr = type.GetCustomAttribute<SugarTable>();
|
|
|
|
|
if (attr != null && string.Equals(attr.TableName, tableName, StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return type;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 或者类名就等于表名(如果没加特性)
|
|
|
|
|
if (attr == null && string.Equals(type.Name, tableName, StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return type;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null; // 没找到
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|