using HslCommunication; using SqlSugar; using System.Text.RegularExpressions; namespace guoke { /// /// 扩展类 所有扩展写在这里 /// public static class guokeExtensionClass { #region 数据库扩展 /// /// 检查表是否存在,如果不存在则创建表 /// /// /// public static bool guokeCheckToCreate(this SqlSugarScope db) { try { string tableName = db.guokeGetTableName(typeof(T));//获取表名 if (!db.guokeCheckTable(tableName)) { if (db.MappingTables == null) { db.MappingTables = new MappingTableList(); } db.MappingTables.Add(typeof(T).Name, tableName); // 类名 表名 db.CodeFirst.InitTables(typeof(T)); //创建表 LogService.Log.Info("仓库", $"创建表:{tableName},模型:{typeof(T).Name}"); } return true; } catch (Exception e) { LogService.Log.Error("数据库", $"检查创建表错误:{e.Message}"); return false; } } /// /// 检查表 /// /// public static bool guokeCheckTable(this SqlSugarScope db, string tableName) { return db.DbMaintenance.IsAnyTable(tableName);//判断状态表是否存在 } /// /// 根据类型获取表名 /// /// /// /// public static string guokeGetTableName(this SqlSugarScope db, Type type) { object[] attributes = type.GetCustomAttributes(typeof(SugarTable), false); if (attributes.Length > 0) { SugarTable sugarTable = (SugarTable)attributes[0]; return sugarTable.TableName; } return type.Name; } /// /// 检查表是否存在,如果不存在则创建表 /// /// /// public static bool guokeCheckToCreate(this SqlSugarClient db) { try { string tableName = db.guokeGetTableName(typeof(T));//获取表名 if (!db.guokeCheckTable(tableName)) { if (db.MappingTables == null) { db.MappingTables = new MappingTableList(); } db.MappingTables.Add(typeof(T).Name, tableName); // 类名 表名 db.CodeFirst.InitTables(typeof(T)); //创建表 LogService.Log.Info("仓库", $"创建表:{tableName},模型:{typeof(T).Name}"); } return true; } catch (Exception e) { LogService.Log.Error("数据库", $"检查创建表错误:{e.Message}"); return false; } } /// /// 检查表 /// /// public static bool guokeCheckTable(this SqlSugarClient db,string tableName) { return db.DbMaintenance.IsAnyTable(tableName);//判断状态表是否存在 } /// /// 根据类型获取表名 /// /// /// /// public static string guokeGetTableName(this SqlSugarClient db,Type type) { object[] attributes = type.GetCustomAttributes(typeof(SugarTable), false); if (attributes.Length > 0) { SugarTable sugarTable = (SugarTable)attributes[0]; return sugarTable.TableName; } return type.Name; } #endregion #region 字节数组扩展 /// /// 扩展方法,用于将一个 byte[] 追加到另一个 byte[] 后面 /// /// /// /// 追加后的数组 public static byte[] Append(this byte[] originalArray, byte[] arrayToAppend) { if (originalArray == null) { return arrayToAppend; } if (arrayToAppend == null) { return originalArray; } // 创建一个 List 并将原始数组元素添加进去 List combinedList = new List(originalArray); // 将待追加的数组元素添加到列表中 combinedList.AddRange(arrayToAppend); // 将列表转换为 byte[] 数组并返回 return combinedList.ToArray(); } #endregion #region 字符串扩展 /// /// 字符串转换为整数,失败时返回默认值 /// /// 字符串 /// 默认值 /// public static int ToIntOrDefault(this string str, int defaultValue = 0) { return int.TryParse(str, out int result) ? result : defaultValue; } /// /// 将字符串转换为长整数,失败时返回默认值 /// /// 字符串 /// 默认值 /// public static long ToLongOrDefault(this string str, long defaultValue = 0) { return long.TryParse(str, out long result) ? result : defaultValue; } /// /// 将字符串转换为整数,带操作结果 /// /// /// public static OperateResult guokeToInt(this string str) { return int.TryParse(str, out int result) ? OperateResult.CreateSuccessResult(result) : OperateResult.CreateFailedResult(new OperateResult("转换失败")); } /// /// 使用正则表达式从字符串中提取匹配的部分,带操作结果 /// /// 输入字符串 /// 正则表达式模式 /// 返回结果 public static OperateResult guokeExtractWithRegex(this string input, string pattern) { // 创建正则表达式对象 Regex regex = new Regex(pattern); // 匹配输入字符串 Match match = regex.Match(input); // 如果匹配成功,返回匹配的值 if (match.Success && match.Groups.Count > 1) { return OperateResult.CreateSuccessResult(match.Groups[1].Value); } // 如果没有匹配,返回空字符串 return OperateResult.CreateFailedResult(new OperateResult("提取失败")); } /// /// 提取字符串右边的连续数字,带操作结果 /// /// /// public static OperateResult guokeExtractRightNumbers(this string input) { // 定义正则表达式模式,用于匹配字符串右边的连续数字 string pattern = @"\d+$"; // 使用 Regex.Match 方法进行匹配 Match match = Regex.Match(input, pattern); // 检查是否匹配成功 if (match.Success) { // 如果匹配成功,尝试将匹配到的字符串转换为 int 类型 if (int.TryParse(match.Value, out int result)) { return OperateResult.CreateSuccessResult(result); } } // 如果没有匹配到或者转换失败,返回 0 return OperateResult.CreateFailedResult(new OperateResult("提取失败")); } /// /// 提取字符串左边的连续数字,带操作结果 /// /// /// public static OperateResult guokeExtractLeftNumbers(this string input) { // 定义正则表达式模式,用于匹配字符串右边的连续数字 string pattern = @"^\d+"; // 使用 Regex.Match 方法进行匹配 Match match = Regex.Match(input, pattern); // 检查是否匹配成功 if (match.Success) { // 如果匹配成功,尝试将匹配到的字符串转换为 int 类型 if (int.TryParse(match.Value, out int result)) { return OperateResult.CreateSuccessResult(result); } } // 如果没有匹配到或者转换失败,返回 0 return OperateResult.CreateFailedResult(new OperateResult("提取失败")); } #endregion } }