using SqlSugar;
using Wood.Cache;
using Wood.Data.Repository;
using Wood.Entity;
using Wood.Entity.SystemManage;
using Wood.Service.BaseService;
using Wood.Service.SystemManage.Dto;
using Wood.Service.SystemManage.Manager;
using Wood.Service.SystemManage.Param;
using Wood.Util;
using Wood.Util.JwtAuthorization;
namespace Wood.Service.SystemManage
{
///
/// 机构管理
///
public class OrgService : ApiCRUDService
{
private readonly OrgManager _orgManager;
private readonly SqlSugarRepository _tenantRepository;
public OrgService(OrgManager orgManager, SqlSugarRepository tenantRepository):base(orgManager.AsRepository())
{
_orgManager = orgManager;
_tenantRepository = tenantRepository;
}
public async Task> TreeList(OrgTreeListParam param)
{
var user = this.UserInfo();
long rootId = user!.OrgId;
//超级管理员可以看到所有机构
if (user.IsSuperAdmin)
rootId = 0;
//租户管理员可以看到当下租户的所有机构
else if (user.IsTenantAdmin)
{
var tenant = await _tenantRepository.GetByIdAsync(user.TenantId);
rootId = tenant.OrgId;
}
var query = _orgManager.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(param.Name), it => it.OrgName.Contains(param.Name!) || it.FormCode.Contains(param.Name!))
.Select(it => new OrgTreeDto()
{
Id = it.Id.SelectAll()
});
if (param.HasCondition())
return await query.ToListAsync();
else
return await query.ToTreeAsync(it => it.Children, it => it.ParentId, 0);
}
///
/// 获取所有机构
/// 用于El树形结构
///
/// 用于El树形结构
public async Task> ElTreeList(OrgTreeListParam param)
{
var user = this.UserInfo();
long rootId = user!.OrgId;
//超级管理员可以看到所有机构
if (user.IsSuperAdmin)
rootId = 0;
//租户管理员可以看到当下租户的所有机构
else if (user.IsTenantAdmin)
{
var tenant = await _tenantRepository.GetByIdAsync(user.TenantId);
rootId = tenant.OrgId;
}
var query = _orgManager.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(param.Name), it => it.OrgName.Contains(param.Name!) || it.FormCode.Contains(param.Name!))
.Select(it => new ElTreeDto()
{
Id = it.Id,
Label = it.OrgName,
ParentId = it.ParentId,
Disabled = (it.Status == 0)
});
if (param.HasCondition())
return await query.ToListAsync();
else
return await query.ToTreeAsync(it => it.Children, it => it.ParentId, 0);
}
public async Task GetMaxSort()
{
var result = await this._orgManager.AsQueryable().MaxAsync(it => it.Sort);
return result + 10;
}
[UnitOfWork]
public override async Task Delete(BaseIdListParam param)
{
if (param.Ids.Any())
{
foreach (var item in param.Ids)
{
var childs = await _orgManager.AsQueryable().ToChildListAsync(it => it.ParentId, item);
var childIds = childs.Select(it => it.Id).ToList();
await _orgManager.AsRepository().FakeDeleteAsync(it => childIds.Contains(it.Id));
}
}
}
}
}