using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core.Attributes; using WIDESEAWCS_Core.Const; using WIDESEAWCS_Core.DB; using WIDESEAWCS_Core.DB.Models; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_Core.HttpContextUser; using WIDESEAWCS_Core.Seed; using WIDESEAWCS_Core.Tenants; namespace WIDESEAWCS_Core.AOP { public static class SqlSugarAop { public static void DataExecuting(object oldValue, DataFilterModel entityInfo) { if (entityInfo.EntityValue is BaseEntity baseEntity) { // 新增操作 if (entityInfo.OperationType == DataFilterType.InsertByObject) { if (entityInfo.PropertyName == nameof(BaseEntity.CreateDate)) { baseEntity.CreateDate = DateTime.Now; } PropertyInfo propertyInfo = entityInfo.EntityColumnInfo.PropertyInfo; SequenceAttribute? sequenceAttirbute = propertyInfo.GetCustomAttribute(); if (sequenceAttirbute != null) { if (propertyInfo.GetValue(entityInfo.EntityValue)?.ObjToInt() <= 0) { SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig { ConfigId = MainDb.CurrentDbConnId, ConnectionString = DBContext.GetMainConnectionDb().Connection, IsAutoCloseConnection = true, DbType = DBContext.DbType, }); int count = sugarClient.Ado.GetScalar($"SELECT COUNT(*) FROM sys.sequences WHERE name = '{sequenceAttirbute.SequenceName}'").ObjToInt(); if (count == 0) { string sql = $"CREATE SEQUENCE {sequenceAttirbute.SequenceName} AS [int] START WITH {sequenceAttirbute.StartWith} INCREMENT BY {sequenceAttirbute.Increment} MINVALUE {sequenceAttirbute.SeqMinValue} MAXVALUE {sequenceAttirbute.SeqMaxValue} {(sequenceAttirbute.IsCycle ? "CYCLE" : "")} CACHE"; sugarClient.Ado.ExecuteCommand(sql); } int seq = sugarClient.Ado.GetScalar($"SELECT NEXT VALUE FOR {sequenceAttirbute.SequenceName}").ObjToInt(); propertyInfo.SetValue(entityInfo.EntityValue, seq, null); } } } else if (entityInfo.OperationType == DataFilterType.UpdateByObject) { baseEntity.ModifyDate = DateTime.Now; } try { if (App.User?.UserId > 0) { switch (entityInfo.OperationType) { case DataFilterType.UpdateByObject: baseEntity.Modifier = App.User.UserName; break; case DataFilterType.InsertByObject: baseEntity.Creater = App.User.UserName; break; } } else { switch (entityInfo.OperationType) { case DataFilterType.UpdateByObject: baseEntity.Modifier = "System"; break; case DataFilterType.InsertByObject: baseEntity.Creater = "System"; break; } } } catch (NullReferenceException) { switch (entityInfo.OperationType) { case DataFilterType.UpdateByObject: baseEntity.Modifier = "System"; break; case DataFilterType.InsertByObject: baseEntity.Creater = "System"; break; } } } if (entityInfo.EntityValue is IBaseHistoryEntity baseHistoryEntity) { if (entityInfo.OperationType == DataFilterType.InsertByObject && entityInfo.PropertyName == nameof(IBaseHistoryEntity.InsertTime)) { baseHistoryEntity.InsertTime = DateTime.Now; } } } } }