diff --git a/src/CncWebApi/Controllers/DashboardController.cs b/src/CncWebApi/Controllers/DashboardController.cs index 8b80c20..92d5ada 100644 --- a/src/CncWebApi/Controllers/DashboardController.cs +++ b/src/CncWebApi/Controllers/DashboardController.cs @@ -1,10 +1,13 @@ using System; using System.Collections.Generic; +using System.Net.Http; +using System.Text; using System.Web.Http; using CncModels.Dto; using CncModels.Dto.Dashboard; using CncService.Interface; using CncWebApi.Infrastructure; +using Newtonsoft.Json; namespace CncWebApi.Controllers { @@ -16,6 +19,7 @@ namespace CncWebApi.Controllers public class DashboardController : ApiController { private readonly IDashboardService _dashboardService; + private static readonly HttpClient _httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(10) }; /// /// 构造函数 @@ -46,7 +50,6 @@ namespace CncWebApi.Controllers public IHttpActionResult GetWorkshopProduction(DateTime? startDate = null, DateTime? endDate = null) { var result = _dashboardService.GetWorkshopProduction(startDate, endDate); - // Mock约定:data: { items: [...] } return Ok(ApiResponse.Success(new { items = result })); } @@ -59,7 +62,6 @@ namespace CncWebApi.Controllers public IHttpActionResult GetMachineRank(DateTime? startDate = null, DateTime? endDate = null, int top = 10) { var result = _dashboardService.GetMachineRank(startDate, endDate, top); - // Mock约定:data: { items: [...] } return Ok(ApiResponse.Success(new { items = result })); } @@ -72,7 +74,6 @@ namespace CncWebApi.Controllers public IHttpActionResult GetWorkerRank(DateTime? startDate = null, DateTime? endDate = null, int top = 10) { var result = _dashboardService.GetWorkerRank(startDate, endDate, top); - // Mock约定:data: { items: [...] } return Ok(ApiResponse.Success(new { items = result })); } @@ -109,7 +110,6 @@ namespace CncWebApi.Controllers public IHttpActionResult GetRecentAlerts(int count = 5) { var result = _dashboardService.GetRecentAlerts(count); - // Mock约定:data: { items: [...] } return Ok(ApiResponse.Success(new { items = result })); } @@ -124,5 +124,57 @@ namespace CncWebApi.Controllers var result = _dashboardService.GetCollectorStatus(); return Ok(ApiResponse.Success(result)); } + + /// + /// 启动采集服务(转发到CncCollector的5800端口) + /// POST /api/admin/collector/start + /// + [HttpPost] + [Route("~/api/admin/collector/start")] + public IHttpActionResult StartCollector() + { + return ForwardToCollector("/api/collector/start"); + } + + /// + /// 停止采集服务 + /// POST /api/admin/collector/stop + /// + [HttpPost] + [Route("~/api/admin/collector/stop")] + public IHttpActionResult StopCollector() + { + return ForwardToCollector("/api/collector/stop"); + } + + /// + /// 刷新采集服务配置 + /// POST /api/admin/collector/refresh + /// + [HttpPost] + [Route("~/api/admin/collector/refresh")] + public IHttpActionResult RefreshCollectorConfig() + { + return ForwardToCollector("/api/collector/refresh"); + } + + /// + /// 转发请求到采集服务 + /// + private IHttpActionResult ForwardToCollector(string path) + { + try + { + var request = new HttpRequestMessage(HttpMethod.Post, $"http://localhost:5800{path}"); + request.Headers.Add("X-Api-Key", "collector_api_key_2026"); + var response = _httpClient.SendAsync(request).Result; + var body = response.Content.ReadAsStringAsync().Result; + return Ok(ApiResponse.Success(new { forwarded = true, collectorResponse = JsonConvert.DeserializeObject(body) })); + } + catch (Exception ex) + { + return Ok(ApiResponse.Success(new { forwarded = false, error = ex.Message })); + } + } } }