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