public async Task <PagedResultDto <OSSObjectDto> > GetAll(GetAllInput input) { var funTagNames = new List <string>(); if (!input.SysFunName.IsNullOrEmpty()) { var tags = await _sysFunTagRepository .GetAll() .Include(x => x.SysFun) .Include(x => x.Tag) .Where(x => x.SysFun.Name == input.SysFunName) .Select(x => x.Tag.Name) .ToListAsync(); funTagNames.AddRange(tags); } if (input.Group.HasValue) { input.BucketName = _settingManager.GetSettingValue(AppSettingNames.OSS.ContextStore); } var thisBuckets = _bucketManage.GetBuckets().Select(x => x.Name).Distinct().ToList(); var hiddenObjectAndSubs = await _aliyunOSSManage.GetHiddenObjects(thisBuckets).ToListAsync(); IQueryable <OSSObject> q = _oSSObjectRepository .GetAll() .Include(x => x.ObjectTags) .Include("ObjectTags.Tag") .Where(x => x.Size > 0) .Where(x => thisBuckets.Contains(x.BucketName)) .WhereIf(!input.BucketName.IsNullOrEmpty(), x => x.BucketName == input.BucketName) .WhereIf(!input.Name.IsNullOrEmpty(), x => x.Name.Contains(input.Name)) .WhereIf(input.Group.HasValue, x => x.Key.Contains("" + input.Group)) .WhereIf(input.TagNames != null && input.TagNames.Count > 0, x => x.ObjectTags.Select(o => o.Tag.Name.ToLower()).Intersect(input.TagNames.Select(t => t.ToLower())).Any()) .WhereIf(input.ExtensionNames != null && input.ExtensionNames.Length > 0, x => input.ExtensionNames.Select(t => t.ToLower()).Any(e => x.ExtensionName.ToLower().Contains(e))) .WhereIf(!input.SysFunName.IsNullOrEmpty(), x => x.ObjectTags.Select(o => o.Tag.Name).Intersect(funTagNames).Any()) .WhereIf(!input.Group.HasValue, x => !hiddenObjectAndSubs.Contains(x.Id)) // 不显示隐藏文件 .GroupBy(x => x.ETag) .Select(x => x.FirstOrDefault()) .OrderBy(x => x.Id) ; var count = await q.CountAsync(); q = q.PageBy(input.SkipCount, input.MaxResultCount); var data = await q.ToListAsync(); var dataR = data .Select(x => _aliyunOSSManage.OssObjectToOSSObjectDto(x)) .ToList(); _unitOfWorkManager.Current.SaveChanges(); return(new PagedResultDto <OSSObjectDto>(count, dataR)); }
public async Task <List <OSSObjectDto> > Search(SearchInput input) { var root = input.Root ?? ""; var q = _oSSObjectRepository .GetAll() .Where(x => x.BucketName == input.BucketName) .WhereIf(!(root.IsNullOrEmpty() || root == "/"), x => x.Key.StartsWith(root)) .WhereIf(!input.Name.IsNullOrEmpty(), x => x.Name.Contains(input.Name)) .WhereIf(input.TagNames != null && input.TagNames.Length > 0, x => x.ObjectTags.Select(o => o.Tag.Name.ToLower()).Intersect(input.TagNames.Select(t => t.ToLower())).Any()) .WhereIf(input.ExtensionNames != null && input.ExtensionNames.Length > 0, x => input.ExtensionNames.Select(t => t.ToLower()).Any(e => x.ExtensionName.ToLower().Contains(e))) .OrderBy(input.Sorting) ; var data = await q.ToListAsync(); var dataR = data .Select(x => _aliyunOSSManager.OssObjectToOSSObjectDto(x)) .ToList(); return(dataR); }