diff --git a/Api/Ewide.Core/Controller/AreaCodeController.cs b/Api/Ewide.Core/Controller/AreaCodeController.cs index 57908a7..62e7a34 100644 --- a/Api/Ewide.Core/Controller/AreaCodeController.cs +++ b/Api/Ewide.Core/Controller/AreaCodeController.cs @@ -85,12 +85,7 @@ namespace Ewide.Core.Controller [HttpGet("/sysArea/tree")] public async Task> GetAreaCodeTree([FromQuery]int? level) { - List areaCodeList = null; - if (!_userManager.SuperAdmin) - { - areaCodeList = await _userManager.GetUserAllAreaList(); - } - return await _areaCodeService.GetAreaCodeTree(level, areaCodeList); + return await _areaCodeService.GetAreaCodeTree(level); } } } diff --git a/Api/Ewide.Core/Ewide.Core.xml b/Api/Ewide.Core/Ewide.Core.xml index 8e83b57..b4ae556 100644 --- a/Api/Ewide.Core/Ewide.Core.xml +++ b/Api/Ewide.Core/Ewide.Core.xml @@ -3149,12 +3149,6 @@ 区域代码 - - - 获取区域目录树 - - - 更新区域信息 @@ -3162,6 +3156,12 @@ + + + 获取区域目录树 + + + 登录授权相关服务 diff --git a/Api/Ewide.Core/Manager/UserManager.cs b/Api/Ewide.Core/Manager/UserManager.cs index a2ec008..4a68b03 100644 --- a/Api/Ewide.Core/Manager/UserManager.cs +++ b/Api/Ewide.Core/Manager/UserManager.cs @@ -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> GetUserExtraAreaList(List extraAreaCode) + { + var cachedAreaCode = await GetCachedAreaCode(); + return cachedAreaCode.Select(a => a.Code).Where(a => extraAreaCode.Any(e => a.StartsWith(e))).ToList(); } private async Task> GetUserDataScopeTypeAreaList(string orgAreaCode, List roleDataTypeList) { diff --git a/Api/Ewide.Core/Service/Area/AreaCodeService.cs b/Api/Ewide.Core/Service/Area/AreaCodeService.cs index 337431e..7c0a9e8 100644 --- a/Api/Ewide.Core/Service/Area/AreaCodeService.cs +++ b/Api/Ewide.Core/Service/Area/AreaCodeService.cs @@ -17,12 +17,14 @@ namespace Ewide.Core.Service.Area private readonly IRepository _areaCodeRep; private readonly IRepository _sysOrgRep; private readonly ISysCacheService _sysCacheService; + private readonly IUserManager _userManager; - public AreaCodeService(IRepository AreaCodeRep, ISysCacheService sysCacheService, IRepository sysOrgRep) + public AreaCodeService(IRepository AreaCodeRep, ISysCacheService sysCacheService, IRepository sysOrgRep, IUserManager userManager) { _areaCodeRep = AreaCodeRep; _sysCacheService = sysCacheService; _sysOrgRep = sysOrgRep; + _userManager = userManager; } /// /// 添加一个区域 @@ -76,44 +78,6 @@ namespace Ewide.Core.Service.Area } return cachedAreaCodes.FirstOrDefault(a => a.Code == code); } - /// - /// 获取区域目录树 - /// - /// - public async Task> GetAreaCodeTree(int? level, List 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(); - 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().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> 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(); } + /// + /// 获取区域目录树 + /// + /// + public async Task> 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().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()); + } } } diff --git a/Api/Ewide.Core/Service/Area/IAreaCodeService.cs b/Api/Ewide.Core/Service/Area/IAreaCodeService.cs index f1dfb7e..997ab6a 100644 --- a/Api/Ewide.Core/Service/Area/IAreaCodeService.cs +++ b/Api/Ewide.Core/Service/Area/IAreaCodeService.cs @@ -16,7 +16,7 @@ namespace Ewide.Core.Service.Area Task GetAreaCode(string code); Task> GetAreaCodeWithChildren(string code); - Task> GetAreaCodeTree(int? level,List areaCodeList); + Task> GetAreaCodeTree(int? level); Task QueryAreaCodePageList([FromQuery] AreaCodeInput input);