You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

52 lines
1.4 KiB

using SqlSugar;
using Wood.Data.Repository;
using Wood.Entity;
using Wood.Entity.SystemManage;
namespace Wood.Service.SystemManage.Manager
{
/// <summary>
/// orgManager
/// </summary>
public class OrgManager : ApiManager<OrgEntity>, ITransient
{
/// <summary>
/// orgManager
/// </summary>
/// <param name="repository"></param>
public OrgManager(SqlSugarRepository<OrgEntity> repository) : base(repository)
{
}
/// <summary>
/// 获取所有的子id 包括自己
/// </summary>
/// <param name="orgId">父级id</param>
/// <returns></returns>
public async Task<List<long>> GetChildrenIds(long orgId)
{
return (await AsQueryable().ToChildListAsync(it => it.ParentId, orgId)).Select(it => it.Id).ToList();
}
/// <summary>
/// 根据名称获取机构部门
/// </summary>
/// <param name="path">路径 以/分割</param>
/// <returns></returns>
public async Task<List<OrgEntity>> GetOrgsByPath(string path)
{
string[] paths = path.Split('/');
List<OrgEntity>? es =await AsRepository().GetListAsync(it => paths.Contains( it.OrgName));
if (paths.Length == 1)
return es;
else
{
IEnumerable<OrgEntity> parent = es.Where(it => it.OrgName == paths[0]);
for (int i = 1; i < paths.Length; i++)
parent= es.Where(it=>it.OrgName == paths[i]&&parent.Any(p=>p.Id==it.ParentId));
return parent.ToList();
}
}
}
}