using Admin.NET.Plugin.AiDOP.Infrastructure;
using Admin.NET.Plugin.AiDOP.Service.S8;
namespace Admin.NET.Plugin.AiDOP.Controllers.S8;
///
/// S9 KPI 目标值配置(S8-CONFIG-GLOBAL-ROW-SEMANTICS-AND-KPI-TARGET-1)。
/// 复用 ado_s8_monitor_metric.default_target_ratio;只维护目标值,不涉及 KPI 当前值。
/// 作用域:平台默认租户侧只读 → 自定义本工厂 → 恢复平台默认。
///
[ApiController]
[Route("api/aidop/s8/config/kpi-targets")]
[NonUnify]
public class AdoS8ConfigKpiTargetsController : ControllerBase
{
private readonly S8KpiTargetConfigService _svc;
private readonly S8TrustedScopeResolver _scope;
public AdoS8ConfigKpiTargetsController(S8KpiTargetConfigService svc, S8TrustedScopeResolver scope)
{
_svc = svc;
_scope = scope;
}
/// 列表:5 项 Result KPI 的生效目标值(工厂覆盖优先)。
[HttpGet]
public async Task ListAsync()
=> Ok(await _svc.ListAsync(await _scope.ResolveAsync()));
///
/// 自定义本工厂 / 编辑本工厂目标值。按 metricCode 定位,归属由服务端盖章。
///
[HttpPut("{metricCode}/factory-override")]
public async Task UpsertFactoryOverrideAsync(string metricCode, [FromBody] AdoS8KpiTargetUpdateBody body)
{
try
{
return Ok(await _svc.UpsertFactoryOverrideAsync(
metricCode, body?.TargetRatio ?? -1m, body?.Remark, await _scope.ResolveAsync()));
}
catch (S8NotFoundException) { return NotFound(); }
catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); }
}
/// 恢复平台默认:只删当前工厂覆盖行,平台默认行不受影响。
[HttpDelete("{metricCode}/factory-override")]
public async Task ResetToGlobalDefaultAsync(string metricCode)
{
try { return Ok(await _svc.ResetToGlobalDefaultAsync(metricCode, await _scope.ResolveAsync())); }
catch (S8NotFoundException) { return NotFound(); }
catch (S8BizException ex) { return BadRequest(new { message = ex.Message }); }
}
}
/// S9 KPI 目标值编辑入参。只接受目标值与说明,归属字段一律不接受。
public class AdoS8KpiTargetUpdateBody
{
/// 目标值(百分比,0–100)。
public decimal TargetRatio { get; set; }
/// 说明(可选)。
public string? Remark { get; set; }
}