OrgController.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using Hotline.Permissions;
  2. using Hotline.Settings;
  3. using Hotline.Share.Dtos.Org;
  4. using Hotline.Share.Enums.Order;
  5. using MapsterMapper;
  6. using Microsoft.AspNetCore.Authorization;
  7. using Microsoft.AspNetCore.Mvc;
  8. using System.Threading.Channels;
  9. using XF.Domain.Exceptions;
  10. using XF.Utility.EnumExtensions;
  11. namespace Hotline.Api.Controllers
  12. {
  13. /// <summary>
  14. /// 组织架构相关接口
  15. /// </summary>
  16. public class OrgController : BaseController
  17. {
  18. private readonly ISystemOrganizeRepository _systemOrganizeRepository;
  19. private readonly ISystemDomainService _systemDomainService;
  20. private readonly ISystemAreaDomainService _areaDomainService;
  21. private readonly IMapper _mapper;
  22. public OrgController(
  23. ISystemOrganizeRepository systemOrganizeRepository,
  24. ISystemDomainService systemDomainService,
  25. ISystemAreaDomainService areaDomainService,
  26. IMapper mapper)
  27. {
  28. _systemOrganizeRepository = systemOrganizeRepository;
  29. _systemDomainService = systemDomainService;
  30. _areaDomainService = areaDomainService;
  31. _mapper = mapper;
  32. }
  33. /// <summary>
  34. /// 组织机构获取树形列表
  35. /// </summary>
  36. /// <returns></returns>
  37. [Permission(EPermission.GetOrgJson)]
  38. [HttpGet("getorgjson")]
  39. [AllowAnonymous]
  40. public async Task<IReadOnlyList<SystemOrganize>> GetOrgJson()
  41. {
  42. return await _systemOrganizeRepository.GetOrgJson();
  43. }
  44. ///// <summary>
  45. ///// 新增组织架构
  46. ///// </summary>
  47. ///// <param name="dto"></param>
  48. ///// <returns></returns>
  49. //[Permission(EPermission.AddOrg)]
  50. //[HttpPost("add-org")]
  51. //[Obsolete]
  52. //public async Task AddOrg([FromBody] AddOrgDto dto)
  53. //{
  54. // var org = _mapper.Map<SystemOrganize>(dto);
  55. // //验证名称是否重复
  56. // if (await _systemDomainService.IsNameRepeat(dto.Name, HttpContext.RequestAborted) > 0)
  57. // throw UserFriendlyException.SameMessage("组织名称重复");
  58. // if (await _systemDomainService.IsShrotNameRepeat(dto.ShortName, HttpContext.RequestAborted) > 0)
  59. // throw UserFriendlyException.SameMessage("组织简称重复");
  60. // //处理编码
  61. // org.Id = await _systemDomainService.GenerateNewOrgCodeAsync(dto.ParentId, HttpContext.RequestAborted);
  62. // org.InitOrgLevel();
  63. // await _systemOrganizeRepository.AddAsync(org, HttpContext.RequestAborted);
  64. //}
  65. /// <summary>
  66. /// 新增组织架构
  67. /// </summary>
  68. /// <param name="dto"></param>
  69. /// <returns></returns>
  70. [Permission(EPermission.AddOrg)]
  71. [HttpPost]
  72. public async Task Add([FromBody] AddOrgDto dto)
  73. {
  74. var exists = await _systemOrganizeRepository.AnyAsync(
  75. d => d.Name == dto.Name || d.ShortName == dto.ShortName, HttpContext.RequestAborted);
  76. if (exists)
  77. throw UserFriendlyException.SameMessage("名称或简称已存在");
  78. await _systemDomainService.AddOrgAsync(dto, HttpContext.RequestAborted);
  79. }
  80. ///// <summary>
  81. ///// 修改组织架构
  82. ///// </summary>
  83. ///// <param name="dto"></param>
  84. ///// <returns></returns>
  85. //[Permission(EPermission.UpdateOrg)]
  86. //[HttpPost("update-org")]
  87. //[Obsolete]
  88. //public async Task UpdateOrg([FromBody] UpdateOrgDto dto)
  89. //{
  90. // var org = await _systemOrganizeRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  91. // if (org is null)
  92. // throw UserFriendlyException.SameMessage("无效组织架构");
  93. // if (org.Id == dto.ParentId)
  94. // throw UserFriendlyException.SameMessage("父级不能为自己");
  95. // //验证名称是否重复
  96. // if (await _systemDomainService.IsNameRepeat(dto.Name, HttpContext.RequestAborted) > 1)
  97. // throw UserFriendlyException.SameMessage("组织名称重复");
  98. // if (await _systemDomainService.IsShrotNameRepeat(dto.ShortName, HttpContext.RequestAborted) > 1)
  99. // throw UserFriendlyException.SameMessage("组织简称重复");
  100. // _mapper.Map(dto, org);
  101. // await _systemOrganizeRepository.UpdateAsync(org, HttpContext.RequestAborted);
  102. //}
  103. /// <summary>
  104. /// 修改组织架构(不支持修改上级)
  105. /// </summary>
  106. /// <param name="dto"></param>
  107. /// <returns></returns>
  108. [Permission(EPermission.UpdateOrg)]
  109. [HttpPut]
  110. public async Task Update([FromBody] UpdateOrgDto dto)
  111. {
  112. var org = await _systemOrganizeRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  113. if (org is null)
  114. throw UserFriendlyException.SameMessage("无效组织架构");
  115. if (org.Id == dto.ParentId)
  116. throw UserFriendlyException.SameMessage("父级不能为自己");
  117. var exists = await _systemOrganizeRepository.AnyAsync(
  118. d => d.Id != dto.Id &&
  119. (d.Name == dto.Name || d.ShortName == dto.ShortName), HttpContext.RequestAborted);
  120. if (exists)
  121. throw UserFriendlyException.SameMessage("名称或简称已存在");
  122. _mapper.Map(dto, org);
  123. await _systemOrganizeRepository.UpdateAsync(org, HttpContext.RequestAborted);
  124. }
  125. /// <summary>
  126. /// 获取组织
  127. /// </summary>
  128. /// <param name="id"></param>
  129. /// <returns></returns>
  130. [HttpGet("getorg/{id}")]
  131. public async Task<SystemOrganize> GetOrg(string id)
  132. {
  133. var org = await _systemOrganizeRepository.GetAsync(id, HttpContext.RequestAborted);
  134. if (org is null)
  135. throw UserFriendlyException.SameMessage("无效组织架构");
  136. return org;
  137. }
  138. /// <summary>
  139. /// 获取可用组织架构树形
  140. /// </summary>
  141. /// <returns></returns>
  142. [HttpGet("getcanuseorg")]
  143. public async Task<IReadOnlyList<SystemOrganize>> GetCanUseOrg()
  144. {
  145. return await _systemOrganizeRepository.GetCanUseOrg();
  146. }
  147. /// <summary>
  148. /// 新增页面基础数据
  149. /// </summary>
  150. /// <returns></returns>
  151. [HttpGet("base-data-add")]
  152. [Obsolete]
  153. public async Task<object> BaseDataAdd()
  154. {
  155. var rep = new
  156. {
  157. OrgType = EnumExts.GetDescriptions<EOrgType>()
  158. };
  159. return rep;
  160. }
  161. /// <summary>
  162. /// 部门页面基础数据
  163. /// </summary>
  164. /// <returns></returns>
  165. [HttpGet("base-data")]
  166. public async Task<dynamic> BaseData() =>
  167. new
  168. {
  169. OrgTypeOptions = EnumExts.GetDescriptions<EOrgType>(),
  170. Areas = await _areaDomainService.GetAreaTree()
  171. };
  172. }
  173. }