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