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
}