using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using VolPro.Core.Filters;
using Warehouse.Services;
namespace Warehouse.Controllers;
///
/// 定时任务 API 端点。
/// VolPro 框架通过 Sys_QuartzOptions 配置 URL+Cron 定时调用。
/// 每个方法加 [ApiTask] 属性以允许框架匿名调用。
///
/// 管理端配置:
/// syncDevices: 0 */5 * * * ?
/// heartbeatMonitor: 0/15 * * * * ?
/// realtimePoll: 0/10 * * * * ?
/// ruleEngine: 0/10 * * * * ?
///
[ApiController]
[Route("api/task")]
public class TaskController : Controller
{
/// 设备同步 — 遍历在线网关触发全量设备同步
[ApiTask]
[HttpGet, HttpPost, Route("syncDevices")]
public async Task SyncDevices()
{
var sp = HttpContext.RequestServices;
var engine = sp.GetService();
if (engine != null) await engine.Execute(null!);
return Ok(new { time = DateTime.Now, status = "ok" });
}
/// 心跳监控 — 扫描超时网关标记离线
[ApiTask]
[HttpGet, HttpPost, Route("heartbeatMonitor")]
public async Task HeartbeatMonitor()
{
var sp = HttpContext.RequestServices;
var engine = sp.GetService();
if (engine != null) await engine.Execute(null!);
return Ok(new { time = DateTime.Now, status = "ok" });
}
/// 实时轮询 — 拉取 MC4 IoT 实时值写入 iot_devicedata
[ApiTask]
[HttpGet, HttpPost, Route("realtimePoll")]
public async Task RealtimePoll()
{
var sp = HttpContext.RequestServices;
var engine = sp.GetService();
if (engine != null) await engine.Execute(null!);
return Ok(new { time = DateTime.Now, status = "ok" });
}
/// 规则引擎 — 评估规则条件+执行告警/控制/通知动作
[ApiTask]
[HttpGet, HttpPost, Route("ruleEngine")]
public async Task RuleEngine()
{
var sp = HttpContext.RequestServices;
var engine = sp.GetService();
if (engine != null) await engine.EvaluateAllAsync();
return Ok(new { time = DateTime.Now, status = "ok" });
}
}