BaseRepositoryWorkflow.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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) : base(uow, dataPermissionFilterBuilder)
  13. {
  14. _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
  15. }
  16. public ISugarQueryable<TEntity> Queryable(bool permissionVerify = false, bool includeDeleted = false, bool canView = true, bool? hasHandled = 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)
  24. query = query.WorkflowViewFiltering(_dataPermissionFilterBuilder);
  25. if (hasHandled.HasValue)
  26. query = query.WorkflowHandleFiltering(_dataPermissionFilterBuilder, hasHandled.Value);
  27. return query.Clone();
  28. }
  29. public async Task<string> AddAsync(TEntity entity, CancellationToken cancellationToken = default)
  30. {
  31. entity.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager)
  32. .AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager);
  33. var excEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync();
  34. return excEntity.Id;
  35. }
  36. /// <summary>
  37. /// 批量插入(应用场景:小数据量,超出1万条建议另行实现)
  38. /// </summary>
  39. /// <param name="entities"></param>
  40. /// <param name="cancellationToken"></param>
  41. /// <returns></returns>
  42. public async Task AddRangeAsync(List<TEntity> entities, CancellationToken cancellationToken = default)
  43. {
  44. entities.ForEach(d => d.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager)
  45. .AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager));
  46. await Db.Insertable(entities).ExecuteCommandAsync();
  47. }
  48. }