RepositoryExtension.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Mapster;
  2. using MapsterMapper;
  3. using SqlSugar;
  4. namespace Admin.NET.Core.Extension
  5. {
  6. public static class RepositoryExtension
  7. {
  8. /// <summary>
  9. /// 实体假删除 _rep.Context.Updateable(entity).FakeDelete().ExecuteCommandAsync();
  10. /// </summary>
  11. /// <typeparam name="T"></typeparam>
  12. /// <param name="updateable"></param>
  13. /// <returns></returns>
  14. public static IUpdateable<T> FakeDelete<T>(this IUpdateable<T> updateable) where T : EntityBase, new()
  15. {
  16. return updateable.ReSetValue(x => { x.IsDelete = true; })
  17. .IgnoreColumns(ignoreAllNullColumns: true)
  18. .EnableDiffLogEvent() // 记录差异日志
  19. .UpdateColumns(x => new { x.IsDelete, x.UpdateTime, x.UpdateUserId }); // 允许更新的字段-AOP拦截自动设置UpdateTime、UpdateUserId
  20. }
  21. /// <summary>
  22. /// 排序方式(默认降序)
  23. /// </summary>
  24. /// <param name="queryable"></param>
  25. /// <param name="pageInput"> </param>
  26. /// <param name="defualtSortField"> 默认排序字段 </param>
  27. /// <param name="descSort"> 是否降序 </param>
  28. /// <returns> </returns>
  29. public static ISugarQueryable<T> OrderBuilder<T>(this ISugarQueryable<T> queryable, BasePageInput pageInput, string defualtSortField = "Id", bool descSort = true)
  30. {
  31. var orderStr = "";
  32. // 约定默认每张表都有Id排序
  33. if (!string.IsNullOrWhiteSpace(defualtSortField))
  34. {
  35. orderStr = descSort ? defualtSortField + " Desc" : defualtSortField + " Asc";
  36. }
  37. TypeAdapterConfig config = new();
  38. config.ForType<T, BasePageInput>().IgnoreNullValues(true);
  39. Mapper mapper = new(config); // 务必将mapper设为单实例
  40. var nowPagerInput = mapper.Map<BasePageInput>(pageInput);
  41. // 排序是否可用-排序字段和排序顺序都为非空才启用排序
  42. if (!string.IsNullOrEmpty(nowPagerInput.Field) && !string.IsNullOrEmpty(nowPagerInput.Order))
  43. {
  44. orderStr = $"{nowPagerInput.Field} {(nowPagerInput.Order == nowPagerInput.DescStr ? "Desc" : "Asc")}";
  45. }
  46. return queryable.OrderByIF(!string.IsNullOrWhiteSpace(orderStr), orderStr);
  47. }
  48. }
  49. }