|
|
using SqlSugar;
|
|
|
using System;
|
|
|
using Serilog;
|
|
|
using EntrustSettle.Common.LogHelper;
|
|
|
using EntrustSettle.Model;
|
|
|
using Yitter.IdGenerator;
|
|
|
|
|
|
namespace EntrustSettle.Common.DB.Aop;
|
|
|
//namespace EntrustSettle.Common.DB.Aop;
|
|
|
|
|
|
public static class SqlSugarAop
|
|
|
{
|
|
|
public static void OnLogExecuting(ISqlSugarClient sqlSugarScopeProvider, string user, string table, string operate, string sql, SugarParameter[] p, ConnectionConfig config)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (!AppSettings.app(new string[] { "AppSettings", "SqlAOP", "Enabled" }).ObjToBool()) return;
|
|
|
|
|
|
if (AppSettings.app(new string[] { "AppSettings", "SqlAOP", "LogToConsole", "Enabled" }).ObjToBool() ||
|
|
|
AppSettings.app(new string[] { "AppSettings", "SqlAOP", "LogToFile", "Enabled" }).ObjToBool() ||
|
|
|
AppSettings.app(new string[] { "AppSettings", "SqlAOP", "LogToDB", "Enabled" }).ObjToBool())
|
|
|
{
|
|
|
using (LogContextExtension.Create.SqlAopPushProperty(sqlSugarScopeProvider))
|
|
|
{
|
|
|
Log.Information("------------------ \r\n User:[{User}] Table:[{Table}] Operate:[{Operate}] ConnId:[{ConnId}]【SQL语句】: \r\n {Sql}",
|
|
|
user, table, operate, config.ConfigId, UtilMethods.GetNativeSql(sql, p));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
Log.Error("Error occured OnLogExcuting:" + e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static void DataExecuting(object oldValue, DataFilterModel entityInfo)
|
|
|
{
|
|
|
if (entityInfo.EntityValue is RootEntityTkey<long> rootEntity)
|
|
|
{
|
|
|
if (rootEntity.Id == 0)
|
|
|
{
|
|
|
// SqlSugar自带的雪花算法有javascript精度问题,所以这里用自定义的雪花算法
|
|
|
//rootEntity.Id = SnowFlakeSingle.Instance.NextId();
|
|
|
rootEntity.Id = YitIdHelper.NextId();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (entityInfo.EntityValue is BaseEntity baseEntity)
|
|
|
{
|
|
|
// 新增操作赋值CreateTime
|
|
|
if (entityInfo.OperationType == DataFilterType.InsertByObject)
|
|
|
{
|
|
|
if (baseEntity.CreateTime == DateTime.MinValue)
|
|
|
{
|
|
|
baseEntity.CreateTime = DateTime.Now;
|
|
|
}
|
|
|
}
|
|
|
// 更新操作赋值ModifyTime
|
|
|
if (entityInfo.OperationType == DataFilterType.UpdateByObject)
|
|
|
{
|
|
|
baseEntity.ModifyTime = DateTime.Now;
|
|
|
}
|
|
|
|
|
|
|
|
|
//if (App.User?.ID > 0)
|
|
|
if (!string.IsNullOrEmpty(App.User?.ID))
|
|
|
{
|
|
|
// 这里不需要用到租户
|
|
|
//if (baseEntity is ITenantEntity tenant && App.User.TenantId > 0)
|
|
|
//{
|
|
|
// if (tenant.TenantId == 0)
|
|
|
// {
|
|
|
// tenant.TenantId = App.User.TenantId;
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
switch (entityInfo.OperationType)
|
|
|
{
|
|
|
case DataFilterType.InsertByObject:
|
|
|
if (baseEntity.CreateBy.IsNullOrEmpty() || baseEntity.CreateId is null or "")
|
|
|
{
|
|
|
baseEntity.CreateId = App.User.ID;
|
|
|
baseEntity.CreateBy = App.User.Name;
|
|
|
}
|
|
|
break;
|
|
|
case DataFilterType.UpdateByObject:
|
|
|
baseEntity.ModifyId = App.User.ID;
|
|
|
baseEntity.ModifyBy = App.User.Name;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private static string GetParas(SugarParameter[] pars)
|
|
|
{
|
|
|
string key = "【SQL参数】:";
|
|
|
foreach (var param in pars)
|
|
|
{
|
|
|
key += $"{param.ParameterName}:{param.Value}\n";
|
|
|
}
|
|
|
|
|
|
return key;
|
|
|
}
|
|
|
}
|