using Hotline.Permissions; using Hotline.Settings; using Hotline.Share.Dtos.Org; using Hotline.Share.Enums.Order; using MapsterMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Threading.Channels; using XF.Domain.Authentications; using XF.Domain.Exceptions; using XF.Utility.EnumExtensions; namespace Hotline.Api.Controllers { /// /// 组织架构相关接口 /// public class OrgController : BaseController { private readonly ISystemOrganizeRepository _systemOrganizeRepository; private readonly ISystemDomainService _systemDomainService; private readonly ISystemAreaDomainService _areaDomainService; private readonly IMapper _mapper; private readonly ISessionContext _sessionContext; public OrgController( ISystemOrganizeRepository systemOrganizeRepository, ISystemDomainService systemDomainService, ISystemAreaDomainService areaDomainService, IMapper mapper, ISessionContext sessionContext) { _systemOrganizeRepository = systemOrganizeRepository; _systemDomainService = systemDomainService; _areaDomainService = areaDomainService; _mapper = mapper; _sessionContext = sessionContext; } /// /// 组织机构获取树形列表 /// /// [Permission(EPermission.GetOrgJson)] [HttpGet("getorgjson")] [AllowAnonymous] public async Task> GetOrgJson() { return await _systemOrganizeRepository.GetOrgJson(); } [Permission(EPermission.GetOrgJson)] [HttpGet("getorgjsonforuser")] [AllowAnonymous] public async Task> GetOrgJsonForUser() { if (_sessionContext.OrgIsCenter) { return await _systemOrganizeRepository.GetOrgJson(); } else { return await _systemOrganizeRepository.GetOrgJsonForUser(_sessionContext.RequiredOrgId); } } ///// ///// 新增组织架构 ///// ///// ///// //[Permission(EPermission.AddOrg)] //[HttpPost("add-org")] //[Obsolete] //public async Task AddOrg([FromBody] AddOrgDto dto) //{ // var org = _mapper.Map(dto); // //验证名称是否重复 // if (await _systemDomainService.IsNameRepeat(dto.Name, HttpContext.RequestAborted) > 0) // throw UserFriendlyException.SameMessage("组织名称重复"); // if (await _systemDomainService.IsShrotNameRepeat(dto.ShortName, HttpContext.RequestAborted) > 0) // throw UserFriendlyException.SameMessage("组织简称重复"); // //处理编码 // org.Id = await _systemDomainService.GenerateNewOrgCodeAsync(dto.ParentId, HttpContext.RequestAborted); // org.InitOrgLevel(); // await _systemOrganizeRepository.AddAsync(org, HttpContext.RequestAborted); //} /// /// 新增组织架构 /// /// /// [Permission(EPermission.AddOrg)] [HttpPost] public async Task Add([FromBody] AddOrgDto dto) { var exists = await _systemOrganizeRepository.AnyAsync( d => d.Name == dto.Name || d.ShortName == dto.ShortName, HttpContext.RequestAborted); if (exists) throw UserFriendlyException.SameMessage("名称或简称已存在"); await _systemDomainService.AddOrgAsync(dto, HttpContext.RequestAborted); } ///// ///// 修改组织架构 ///// ///// ///// //[Permission(EPermission.UpdateOrg)] //[HttpPost("update-org")] //[Obsolete] //public async Task UpdateOrg([FromBody] UpdateOrgDto dto) //{ // var org = await _systemOrganizeRepository.GetAsync(dto.Id, HttpContext.RequestAborted); // if (org is null) // throw UserFriendlyException.SameMessage("无效组织架构"); // if (org.Id == dto.ParentId) // throw UserFriendlyException.SameMessage("父级不能为自己"); // //验证名称是否重复 // if (await _systemDomainService.IsNameRepeat(dto.Name, HttpContext.RequestAborted) > 1) // throw UserFriendlyException.SameMessage("组织名称重复"); // if (await _systemDomainService.IsShrotNameRepeat(dto.ShortName, HttpContext.RequestAborted) > 1) // throw UserFriendlyException.SameMessage("组织简称重复"); // _mapper.Map(dto, org); // await _systemOrganizeRepository.UpdateAsync(org, HttpContext.RequestAborted); //} /// /// 修改组织架构(不支持修改上级) /// /// /// [Permission(EPermission.UpdateOrg)] [HttpPut] public async Task Update([FromBody] UpdateOrgDto dto) { var org = await _systemOrganizeRepository.GetAsync(dto.Id, HttpContext.RequestAborted); if (org is null) throw UserFriendlyException.SameMessage("无效组织架构"); if (org.Id == dto.ParentId) throw UserFriendlyException.SameMessage("父级不能为自己"); var exists = await _systemOrganizeRepository.AnyAsync( d => d.Id != dto.Id && (d.Name == dto.Name || d.ShortName == dto.ShortName), HttpContext.RequestAborted); if (exists) throw UserFriendlyException.SameMessage("名称或简称已存在"); _mapper.Map(dto, org); await _systemOrganizeRepository.UpdateAsync(org, HttpContext.RequestAborted); } /// /// 获取组织 /// /// /// [HttpGet("getorg/{id}")] public async Task GetOrg(string id) { var org = await _systemOrganizeRepository.GetAsync(id, HttpContext.RequestAborted); if (org is null) throw UserFriendlyException.SameMessage("无效组织架构"); return org; } /// /// 获取可用组织架构树形 /// /// [HttpGet("getcanuseorg")] public async Task> GetCanUseOrg() { return await _systemOrganizeRepository.GetCanUseOrg(); } /// /// 获取可用组织架构树形(用户管理) /// /// [HttpGet("getcanuseorgforuser")] public async Task> GetCanUseOrgForUser() { if (_sessionContext.OrgIsCenter) { return await _systemOrganizeRepository.GetCanUseOrg(); } else { return await _systemOrganizeRepository.GetCanUseOrgByOrgCode(_sessionContext.RequiredOrgId); } } /// /// 新增页面基础数据 /// /// [HttpGet("base-data-add")] [Obsolete] public async Task BaseDataAdd() { var rep = new { OrgType = EnumExts.GetDescriptions() }; return rep; } /// /// 部门页面基础数据 /// /// [HttpGet("base-data")] public async Task BaseData() => new { OrgTypeOptions = EnumExts.GetDescriptions(), Areas = await _areaDomainService.GetAreaTree() }; } }