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" }); } }