using SqlSugar; using System.Linq.Expressions; using System.Reflection; using Wood.Entity; using Wood.Util; namespace Wood.Data.Repository { public static class RepositoryExtension { #region 过滤器清除 /// /// 清除delete 过滤器 /// /// ISugarQueryable public static ISugarQueryable ClearDeleteFilter(this SimpleClient repository) where T : EntityBase, new() { return repository.AsQueryable().ClearFilter(); } /// /// 清除 数据范围 过滤器 /// /// ISugarQueryable public static ISugarQueryable ClearDataScopeFilter(this SimpleClient repository) where T : EntityBase, new() { return repository.AsQueryable().ClearFilter(); } /// /// 设置自定义 status 过滤器 /// /// ISugarQueryable public static ISugarQueryable AddStatusFilter(this SimpleClient repository, int status = 1) where T : EntityBaseExtra, new() { var query = repository.AsQueryable(); return query.Where(it => status == it.Status); } /// /// 设置自定义 status 过滤器 /// /// ISugarQueryable public static ISugarQueryable AddStatusFilter(this SimpleClient repository, params int[] status) where T : EntityBaseExtra, new() { var query = repository.AsQueryable(); return query.Where(it => status.Contains(it.Status)); } #endregion /// /// 实体假删除异步 _rep.FakeDeleteAsync(entity) /// /// /// /// 要删除的实体 /// public static Task FakeDeleteAsync(this SimpleClient repository, T entity) where T : EntityBase, new() { entity.IsDelete = true; return repository.Context.Updateable(entity).UpdateColumns(it => new { it.IsDelete, it.UpdateTime, it.UpdateUserId }).ExecuteCommandAsync(); } /// /// 实体假删除 db.FakeDelete(entity) /// /// /// /// /// public static Task FakeDeleteAsync(this SimpleClient repository, Expression> whereExpression) where T : EntityBase, new() { long? userId = GlobalContext.UserInfo?.UserId; return repository.Context.Updateable() .AS() .SetColumns("IsDelete", true) .SetColumns("UpdateUserId", userId) .SetColumns("UpdateTime", DateTime.Now) .Where(whereExpression) .ExecuteCommandAsync(); } /// /// 实体假删除 db.FakeDelete(entity) /// /// /// /// /// public static Task FakeDeleteAsync(this SimpleClient repository, List entity) where T : EntityBase, new() { foreach (var item in entity) item.IsDelete = true; return repository.Context.Updateable(entity).UpdateColumns(it => new { it.IsDelete, it.UpdateTime, it.UpdateUserId }).ExecuteCommandAsync(); } /// /// 根据表名查询 /// /// /// public static ISugarQueryable AS(this ISugarQueryable queryable) { var info = GetTableInfo(); return queryable.AS($"{info}"); } /// /// 根据表名查询 /// /// /// /// /// public static ISugarQueryable AS(this ISugarQueryable queryable) { var info = GetTableInfo(); return queryable.AS($"{info}"); } /// /// 根据表名更新 /// /// /// public static IUpdateable AS(this IUpdateable updateable) where T : EntityBase, new() { var info = GetTableInfo(); return updateable.AS($"{info}"); } /// /// 根据表名新增 /// /// /// public static IInsertable AS(this IInsertable insertable) where T : EntityBase, new() { var info = GetTableInfo(); return insertable.AS($"{info}"); } /// /// 根据表名删除 /// /// /// public static IDeleteable AS(this IDeleteable deleteable) where T : EntityBase, new() { var info = GetTableInfo(); return deleteable.AS($"{info}"); } /// /// 根据实体类型获取表信息 /// /// /// private static string? GetTableInfo() { var entityType = typeof(T); var tableName = entityType.GetCustomAttribute()?.TableName; return tableName; } } }