You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.6 KiB

using BrilliantSightClient.Model.Entity.Base;
using System.Reflection;
using System.Runtime.CompilerServices;
namespace BrilliantSightClient.Model.Entity;
/// <summary>
/// 系统设置实体
/// </summary>
public class AlgorithmConfigEntity
{
public static readonly string TableName = "ALGORITHM_CONFIG";
[DbField("GUID")]
public Guid GUID { get; set; }
/// <summary>
/// json内容
/// </summary>
[DbField("JSON")]
public required string Json { get; set; }
/// <summary>
/// Json排序
/// </summary>
[DbField("JSON_ORDER")]
public required int JsonOrder { get; set; }
private static Dictionary<string, string> GetFieldMappings()
{
var properties = typeof(AlgorithmConfigEntity).GetProperties(BindingFlags.Public | BindingFlags.Instance);
return properties
.Where(p => Attribute.IsDefined(p, typeof(DbFieldAttribute)))
.ToDictionary(
p => p.Name,
p => ((DbFieldAttribute)p.GetCustomAttribute(typeof(DbFieldAttribute))).FieldName
);
}
// 生成 Insert 语句
public string GenerateInsertSQL()
{
var mappings = GetFieldMappings();
var columns = string.Join(", ", mappings.Values);
var values = string.Join(", ", mappings.Keys.Select(k => $"@{k}"));
return $"INSERT INTO {TableName} ({columns}) VALUES ({values});";
}
// 生成 Update 语句
public string GenerateUpdateSQL(Dictionary<string, object> fieldsToUpdate = null)
{
if (fieldsToUpdate == null || fieldsToUpdate.Count == 0)
{
// 默认根据 ID 更新所有字段
var mappings = GetFieldMappings();
var setClause = string.Join(", ", mappings.Values.Select(f => $"{f} = @{f}"));
return $"UPDATE {TableName} SET {setClause} WHERE GUID = " + GUID.ToString() + ";";
}
else
{
// 根据传入的字段更新
var setClause = string.Join(", ", fieldsToUpdate.Keys.Select(f => $"{f} = @{f}"));
return $"UPDATE {TableName} SET {setClause} WHERE GUID = " + GUID.ToString() + ";";
}
}
// 生成 Delete 语句
public string GenerateDeleteSQL(Dictionary<string, object> conditions = null)
{
if (conditions == null || conditions.Count == 0)
{
// 默认根据 ID 删除
return $"DELETE FROM {TableName} WHERE GUID =" + GUID.ToString() + ";";
}
else
{
// 根据传入条件删除
var whereClause = string.Join(" AND ", conditions.Keys.Select(f => $"{f} = @{f}"));
return $"DELETE FROM {TableName} WHERE {whereClause};";
}
}
// 生成 Select 语句
public string GenerateSelectSQL(List<string> fields = null, Dictionary<string, object> conditions = null)
{
var mappings = GetFieldMappings();
// 如果没有指定字段,则选择所有字段
if (fields == null || fields.Count == 0)
{
fields = mappings.Values.ToList();
}
else
{
// 确保指定的字段存在于映射中
fields = fields.Where(f => mappings.ContainsValue(f)).ToList();
}
var columns = string.Join(", ", fields);
var sql = $"SELECT {columns} FROM {TableName}";
if (conditions != null && conditions.Count > 0)
{
var whereClause = string.Join(" AND ", conditions.Keys.Select(f => $"{mappings[f]} = @{f}"));
sql += $" WHERE {whereClause}";
}
sql += ";";
return sql;
}
}