BaseRepositoryWorkflow.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Linq.Expressions;
  2. using Hotline.Repository.SqlSugar.DataPermissions;
  3. using Hotline.Repository.SqlSugar.Extensions;
  4. using SqlSugar;
  5. using XF.Domain.Entities;
  6. using XF.Domain.Repository;
  7. namespace Hotline.Repository.SqlSugar;
  8. public class BaseRepositoryWorkflow<TEntity> : BaseRepository<TEntity>, IRepositoryWorkflow<TEntity>
  9. where TEntity : class, IEntity<string>, IHasCreationTime, IDataPermission, IWorkflow, new()
  10. {
  11. private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
  12. protected BaseRepositoryWorkflow(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder, IServiceProvider serviceProvider) : base(uow, dataPermissionFilterBuilder, serviceProvider)
  13. {
  14. _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
  15. }
  16. public ISugarQueryable<TEntity> Queryable(bool permissionVerify = false, bool includeDeleted = false, bool canView = true, bool? hasHandled = null, bool? isAdmin = false,bool? hasHandledStep = null)
  17. {
  18. if (includeDeleted)
  19. Db.QueryFilter.Clear();
  20. var query = Db.Queryable<TEntity>();
  21. if (permissionVerify)
  22. query = query.DataPermissionFiltering(_dataPermissionFilterBuilder);
  23. if (canView && isAdmin != true)
  24. query = query.WorkflowViewFiltering(_dataPermissionFilterBuilder);
  25. if (canView && isAdmin == true)
  26. query = query.WorkflowViewFilteringAdmin();
  27. if (hasHandled.HasValue)
  28. query = query.WorkflowHandleFiltering(_dataPermissionFilterBuilder, hasHandled.Value, isAdmin);
  29. if (hasHandledStep.HasValue)
  30. query = query.WorkflowHandleStepFiltering(_dataPermissionFilterBuilder, hasHandledStep.Value, isAdmin);
  31. return query.Clone();
  32. }
  33. public async Task<string> AddAsync(TEntity entity, CancellationToken cancellationToken = default)
  34. {
  35. entity.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager)
  36. .AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager);
  37. var excEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync();
  38. return excEntity.Id;
  39. }
  40. /// <summary>
  41. /// 批量插入(应用场景:小数据量,超出1万条建议另行实现)
  42. /// </summary>
  43. /// <param name="entities"></param>
  44. /// <param name="cancellationToken"></param>
  45. /// <returns></returns>
  46. public async Task AddRangeAsync(List<TEntity> entities, CancellationToken cancellationToken = default)
  47. {
  48. entities.ForEach(d => d.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager)
  49. .AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager));
  50. await Db.Insertable(entities).ExecuteCommandAsync();
  51. }
  52. }