AdoS8ConfigKpiTargetsController.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Admin.NET.Plugin.AiDOP.Infrastructure.S8;
  2. using Admin.NET.Plugin.AiDOP.Const.S8;
  3. using Admin.NET.Plugin.AiDOP.Infrastructure;
  4. using Admin.NET.Plugin.AiDOP.Service.S8;
  5. namespace Admin.NET.Plugin.AiDOP.Controllers.S8;
  6. /// <summary>
  7. /// S9 KPI 目标值配置(S8-CONFIG-GLOBAL-ROW-SEMANTICS-AND-KPI-TARGET-1)。
  8. /// 复用 ado_s8_monitor_metric.default_target_ratio;只维护目标值,不涉及 KPI 当前值。
  9. /// 作用域:平台默认租户侧只读 → 自定义本工厂 → 恢复平台默认。
  10. /// </summary>
  11. [ApiController]
  12. [Route("api/aidop/s8/config/kpi-targets")]
  13. [NonUnify]
  14. public class AdoS8ConfigKpiTargetsController : ControllerBase
  15. {
  16. private readonly S8KpiTargetConfigService _svc;
  17. private readonly S8TrustedScopeResolver _scope;
  18. public AdoS8ConfigKpiTargetsController(S8KpiTargetConfigService svc, S8TrustedScopeResolver scope)
  19. {
  20. _svc = svc;
  21. _scope = scope;
  22. }
  23. /// <summary>列表:5 项 Result KPI 的生效目标值(工厂覆盖优先)。</summary>
  24. [HttpGet]
  25. [S8Permission(S8PermissionCatalog.ConfigRead)]
  26. public async Task<IActionResult> ListAsync()
  27. => Ok(await _svc.ListAsync(await _scope.ResolveAsync()));
  28. /// <summary>
  29. /// 自定义本工厂 / 编辑本工厂目标值。按 metricCode 定位,归属由服务端盖章。
  30. /// </summary>
  31. [HttpPut("{metricCode}/factory-override")]
  32. [S8Permission(S8PermissionCatalog.ConfigKpi)]
  33. public async Task<IActionResult> UpsertFactoryOverrideAsync(string metricCode, [FromBody] AdoS8KpiTargetUpdateBody body)
  34. {
  35. try
  36. {
  37. return Ok(await _svc.UpsertFactoryOverrideAsync(
  38. metricCode, body?.TargetRatio ?? -1m, body?.Remark, await _scope.ResolveAsync()));
  39. }
  40. catch (S8NotFoundException) { return NotFound(); }
  41. catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); }
  42. }
  43. /// <summary>恢复平台默认:只删当前工厂覆盖行,平台默认行不受影响。</summary>
  44. [HttpDelete("{metricCode}/factory-override")]
  45. [S8Permission(S8PermissionCatalog.ConfigKpi)]
  46. public async Task<IActionResult> ResetToGlobalDefaultAsync(string metricCode)
  47. {
  48. try { return Ok(await _svc.ResetToGlobalDefaultAsync(metricCode, await _scope.ResolveAsync())); }
  49. catch (S8NotFoundException) { return NotFound(); }
  50. catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); }
  51. }
  52. }
  53. /// <summary>S9 KPI 目标值编辑入参。只接受目标值与说明,归属字段一律不接受。</summary>
  54. public class AdoS8KpiTargetUpdateBody
  55. {
  56. /// <summary>目标值(百分比,0–100)。</summary>
  57. public decimal TargetRatio { get; set; }
  58. /// <summary>说明(可选)。</summary>
  59. public string? Remark { get; set; }
  60. }