using System.Reflection; using System.Text; using BrilliantSightClient.Model.GradeLevel.Entity.DatabaseEntity; using BrilliantSightClient.Model.Helper; namespace BrilliantSightClient.Model.GradeLevel.Helper; public static class EntityHelper { public static void GenerateSign(this BaseEntity entity) { Type type = entity.GetType(); PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(p => p.Name != nameof(BaseEntity.Sign) && p.CanRead) .ToArray(); Array.Sort(properties, (p1, p2) => string.Compare(p1.Name, p2.Name, StringComparison.Ordinal)); StringBuilder sourceBuilder = new StringBuilder(); foreach (PropertyInfo property in properties) { object value = property.GetValue(entity); string valueString = value?.ToString() ?? string.Empty; sourceBuilder.Append($"{property.Name}={valueString}&"); } if (sourceBuilder.Length > 0) { sourceBuilder.Length--; } string sign = Common.GenerateMd5Hash(sourceBuilder.ToString()); entity.Sign = sign; } public static string GenerateInsertSql(this BaseEntity entity) { Type type = entity.GetType(); string tableName = ConvertToUpperSnakeCase(type.Name); PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(p => p.CanRead && p.GetValue(entity) != null) .ToArray(); StringBuilder columnsBuilder = new StringBuilder(); StringBuilder valuesBuilder = new StringBuilder(); foreach (PropertyInfo property in properties) { string columnName = ConvertToUpperCase(property.Name); object value = property.GetValue(entity); string valueString = ProcessValue(value); columnsBuilder.Append($"{columnName},"); valuesBuilder.Append($"{valueString},"); } if (columnsBuilder.Length > 0) { columnsBuilder.Length--; valuesBuilder.Length--; } string insertSql = $"INSERT INTO {tableName} ({columnsBuilder}) VALUES ({valuesBuilder});"; return insertSql; } // 辅助方法:大驼峰转大写下划线 private static string ConvertToUpperSnakeCase(string input) { return string.Concat(input.Select((c, i) => i > 0 && char.IsUpper(c) ? "_" + c : c.ToString())).ToUpper(); } // 辅助方法:大驼峰+下划线转纯大写 private static string ConvertToUpperCase(string input) { return input.ToUpper(); } // 辅助方法:处理不同类型的值 private static string ProcessValue(object value) { if (value == null) return "NULL"; if (value is string str) return $"'{str.Replace("'", "''")}'"; if (value is DateTime dateTime) return $"'{dateTime:yyyy-MM-dd HH:mm:ss}'"; if (value is bool boolean) return boolean ? "1" : "0"; return value.ToString(); } public static int GetValue(this TEnum enumValue) where TEnum : Enum { return Convert.ToInt32(enumValue); } public static int? GetValueFromName(string name, bool ignoreCase = true) where TEnum : struct, Enum { if (Enum.TryParse(name, ignoreCase, out var result)) { return Convert.ToInt32(result); } return null; // 转换失败返回 null } }