using ZhonTai.Admin.Core.Dto; using ZhonTai.Admin.Services.Org.Input; using ZhonTai.Admin.Services.Org.Output; using System.Threading.Tasks; using ZhonTai.Admin.Domain.Org; using ZhonTai.Admin.Core.Consts; using ZhonTai.DynamicApi.Attributes; using ZhonTai.DynamicApi; using ZhonTai.Admin.Core.Repositories; using ZhonTai.Admin.Domain; using ZhonTai.Admin.Core.Attributes; namespace ZhonTai.Admin.Services.Org; /// /// 部门服务 /// [DynamicApi(Area = AdminConsts.AreaName)] public class OrgService : BaseService, IOrgService, IDynamicApi { private readonly IOrgRepository _orgRepository; private IRepositoryBase _roleOrgRepository => LazyGetRequiredService>(); public OrgService(IOrgRepository orgRepository) { _orgRepository = orgRepository; } /// /// 查询部门 /// /// /// public async Task GetAsync(long id) { var result = await _orgRepository.GetAsync(id); return ResultOutput.Ok(result); } /// /// 查询列表 /// /// /// public async Task GetListAsync(string key) { var data = await _orgRepository .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.Code.Contains(key)) .OrderBy(a => a.ParentId) .OrderBy(a => a.Sort) .ToListAsync(); return ResultOutput.Ok(data); } /// /// 新增 /// /// /// public async Task AddAsync(OrgAddInput input) { if (await _orgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name)) { return ResultOutput.NotOk($"此部门已存在"); } if (input.Code.NotNull() && await _orgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code)) { return ResultOutput.NotOk($"此部门编码已存在"); } var dictionary = Mapper.Map(input); var id = (await _orgRepository.InsertAsync(dictionary)).Id; return ResultOutput.Result(id > 0); } /// /// 修改 /// /// /// public async Task UpdateAsync(OrgUpdateInput input) { if (!(input?.Id > 0)) { return ResultOutput.NotOk(); } var entity = await _orgRepository.GetAsync(input.Id); if (!(entity?.Id > 0)) { return ResultOutput.NotOk("部门不存在"); } if (input.Id == input.ParentId) { return ResultOutput.NotOk("上级部门不能是本部门"); } if (await _orgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Name == input.Name)) { return ResultOutput.NotOk($"此部门已存在"); } if (input.Code.NotNull() && await _orgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Code == input.Code)) { return ResultOutput.NotOk($"此部门编码已存在"); } var childIdList = await _orgRepository.GetChildIdListAsync(input.Id); if (childIdList.Contains(input.ParentId)) { return ResultOutput.NotOk($"上级部门不能是下级部门"); } Mapper.Map(input, entity); await _orgRepository.UpdateAsync(entity); return ResultOutput.Ok(); } /// /// 彻底删除 /// /// /// [Transaction] public async Task DeleteAsync(long id) { //本部门下是否有员工 if(await _orgRepository.HasUser(id)) { return ResultOutput.NotOk($"当前部门有员工无法删除"); } var orgIdList = await _orgRepository.GetChildIdListAsync(id); //本部门的下级部门下是否有员工 if (await _orgRepository.HasUser(orgIdList)) { return ResultOutput.NotOk($"本部门的下级部门有员工无法删除"); } //删除部门角色 await _roleOrgRepository.DeleteAsync(a => orgIdList.Contains(a.OrgId)); //删除本部门和下级部门 await _orgRepository.DeleteAsync(a => orgIdList.Contains(a.Id)); return ResultOutput.Ok(); } /// /// 删除 /// /// /// [Transaction] public async Task SoftDeleteAsync(long id) { //本部门下是否有员工 if (await _orgRepository.HasUser(id)) { return ResultOutput.NotOk($"当前部门有员工无法删除"); } var orgIdList = await _orgRepository.GetChildIdListAsync(id); //本部门的下级部门下是否有员工 if (await _orgRepository.HasUser(orgIdList)) { return ResultOutput.NotOk($"本部门的下级部门有员工无法删除"); } //删除部门角色 await _roleOrgRepository.SoftDeleteAsync(a => orgIdList.Contains(a.OrgId)); //删除本部门和下级部门 await _orgRepository.SoftDeleteAsync(a => orgIdList.Contains(a.Id)); return ResultOutput.Ok(); } }