/// <summary> /// 組織部門 /// </summary> public class ArchvieOrganizationAppService : RunGoAppServiceBase<Model.Archvie_Organization, DetailArchvieOrganizationDto, string, PagedArchvieOrganizationDto, CreateArchvieOrganizationDto, UpdateArchvieOrganizationDto>, IArchvieOrganizationAppService { private readonly TenantIdConfig _tenantIdConfig; private IRepository<Model.Archvie_Organization, string> _repository; public ArchvieOrganizationAppService(TenantIdConfig tenantIdConfig, IRepository<Model.Archvie_Organization, string> repository) : base(repository) { _tenantIdConfig = tenantIdConfig; _repository = repository; } public List<OrganizeTree> Main = new List<OrganizeTree>(); #region /// <summary> /// 獲取組織部門結構樹 /// </summary> /// <returns></returns> public Task<List<OrganizeTree>> GetOrganizationTree() { try { List<OrganizeTree> children = new List<OrganizeTree>(); List<OrganizeTree>allMenu = _repository.GetAllList().Select(e => new OrganizeTree { Id = e.Id, Name = e.Name, SuperiorRowGuid = e.SuperiorRowGuid ,ChildItems=children}).ToList(); //得到數據 Main.Add(allMenu.Where(x => x.SuperiorRowGuid == null || x.SuperiorRowGuid == "").FirstOrDefault());//根節點 //遞歸 AddMenu(allMenu, allMenu.Where(x => x.SuperiorRowGuid == null || x.SuperiorRowGuid == "").FirstOrDefault()); //結果樹形結構 List<OrganizeTree> treeMenu = Main; return Task.FromResult(treeMenu); } catch (Exception e) { throw new UserFriendlyException(e.Message); } } #endregion //父子級遞歸 public void AddMenu(List<OrganizeTree> all, OrganizeTree curItem) { List<OrganizeTree> childItems = all.Where(ee => ee.SuperiorRowGuid == curItem.Id).ToList(); //得到子節點 curItem.ChildItems = childItems; //將子節點加入 //遍歷子節點,進行遞歸,尋找子節點的子節點 foreach (var subItem in childItems) { AddMenu(all, subItem); } } } public class OrganizeTree { /// <summary> /// 部門唯一標識 /// </summary> public string Id { get; set; } /// <summary> /// 父級部門名稱 /// </summary> [StringLength(50)] public string Name { get; set; } /// <summary> /// 上級部門唯一標識 /// </summary> [StringLength(50)] public string SuperiorRowGuid { get; set; } /// <summary> /// 子部門 /// </summary> public List<OrganizeTree> ChildItems { get; set; } }