AdoS8WatchDebugController.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Admin.NET.Plugin.AiDOP.Service.S8;
  2. using Microsoft.Extensions.Configuration;
  3. namespace Admin.NET.Plugin.AiDOP.Controllers.S8;
  4. /// <summary>
  5. /// G-01 最小补验内部入口(非正式调度接入点)。
  6. /// 仅用于触发 S8 自动监控 MVP 主链一次,供端到端联调与验收取证;
  7. /// 不对外暴露业务语义,不作为长期 API。
  8. /// G08-06:移除匿名访问;由 appsettings 的 `WatchScheduler:DebugEndpointEnabled` 控制是否启用,
  9. /// 未启用时所有 Action 返回 404(语义等价于"未注册")。
  10. /// </summary>
  11. [ApiController]
  12. [Route("api/aidop/s8/watch-debug")]
  13. [NonUnify]
  14. public class AdoS8WatchDebugController : ControllerBase
  15. {
  16. private readonly S8WatchSchedulerService _svc;
  17. private readonly bool _debugEndpointEnabled;
  18. public AdoS8WatchDebugController(S8WatchSchedulerService svc, IConfiguration configuration)
  19. {
  20. _svc = svc;
  21. _debugEndpointEnabled = configuration.GetValue("WatchScheduler:DebugEndpointEnabled", false);
  22. }
  23. [HttpPost("run-once")]
  24. public async Task<IActionResult> RunOnceAsync(
  25. [FromQuery] long tenantId = 1,
  26. [FromQuery] long factoryId = 1)
  27. {
  28. if (!_debugEndpointEnabled) return NotFound();
  29. var results = await _svc.CreateExceptionsAsync(tenantId, factoryId);
  30. return Ok(new
  31. {
  32. count = results.Count,
  33. results = results.Select(r => new
  34. {
  35. created = r.Created,
  36. skipped = r.Skipped,
  37. createdExceptionId = r.CreatedExceptionId,
  38. reason = r.Reason,
  39. errorMessage = r.ErrorMessage,
  40. sourceRuleId = r.DedupResult.Hit.SourceRuleId,
  41. relatedObjectCode = r.DedupResult.Hit.RelatedObjectCode,
  42. matchedExceptionId = r.DedupResult.MatchedExceptionId
  43. })
  44. });
  45. }
  46. }