using Admin.NET.Plugin.AiDOP.DataPlatform.S1Refresh;
using Admin.NET.Plugin.AiDOP.SmartOps;
namespace Admin.NET.Plugin.AiDOP.Controllers;
/// S1 看板轻量刷新与异步重算。独立控制器以避免继承 AidopKanbanController 的 AllowAnonymous。
[ApiController]
[Route("api/AidopKanban")]
[Authorize]
[NonUnify]
public class AidopKanbanS1RefreshController : ControllerBase
{
private readonly S1KpiTargetSnapshotRefreshService _snapshot;
private readonly S1DashboardRebuildService _rebuild;
private readonly UserManager _userManager;
public AidopKanbanS1RefreshController(
S1KpiTargetSnapshotRefreshService snapshot,
S1DashboardRebuildService rebuild,
UserManager userManager)
{
_snapshot = snapshot;
_rebuild = rebuild;
_userManager = userManager;
}
[HttpPost("s1/target-snapshot/refresh")]
public async Task RefreshTargetSnapshot([FromQuery] long factoryId = 1, CancellationToken ct = default)
{
var tenantId = AidopTenantScope.ResolveOrThrow(_userManager);
if (factoryId <= 0) factoryId = 1;
var result = await _snapshot.RefreshAsync(tenantId, factoryId, ct);
return Ok(result);
}
[HttpPost("s1/rebuild-jobs")]
public async Task EnqueueRebuild([FromQuery] long factoryId = 1, CancellationToken ct = default)
{
var tenantId = AidopTenantScope.ResolveOrThrow(_userManager);
if (factoryId <= 0) factoryId = 1;
var (status, body) = await _rebuild.EnqueueAsync(tenantId, factoryId, _userManager.UserId, "MANUAL", ct);
return StatusCode(status, body);
}
[HttpGet("s1/rebuild-jobs/latest")]
public async Task LatestRebuild([FromQuery] long factoryId = 1, CancellationToken ct = default)
{
var tenantId = AidopTenantScope.ResolveOrThrow(_userManager);
if (factoryId <= 0) factoryId = 1;
var dto = await _rebuild.LatestAsync(tenantId, factoryId, ct);
return Ok(dto);
}
[HttpGet("s1/rebuild-jobs/{jobId:long}")]
public async Task GetRebuild(long jobId, [FromQuery] long factoryId = 1, CancellationToken ct = default)
{
var tenantId = AidopTenantScope.ResolveOrThrow(_userManager);
if (factoryId <= 0) factoryId = 1;
return Ok(await _rebuild.GetAsync(jobId, tenantId, factoryId, ct));
}
}