AdoS8MasterDataController.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using Microsoft.AspNetCore.Http;
  2. using Admin.NET.Plugin.AiDOP.Const.S8;
  3. using Admin.NET.Plugin.AiDOP.Infrastructure;
  4. using Admin.NET.Plugin.AiDOP.Infrastructure.S8;
  5. using Admin.NET.Plugin.AiDOP.Service.S8;
  6. namespace Admin.NET.Plugin.AiDOP.Controllers.S8;
  7. /// <summary>
  8. /// S8 主数据下拉:优先复用 S0 已落库主数据语义(部门等),无则返回空列表,不把「下拉查询」误建成独立业务表。
  9. ///
  10. /// <para><b>S8-P0-3-MASTERDATA-TRUSTED-SCOPE-1</b>:本控制器原先是 KNOWN-ISSUES I-001 里
  11. /// 「6 个未接入可信作用域解析」之一。<c>GET /master-data/employees?factoryRefId=&lt;任意工厂&gt;</c>
  12. /// 实测可返回 500 条其它租户员工的工号与真实姓名,现已接入 <see cref="S8TrustedScopeResolver"/>。</para>
  13. ///
  14. /// <para><b>入参语义</b>:<c>factoryRefId</c> 已从所有 Action 签名移除;客户端继续携带也不产生授权效果。</para>
  15. /// </summary>
  16. [ApiController]
  17. [Route("api/aidop/s8/master-data")]
  18. [NonUnify]
  19. public class AdoS8MasterDataController : ControllerBase
  20. {
  21. private readonly S8MasterDataAdapter _svc;
  22. private readonly S8TrustedScopeResolver _scope;
  23. public AdoS8MasterDataController(S8MasterDataAdapter svc, S8TrustedScopeResolver scope)
  24. {
  25. _svc = svc;
  26. _scope = scope;
  27. }
  28. [HttpGet("departments")]
  29. [S8Permission(S8PermissionCatalog.ExceptionRead)]
  30. public async Task<IActionResult> DepartmentsAsync()
  31. {
  32. try { return Ok(await _svc.GetDepartmentsAsync(await _scope.ResolveAsync())); }
  33. catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); }
  34. }
  35. /// <summary>S8 人员选择器:当前租户的启用系统账号。</summary>
  36. [HttpGet("users")]
  37. [S8Permission(S8PermissionCatalog.ExceptionRead)]
  38. public async Task<IActionResult> UsersAsync([FromQuery] string? requiredAction = null)
  39. {
  40. try { return Ok(await _svc.GetOperatorUsersAsync(await _scope.ResolveAsync(), requiredAction)); }
  41. catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); }
  42. }
  43. /// <summary>
  44. /// 已退役(S8-SYSUSER-ONLY-1)。S8 不再有"员工"这个身份维度,请改用 <c>GET master-data/users</c>。
  45. /// <para>保留路由并返回 410,是为了让还在调用旧地址的客户端<b>立刻拿到明确错误</b>,
  46. /// 而不是收到 404 后以为只是路径写错。</para>
  47. /// </summary>
  48. [HttpGet("employees")]
  49. [S8Permission(S8PermissionCatalog.ExceptionRead)]
  50. public IActionResult EmployeesRetiredAsync() =>
  51. StatusCode(StatusCodes.Status410Gone, new
  52. {
  53. message = "该接口已退役:S8 人员身份统一为系统账号,请改用 GET /api/aidop/s8/master-data/users",
  54. replacedBy = "/api/aidop/s8/master-data/users"
  55. });
  56. [HttpGet("lines")]
  57. [S8Permission(S8PermissionCatalog.ExceptionRead)]
  58. public async Task<IActionResult> LinesAsync()
  59. {
  60. try { return Ok(await _svc.GetLinesAsync(await _scope.ResolveAsync())); }
  61. catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); }
  62. }
  63. }