using Abp.Application.Navigation; using Abp.Application.Services.Dto; using Abp.Auditing; using Abp.Authorization; using Abp.Domain.Repositories; using Abp.Linq.Extensions; using Abp.Runtime.Caching; using Abp.Runtime.Session; using Microsoft.EntityFrameworkCore; using System.Linq.Expressions; using VberZero.AppService.Base; using VberZero.AppService.Base.Dto; using VberZero.AppService.Helps.Dto; using VberZero.AppService.Query.Dto; using VberZero.AppService.Users.Dto; using VberZero.BaseSystem; using VberZero.BaseSystem.Roles; using VberZero.BaseSystem.Users; using VberZero.DomainService.AutoCompletes; using VberZero.Session; using VberZero.Tools.StringModel; using static System.String; namespace VberZero.AppService.Query; /// /// 公共查询 /// [AbpAuthorize] [DisableAuditing] public class VzQueryAppServiceBase : VzAppServiceBase, IVzQueryAppService { #region 仓储 public VzQueryAppServiceBase( IRepository userRepository, ICacheManager cacheManager, IRepository funRepository, IRepository helpRepository, IUserNavigationManager userNavigationManager, IRepository logRepository, IRepository roleRepository) { UserRepository = userRepository; FunRepository = funRepository; HelpRepository = helpRepository; UserNavigationManager = userNavigationManager; LogRepository = logRepository; RoleRepository = roleRepository; AcQuery = NullAutoCompleteQueryManager.Instance; CacheManager = cacheManager; } protected IRepository UserRepository { get; } protected IRepository RoleRepository { get; } protected IRepository FunRepository { get; } protected IRepository HelpRepository { get; } protected IRepository LogRepository { get; } protected IUserNavigationManager UserNavigationManager { get; } public IAutoCompleteQueryManager AcQuery { get; set; } #endregion 仓储 #region SELECT #region SYSTEM [DisableAuditing] public async Task GetUserSelectStr() { var list = await UserRepository.GetAllListAsync(); var str = ""; foreach (var l in list) str += $""; return str; } [DisableAuditing] public async Task GetUserTypeSelectStr(int type = 0) { var str = ""; if (type == 0) { str += await StatesManager.GetSelectStrAsync("UserRole.UserRoleType"); } else { var userTypeStr = AbpSession.GetUserType().ToInt() + ""; var isAdmin = AbpSession.GetUserName() == User.AdminUserName || AbpSession.GetUserName() == User.SystemUserName; str += await StatesManager.GetSelectStrAsync("UserRole.UserRoleType", a => isAdmin || Compare(a.CodeValue, userTypeStr, StringComparison.Ordinal) > 0); } return str; } [DisableAuditing] public async Task GetRoleTypeSelectStr(int type = 0) { var str = ""; if (type == 0) { str += await StatesManager.GetSelectStrAsync("UserRole.UserRoleType"); } else { var userTypeStr = AbpSession.GetUserType().ToInt() + ""; var isAdmin = AbpSession.GetUserName() == User.AdminUserName || AbpSession.GetUserName() == User.SystemUserName; str += await StatesManager.GetSelectStrAsync("UserRole.UserRoleType", a => isAdmin || Compare(a.CodeValue, userTypeStr, StringComparison.Ordinal) > 0); } return str; } [DisableAuditing] public async Task GetGenderTypeSelectStr() { var str = ""; str += await StatesManager.GetSelectStrAsync("Gender.Type"); return str; } [DisableAuditing] public async Task GetGenderTypeArrayStr() { List strings = new List(); var list = await StatesManager.GetStateListAsync("Gender.Type"); foreach (var s in list) { strings.Add(s.DisplayValue); strings.Add(s.CodeValue); } return strings.ToArray(); } [DisableAuditing] public async Task GetAccountTypeSelectStr() { var str = ""; str += await StatesManager.GetSelectStrAsync("Account.AccountType"); return str; } [DisableAuditing] public async Task GetActiveStateSelectStr() { var str = ""; str += await StatesManager.GetSelectStrAsync("Active.Status"); return str; } [DisableAuditing] public async Task GetActiveStateArrayStr() { List strings = new List(); var list = await StatesManager.GetStateListAsync("Active.Status"); foreach (var s in list) { strings.Add(s.DisplayValue); strings.Add(s.CodeValue); } return strings.ToArray(); } [DisableAuditing] public async Task GetFunctionTypeSelectStr() { var str = ""; str += await StatesManager.GetSelectStrAsync("Function.FunctionType"); return str; } [DisableAuditing] public async Task GetCalendarNotifyTypeSelectStr() { var str = ""; str += await StatesManager.GetSelectStrAsync("Calendar.NotifyType"); return str; } [DisableAuditing] public async Task GetWorkflowAuditStatusSelectStr() { var str = ""; str += await StatesManager.GetSelectStrAsync("WorkflowAudit.Status"); return str; } [DisableAuditing] public async Task GetWorkflowStatusSelectStr() { var str = ""; str += await StatesManager.GetSelectStrAsync("Workflow.Status"); return str; } /// /// 查询是页面的功能菜单 select /// /// [DisableAuditing] public Task QueryFunctionPageSelectStr() { return QueryFunctionSelect(VzDefinition.FunctionType.Catalog, VzDefinition.FunctionType.Menu); } private async Task QueryFunctionSelect(params VzDefinition.FunctionType[] types) { var list = await FunRepository.GetAllListAsync(a => types.Length == 0 || types.Contains(a.FunctionType)); var str = ""; //""; //var topParentPerm = list.FirstOrDefault(a => a.ParentNo == null)?.PermissionName ?? ""; foreach (var l in list) { if (l.ParentNo == null) { str += $""; continue; } if (!await PermissionChecker.IsGrantedAsync(l.PermissionName)) continue; str += $""; } return str; } [DisableAuditing] public async Task GetHelpTypeSelectStr() { var str = ""; var userTypeStr = AbpSession.GetUserType().ToStr(); str += await StatesManager.GetSelectStrAsync("SysHelp.HelpType", a => Compare(a.CodeValue, userTypeStr, StringComparison.Ordinal) >= 0); return str; } /// /// 日志服务名称 /// /// [DisableAuditing] public string GetLogServiceSelectStr() { var options = ""; var list = LogRepository.GetAll().Where(a => a.LogType != 0).GroupBy(a => a.ServiceName).Select(a => a.Key); foreach (var l in list) { options += $""; } return options; } /// /// 日志服务方法名称 /// /// /// [DisableAuditing] public string GetLogMethodSelectStr(QueryMethodName input) { string options = ""; var list = LogRepository.GetAll().Where(a => a.LogType != 0 && (string.IsNullOrEmpty(input.ServiceName) || a.ServiceName == input.ServiceName)).GroupBy(a => a.MethodName).Select(a => a.Key); foreach (var l in list) { options += $""; } return options; } //[DisableAuditing] //public async Task GetSelectTreeStr() //{ // var list = await Repository.GetAllListAsync(); // string str = "";//""; // var topParentNo = list.FirstOrDefault(a => a.ParentNo == null)?.Id ?? ""; // foreach (var l in list) // { // if (l.ParentNo == null) // { // str += $""; // continue; // } // str += $""; // } // return str; //} #endregion SYSTEM #endregion SELECT #region AutoCompleteQuery /// /// 查询自动完成的搜索记录 /// /// /// [DisableAuditing] public virtual async Task> AcInfos(PageAcQueryDto input) { var query = await AcQuery.PageItems(input.CodeKey, input.NameKey, input.Skip, input.Take); var list = query.Items.Select(a => new AcQueryDto(a)).ToList(); return new PagedResultDto(query.TotalCount, list); } public virtual async Task AcInfo(CreateAcQueryDto input) { var info = await AcQuery.QueryItem(input.CodeKey, input.ValueKey); return new AcQueryDto(info ?? new SysAutoCompleteQuery()); } /// /// 增加自动完成搜索记录 /// /// /// [DisableAuditing] public virtual async Task AddAcInfo(CreateAcQueryDto input) { await AcQuery.InsertOrUpdate(input.CodeKey, input.ValueKey, input.NameKey); } /// /// 查询未绑定的账号 /// /// /// public virtual async Task> UnBindUserAcInfos(UserAcQueryDto input) { var query = UserRepository.GetAll().Where(a => a.IsActive && a.AccountType == input.AccountType && IsNullOrEmpty(a.AccountNo)); var totalCount = await query.CountAsync(); var list = await query.Select(a => new AcQueryDto { NameKey = a.Name, ValueKey = a.UserName }).ToListAsync(); return new PagedResultDto(totalCount, list); } #endregion AutoCompleteQuery #region User /// /// 查询用户信息 /// /// /// [DisableAuditing] public virtual async Task> QueryUsers(VzPagedRequestDto input) { var query = UserRepository.GetAll().Where(a => a.IsActive); query = ApplyFilter(query, input); var totalCount = await query.CountAsync(); query = query.OrderBy(a => a.Id); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await query.ToListAsync(); var dtoList = new PagedResultDto(totalCount, ObjectMapper.Map>(entities)); return dtoList; } /// /// 查询用户 /// /// /// public virtual async Task QueryUserDtoById(long id) { var user = await CacheManager.GetCache(VzConsts.CacheSystemUser) .GetAsync($"{id}", () => UserRepository.FirstOrDefaultAsync(a => a.Id == id)); return ObjectMapper.Map(user); } /// /// 查询用户 /// /// /// public virtual async Task QueryUserDtoByUserName(string userName) { var user = await CacheManager.GetCache(VzConsts.CacheSystemUser) .GetAsync($"{userName}", () => UserRepository.FirstOrDefaultAsync(a => a.UserName == userName)); return ObjectMapper.Map(user); } /// /// 为工作流获取审核用户 /// /// /// /// public virtual async Task> GetWfUser(string keyword, int take) { var query = UserRepository.GetAll().Where(a => a.IsActive && string.IsNullOrEmpty(keyword) || a.UserName.Contains(keyword) || a.Name.Contains(keyword) || a.Surname.Contains(keyword)); query = query.OrderBy(a => a.CreationTime).Skip(0).Take(take); var users = await query.ToListAsync(); var dic = new Dictionary(); foreach (var user in users) { dic.Add(user.Id + "", user.Surname); } return dic; } /// /// 为工作流获取审核角色 /// /// /// /// public virtual async Task> GetWfRole(string keyword, int take) { var query = RoleRepository.GetAll().Where(a => a.Name.Contains(keyword) || a.DisplayName.Contains(keyword)); query = query.OrderBy(a => a.CreationTime).Skip(0).Take(take); var roles = await query.ToListAsync(); var dic = new Dictionary(); foreach (var role in roles) { dic.Add(role.Name + "", role.DisplayName); } return dic; } #endregion User #region Help /// /// 根据页面权限(permName)查询帮助信息 /// /// /// public virtual async Task> QueryHelpByPerm(string id) { var helps = await QueryHelps(a => a.Function.PermissionName == id); return helps; } /// /// 查询页面的帮助信息详情 /// /// /// public virtual async Task QueryHelpDto(int id) { return await CacheManager.GetCache(VzConsts.CacheSysHelp).GetAsync(id, async () => { var help = await HelpRepository.FirstOrDefaultAsync(a => a.Id == id); return ObjectMapper.Map(help); }); } /// /// 按照菜单查询页面帮助信息 /// /// public virtual async Task> QueryHelpByMenu() { var helps = await QueryHelps(); var menu = await UserNavigationManager.GetMenuAsync("MainMenu", AbpSession.ToUserIdentifier()); var list = new List(); foreach (var item in menu.Items) BuildMenuHelps(list, item, helps); return list; } private async Task> QueryHelps(Expression> exp = null) { var userType = (VzDefinition.HelpType)AbpSession.GetUserType(); var helps = await HelpRepository.GetAllIncluding(a => a.Function).Where(a => a.HelpType >= userType).WhereIf(exp != null, exp) .OrderBy(a => a.Sequence).Select(a => new SysHelpDto { Id = a.Id, HelpType = a.HelpType, Title = a.Title, KeyWords = a.KeyWords, FunctionNo = a.Id, FunctionDisplayName = a.Function != null ? a.Function.DisplayName : "", PermissionName = a.Function != null ? a.Function.PermissionName : "", Sequence = a.Sequence }).ToListAsync(); return helps; } private void BuildMenuHelps(List list, UserMenuItem menu, List helps) { var helpDtos = helps.Where(a => a.PermissionName == menu.Name).OrderBy(a => a.Sequence).ToList(); if (helpDtos.Any()) list.Add(new MenuHelpDto { Index = list.Count + 1, MenuName = menu.DisplayName, Helps = helpDtos }); foreach (var item in menu.Items) BuildMenuHelps(list, item, helps); } #endregion Help }