using Admin.NET.Plugin.AiDOP.Service.S8; using Microsoft.Extensions.Configuration; namespace Admin.NET.Plugin.AiDOP.Controllers.S8; /// /// G-01 最小补验内部入口(非正式调度接入点)。 /// 仅用于触发 S8 自动监控 MVP 主链一次,供端到端联调与验收取证; /// 不对外暴露业务语义,不作为长期 API。 /// G08-06:移除匿名访问;由 appsettings 的 `WatchScheduler:DebugEndpointEnabled` 控制是否启用, /// 未启用时所有 Action 返回 404(语义等价于"未注册")。 /// [ApiController] [Route("api/aidop/s8/watch-debug")] [NonUnify] public class AdoS8WatchDebugController : ControllerBase { private readonly S8WatchSchedulerService _svc; private readonly bool _debugEndpointEnabled; public AdoS8WatchDebugController(S8WatchSchedulerService svc, IConfiguration configuration) { _svc = svc; _debugEndpointEnabled = configuration.GetValue("WatchScheduler:DebugEndpointEnabled", false); } [HttpPost("run-once")] public async Task RunOnceAsync( [FromQuery] long tenantId = 1, [FromQuery] long factoryId = 1) { if (!_debugEndpointEnabled) return NotFound(); var results = await _svc.CreateExceptionsAsync(tenantId, factoryId); return Ok(new { count = results.Count, results = results.Select(r => new { created = r.Created, skipped = r.Skipped, createdExceptionId = r.CreatedExceptionId, reason = r.Reason, errorMessage = r.ErrorMessage, sourceRuleId = r.DedupResult.Hit.SourceRuleId, relatedObjectCode = r.DedupResult.Hit.RelatedObjectCode, matchedExceptionId = r.DedupResult.MatchedExceptionId }) }); } }