BaseRepositoryWorkflow.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 workflowFilter = true)
  17. {
  18. if (includeDeleted)
  19. Db.QueryFilter.Clear();
  20. //return Db.Queryable<TEntity>().WorkflowDataFiltering(_dataPermissionFilterBuilder);
  21. var query = Db.Queryable<TEntity>();
  22. if (permissionVerify)
  23. query = query.DataPermissionFiltering(_dataPermissionFilterBuilder);
  24. if (workflowFilter)
  25. query = query.WorkflowDataFiltering(_dataPermissionFilterBuilder);
  26. return query;
  27. }
  28. public async Task<string> AddAsync(TEntity entity, CancellationToken cancellationToken = default)
  29. {
  30. entity.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager)
  31. .AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager);
  32. var excEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync();
  33. return excEntity.Id;
  34. }
  35. /// <summary>
  36. /// 批量插入(应用场景:小数据量,超出1万条建议另行实现)
  37. /// </summary>
  38. /// <param name="entities"></param>
  39. /// <param name="cancellationToken"></param>
  40. /// <returns></returns>
  41. public async Task AddRangeAsync(List<TEntity> entities, CancellationToken cancellationToken = default)
  42. {
  43. entities.ForEach(d => d.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager)
  44. .AssignToCreator(_dataPermissionFilterBuilder.DataPermissionManager));
  45. await Db.Insertable(entities).ExecuteCommandAsync();
  46. }
  47. }