/// <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; } }