using JNPF.Logging;
using Mapster;
using SqlSugar;
using Yitter.IdGenerator;
namespace Tnb.Vengine.DataAccess;
public class SugarHelper
{
///
/// 创建SugarClient实例
///
public static ISqlSugarClient CreateSugarClient(string dbCode, string dbType, string dbConnection, Action? configConnection = null, Action? configSugar = null)
{
var config = new ConnectionConfig
{
ConnectionString = dbConnection,
DbType = dbType.Adapt(),
IsAutoCloseConnection = true,
ConfigId = dbCode,
InitKeyType = InitKeyType.Attribute,
MoreSettings = new ConnMoreSettings()
{
IsAutoRemoveDataCache = true, // 自动清理缓存
IsAutoToUpper = false,
PgSqlIsAutoToLower = false,
DisableNvarchar = true
},
};
configConnection?.Invoke(config);
var sugar = new SqlSugarScope(config, configSugar == null ? ConfigSugar : configSugar);
return sugar;
}
///
/// SqlSugar默认配置
///
///
public static void ConfigSugar(ISqlSugarClient db)
{
// 设置超时时间
db.Ado.CommandTimeOut = 30;
db.Aop.OnLogExecuted = (sql, pars) =>
{
var finalSql = UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, sql, pars);
if (db.Ado.SqlExecutionTime.TotalMilliseconds > 3000)
{
Log.Warning($"慢查询: {db.Ado.SqlExecutionTime.TotalMilliseconds}ms, SQL: " + finalSql);
}
else
{
var oldColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"【{DateTime.Now.ToString("HH:mm:ss.fff")}——SQL执行完成】{db.Ado.SqlExecutionTime.TotalMilliseconds} ms");
Console.WriteLine(finalSql);
Console.ForegroundColor = oldColor;
Console.WriteLine();
}
};
db.Aop.OnError = (ex) =>
{
Log.Error(UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, ex.Sql, (SugarParameter[])ex.Parametres));
};
}
public static void CustomSnowId()
{
StaticConfig.CustomSnowFlakeFunc = () =>
{
return YitIdHelper.NextId();
};
}
}