using BPA.KitChen.GroupMealOrder.Core; using BPA.KitChen.GroupMealOrder.Core.Common; using BPA.KitChen.GroupMealOrder.Core.Common.Const; using BPA.KitChen.GroupMealOrder.Core.Entity.Base; using Furion; using Furion.DatabaseAccessor; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace BPA.KitChen.GroupMealOrder.SqlSugar { public class SqlSugarDb { public static SqlSugarScope Db { get; set; } public static SqlSugarScope SqlSugarScope(ConnectionConfig configConnection) { //全局过滤 Db = new SqlSugarScope(configConnection, db => { //全局过滤 TableFilterItem(db); db.Aop.OnLogExecuting = (sql, pars) => { Console.WriteLine(sql); //sql 执行前 }; db.Aop.OnLogExecuted = (sql, pars) => { //sql 执行后 }; db.Aop.OnError = ex => { //sql 异常 }; }); return Db; } #region 全局过滤器及配置 /// /// 全局过滤 /// private static void TableFilterItem(SqlSugarClient db) { //添加默认值 DataExecuting(db); //// 配置租户过滤器 //var tenantId = App.User?.FindFirst(ClaimConst.GroupId)?.Value; //db.QueryFilter.AddTableFilter(u => u.GroupId == tenantId); //db.QueryFilter.AddTableFilter(u => u.IsDeleted ==0); var types = Assembly.Load("BPA.KitChen.GroupMealOrder.Core").GetTypes() .Where(x => x.GetCustomAttribute() != null); foreach (var entityType in types) { if (entityType.GetProperty("GroupId") != null)//判断实体类中包含属性 { var groupId = string.IsNullOrWhiteSpace(CurrentUser.TenantId) ? App.User?.FindFirst(ClaimConst.GroupId)?.Value : CurrentUser.TenantId; //构建动态Lambda var lambda = DynamicExpressionParser.ParseLambda (new[] { Expression.Parameter(entityType, "it") }, typeof(bool), $"{nameof(IBaseGroupIdEntity.GroupId)} == @0", groupId); db.QueryFilter.Add(new TableFilterItem(entityType, lambda, true)); //将Lambda传入过滤器 } if (entityType.GetProperty("IsDeleted") != null) //判断实体类中包含属性 { //构建动态Lambda var lambda = DynamicExpressionParser.ParseLambda (new[] { Expression.Parameter(entityType, "it") }, typeof(bool), $"{nameof(IBaseOPEntity.IsDeleted)} == @0", 0); db.QueryFilter.Add(new TableFilterItem(entityType, lambda, true)); //将Lambda传入过滤器 } } //var types = Assembly.Load("BPA.KitChen.GroupMealOrder.Core").GetTypes() // .Where(x => x.Namespace != null // && x.GetCustomAttribute() != null // && x.Namespace.Contains("BPA.KitChen.GroupMealOrder.Core.Entity")); //foreach (var entityType in types) //{ // if (entityType.GetProperty("GroupId") != null)//判断实体类中包含属性 // { // //构建动态Lambda // var lambda = DynamicExpressionParser.ParseLambda // (new[] { Expression.Parameter(entityType, "it") }, // typeof(bool), $"{nameof(ITenantIdFilter.GroupId)} == @0", // CurrentUser.GroupId); // db.QueryFilter.Add(new TableFilterItem(entityType, lambda, true)); //将Lambda传入过滤器 // } // if (entityType.GetProperty("IsDelete") != null) //判断实体类中包含属性 // { // //构建动态Lambda // var lambda = DynamicExpressionParser.ParseLambda // (new[] { Expression.Parameter(entityType, "it") }, // typeof(bool), $"{nameof(IDeletedFilter.IsDelete)} == @0", // false); // db.QueryFilter.Add(new TableFilterItem(entityType, lambda, true)); //将Lambda传入过滤器 // } //} } /// /// 附默认值 /// /// private static void DataExecuting(SqlSugarClient db) { //全局字段赋值 db.Aop.DataExecuting = (oldValue, entityInfo) => { InsertByObject(entityInfo); UpdateByObject(oldValue, entityInfo); }; } /// ///插入数据时附默认值 /// /// private static void InsertByObject(DataFilterModel entityInfo) { if (entityInfo.OperationType != DataFilterType.InsertByObject) return; switch (entityInfo.PropertyName) { case "CreateAt": entityInfo.SetValue(DateTime.Now); break; case "CreateBy": entityInfo.SetValue(CurrentUser.Account); break; case "GroupId": entityInfo.SetValue(CurrentUser.TenantId); break; } } /// /// 修改数据时附默认值 /// /// /// private static void UpdateByObject(object oldValue, DataFilterModel entityInfo) { if (entityInfo.OperationType != DataFilterType.UpdateByObject) return; switch (entityInfo.PropertyName) { case "UpdateAt": entityInfo.SetValue(DateTime.Now); break; case "UpdateBy": entityInfo.SetValue(CurrentUser.Account); break; } //if (entityInfo.PropertyName == "IsDelete" && (bool)oldValue) //{ // switch (entityInfo.PropertyName) // { // case "DeleteAt": // entityInfo.SetValue(DateTime.Now); // break; // case "DeleteBy": // entityInfo.SetValue(CurrentUser.Account); // break; // } //} //else //{ //} } #endregion } }