using System.Linq.Dynamic.Core; using Abp.Application.Services; using Abp.Application.Services.Dto; using Abp.Linq.Extensions; using Abp.Runtime.Caching; using Abp.Runtime.Session; using Abp.UI; using Microsoft.AspNetCore.Identity; using VberZero.AppService.Base.Dto; using VberZero.Authorization.Users; using VberZero.BaseSystem.MultiTenancy; using VberZero.BaseSystem.Users; using VberZero.DomainService.AppGuids; using VberZero.DomainService.Attaches; using VberZero.DomainService.AutoCompletes; using VberZero.DomainService.States; using VberZero.IdentityFramework; using VberZero.Session; using VberZero.Tools.Lambda; namespace VberZero.AppService.Base; public abstract class VzAppServiceBase : ApplicationService { public ICacheManager CacheManager { get; set; } public new IVzSession AbpSession { get; set; } public IAttachManager AttachManager { get; set; } public ISysStatesManager StatesManager { get; set; } public IAppGuidManager AppGuidManager { get; set; } public IAutoCompleteQueryManager QueryAcManager { get; set; } protected virtual VzTenantManager TenantManager { get; set; } protected virtual VzUserManager UserManager { get; set; } protected VzAppServiceBase() { LocalizationSourceName = VzConsts.LocalizationSourceName; AttachManager = NullAttachManager.Instance; StatesManager = NullSysStatesManager.Instance; AppGuidManager = NullAppGuidManager.Instance; QueryAcManager = NullAutoCompleteQueryManager.Instance; AbpSession = NullVzSession.Instance; } protected virtual async Task GetCurrentUserAsync() { var user = await UserManager.FindByIdAsync(AbpSession.GetUserId().ToString()); if (user == null) { throw new Exception("There is no current user!"); } return user; } protected virtual Task GetCurrentTenantAsync() { return TenantManager.GetByIdAsync(AbpSession.GetTenantId()); } /// /// 过滤查询条件 /// protected virtual IQueryable ApplyFilter(IQueryable query, IVzPagedRequestDto input) { if (!(input is { } pagedInput)) { return query; } if (!string.IsNullOrEmpty(pagedInput.KeyWords)) { query = pagedInput.KeyField.ToLower() == "keyword" ? KeyWordFilter(query, pagedInput.KeyWords) : KeyWordFilter(query, pagedInput); } query = SearchListFilter(query, pagedInput); return query; } /// /// 关键字查询 /// /// /// /// /// protected virtual IQueryable KeyWordFilter(IQueryable query, string pagedInput) { return query; } /// /// 关键字查询 /// /// /// /// /// protected virtual IQueryable KeyWordFilter(IQueryable query, IVzPagedRequestDto pagedInput) { if (!string.IsNullOrEmpty(pagedInput.KeyWords) && !string.IsNullOrEmpty(pagedInput.KeyField) && pagedInput.KeyField.ToLower() != "keyword") { object keyWords = pagedInput.KeyWords; LambdaObject obj = new LambdaObject() { FieldType = (LambdaFieldType)pagedInput.FieldType, FieldName = pagedInput.KeyField, FieldValue = keyWords, ExpType = (LambdaExpType)pagedInput.ExpType }; var exp = obj.GetExp(); query = exp != null ? query.Where(exp) : query; } return query; } /// /// 多个条件查询 /// /// /// /// /// protected IQueryable SearchListFilter(IQueryable query, IVzPagedRequestDto pagedInput) { if (pagedInput.SearchList != null && pagedInput.SearchList.Count > 0) { List objList = SelfFilter(pagedInput.SearchList) ?? new List(); foreach (var o in pagedInput.SearchList) { if (o.HasUse || string.IsNullOrEmpty(o.KeyWords)) continue; object keyWords = o.KeyWords; objList.Add(new LambdaObject { FieldType = (LambdaFieldType)o.FieldType, FieldName = o.KeyField, FieldValue = keyWords, ExpType = (LambdaExpType)o.ExpType }); } var exp = objList.GetExp(); query = exp != null ? query.Where(exp) : query; } return query; } /// /// 特殊条件时,自定义查询 (使用完该字段查询条件时,应该从list里清楚) /// /// /// protected virtual List SelfFilter(List list) { return null; } /// /// 排序 /// /// The query. /// The input. protected virtual IQueryable ApplySorting(IQueryable query, IVzPagedRequestDto input) { return _ApplySorting(query, input); } /// /// 排序 /// /// The query. /// The input. protected IQueryable _ApplySorting(IQueryable query, IVzPagedRequestDto input) { //Try to sort query if available if (input is ISortedResultRequest sortInput) { return string.IsNullOrWhiteSpace(sortInput.Sorting) ? SelfSorting(query, input) : query.OrderBy(sortInput.Sorting); } //No sorting return query; } /// /// 默认自定义排序 /// /// /// /// /// protected virtual IQueryable SelfSorting(IQueryable query, IVzPagedRequestDto input) { return query; } /// /// 分页 /// /// The query. /// The input. protected virtual IQueryable ApplyPaging(IQueryable query, IVzPagedRequestDto input) { return _ApplyPaging(query, input); } /// /// 分页 /// /// The query. /// The input. protected IQueryable _ApplyPaging(IQueryable query, IVzPagedRequestDto input) { //Try to use paging if available if (input is IPagedResultRequest pagedInput) { return query.PageBy(pagedInput); } //Try to limit query result if available if (input is ILimitedResultRequest limitedInput) { return query.Take(limitedInput.MaxResultCount); } //No paging return query; } protected virtual void CheckErrors(string error) { throw new UserFriendlyException(error); } /// /// 抛出错误 /// /// /// 是否要本地化 protected virtual void ThrowError(string err, bool isLocalization = true) { CheckErrors(isLocalization ? L(err) : err); } protected virtual void CheckErrors(IdentityResult identityResult) { identityResult.CheckErrors(LocalizationManager); } }