bugfix: linq查询报错&&用户筛选权限后的目录树

This commit is contained in:
2021-07-05 09:52:30 +08:00
parent 2e2800e43b
commit 9a97aba30b
5 changed files with 52 additions and 54 deletions

View File

@@ -17,12 +17,14 @@ namespace Ewide.Core.Service.Area
private readonly IRepository<SysAreaCode> _areaCodeRep;
private readonly IRepository<SysOrg> _sysOrgRep;
private readonly ISysCacheService _sysCacheService;
private readonly IUserManager _userManager;
public AreaCodeService(IRepository<SysAreaCode> AreaCodeRep, ISysCacheService sysCacheService, IRepository<SysOrg> sysOrgRep)
public AreaCodeService(IRepository<SysAreaCode> AreaCodeRep, ISysCacheService sysCacheService, IRepository<SysOrg> sysOrgRep, IUserManager userManager)
{
_areaCodeRep = AreaCodeRep;
_sysCacheService = sysCacheService;
_sysOrgRep = sysOrgRep;
_userManager = userManager;
}
/// <summary>
/// 添加一个区域
@@ -76,44 +78,6 @@ namespace Ewide.Core.Service.Area
}
return cachedAreaCodes.FirstOrDefault(a => a.Code == code);
}
/// <summary>
/// 获取区域目录树
/// </summary>
/// <returns></returns>
public async Task<List<AreaTreeNode>> GetAreaCodeTree(int? level, List<string> areaCodeList)
{
level = level.GetValueOrDefault(100);
var cachedAreaCodes = await _sysCacheService.GetAreaCode();
if (cachedAreaCodes == null || cachedAreaCodes.Count < 0)
{
cachedAreaCodes = await _areaCodeRep.DetachedEntities.ToListAsync();
#if DEBUG
#else
await _sysCacheService.SetAreaCode(cachedAreaCodes);
#endif
}
var query = cachedAreaCodes.Where(p => p.LevelType <= level);
var resAreaCode = new List<SysAreaCode>();
if (areaCodeList != null)
{
foreach (var code in areaCodeList)
{
var queryRes = query.Where(p => p.Code.StartsWith(code));
resAreaCode.AddRange(queryRes);
}
cachedAreaCodes = resAreaCode.Distinct().ToList();
}
return new TreeBuildUtil<AreaTreeNode>().DoTreeBuild(cachedAreaCodes.Select(u => new AreaTreeNode
{
Code = u.Code,
AdCode = u.AdCode,
ParentCode = u.ParentCode,
Name = u.Name,
LevelType = u.LevelType,
Note = u.Note
}).ToList());
}
public async Task<List<SysAreaCode>> GetAreaCodeWithChildren(string code)
{
@@ -183,5 +147,37 @@ namespace Ewide.Core.Service.Area
{
return await _sysOrgRep.DetachedEntities.Where(p => orgIdList.Contains(p.Id)).Select(p => p.AreaCode).Distinct().ToListAsync();
}
/// <summary>
/// 获取区域目录树
/// </summary>
/// <returns></returns>
public async Task<List<AreaTreeNode>> GetAreaCodeTree(int? level)
{
level = level.GetValueOrDefault(100);
var cachedAreaCodes = await _sysCacheService.GetAreaCode();
if (cachedAreaCodes == null || cachedAreaCodes.Count < 0)
{
cachedAreaCodes = await _areaCodeRep.DetachedEntities.ToListAsync();
#if DEBUG
#else
await _sysCacheService.SetAreaCode(cachedAreaCodes);
#endif
}
if (!_userManager.SuperAdmin)
{
var userAreaList = await _userManager.GetUserAllAreaList();
cachedAreaCodes = cachedAreaCodes.Where(a => userAreaList.Contains(a.Code)).ToList();
}
return new TreeBuildUtil<AreaTreeNode>().DoTreeBuild(cachedAreaCodes.Select(u => new AreaTreeNode
{
Code = u.Code,
AdCode = u.AdCode,
ParentCode = u.ParentCode,
Name = u.Name,
LevelType = u.LevelType,
Note = u.Note
}).ToList());
}
}
}

View File

@@ -16,7 +16,7 @@ namespace Ewide.Core.Service.Area
Task<SysAreaCode> GetAreaCode(string code);
Task<List<SysAreaCode>> GetAreaCodeWithChildren(string code);
Task<List<AreaTreeNode>> GetAreaCodeTree(int? level,List<string> areaCodeList);
Task<List<AreaTreeNode>> GetAreaCodeTree(int? level);
Task<dynamic> QueryAreaCodePageList([FromQuery] AreaCodeInput input);