bugfix: linq查询报错&&用户筛选权限后的目录树
This commit is contained in:
@@ -85,12 +85,7 @@ namespace Ewide.Core.Controller
|
||||
[HttpGet("/sysArea/tree")]
|
||||
public async Task<List<AreaTreeNode>> GetAreaCodeTree([FromQuery]int? level)
|
||||
{
|
||||
List<string> areaCodeList = null;
|
||||
if (!_userManager.SuperAdmin)
|
||||
{
|
||||
areaCodeList = await _userManager.GetUserAllAreaList();
|
||||
}
|
||||
return await _areaCodeService.GetAreaCodeTree(level, areaCodeList);
|
||||
return await _areaCodeService.GetAreaCodeTree(level);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3149,12 +3149,6 @@
|
||||
<param name="code">区域代码</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Ewide.Core.Service.Area.AreaCodeService.GetAreaCodeTree(System.Nullable{System.Int32},System.Collections.Generic.List{System.String})">
|
||||
<summary>
|
||||
获取区域目录树
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Ewide.Core.Service.Area.AreaCodeService.UpdateAreaCode(Ewide.Core.Service.Area.Dto.AreaCodeInput)">
|
||||
<summary>
|
||||
更新区域信息
|
||||
@@ -3162,6 +3156,12 @@
|
||||
<param name="input"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Ewide.Core.Service.Area.AreaCodeService.GetAreaCodeTree(System.Nullable{System.Int32})">
|
||||
<summary>
|
||||
获取区域目录树
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Ewide.Core.Service.AuthService">
|
||||
<summary>
|
||||
登录授权相关服务
|
||||
|
||||
@@ -345,9 +345,16 @@ namespace Ewide.Core
|
||||
//本部门及以下 或者 本部门区域及以下 树结构显示本级和以下所有区域
|
||||
var extraUserArea = await GetUserExtraAreaScopeList(userId);
|
||||
var roles = await _sysUserRoleRep.DetachedEntities.Include(ur => ur.SysRole).Where(ur => ur.SysUserId == userId).Select(ur => ur.SysRole).ToListAsync();
|
||||
var extraRoleArea = await _sysRoleAreaRep.DetachedEntities.Where(ra => roles.Where(r => r.DataScopeType == (int)DataScopeType.DEFINE).Select(r => r.Id).Contains(ra.SysRoleId)).Select(ra => ra.AreaCode).ToListAsync();
|
||||
var customAreaRole = roles.Where(r => r.DataScopeType == (int)DataScopeType.DEFINE).Select(r => r.Id);
|
||||
var extraRoleArea = await _sysRoleAreaRep.DetachedEntities.Where(ra => customAreaRole.Contains(ra.SysRoleId)).Select(ra => ra.AreaCode).ToListAsync();
|
||||
var roleTypeArea = await GetUserDataScopeTypeAreaList(orgAreaCode, roles.Select(r => r.DataScopeType).ToList());
|
||||
return extraRoleArea.Concat(extraUserArea).Concat(roleTypeArea).Distinct().ToList();
|
||||
var extraArea = await GetUserExtraAreaList(extraRoleArea.Concat(extraUserArea).Distinct().ToList());
|
||||
return extraArea.Concat(roleTypeArea).Distinct().ToList();
|
||||
}
|
||||
private async Task<List<string>> GetUserExtraAreaList(List<string> extraAreaCode)
|
||||
{
|
||||
var cachedAreaCode = await GetCachedAreaCode();
|
||||
return cachedAreaCode.Select(a => a.Code).Where(a => extraAreaCode.Any(e => a.StartsWith(e))).ToList();
|
||||
}
|
||||
private async Task<List<string>> GetUserDataScopeTypeAreaList(string orgAreaCode, List<int> roleDataTypeList)
|
||||
{
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user