using System; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using YunDa.Server.ISMSTcp.Interfaces; using YunDa.Server.ISMSTcp.Models; namespace YunDa.Server.ISMSTcp.Controllers { /// /// 查询API控制器 /// [ApiController] [Route("api")] public class QueryController : ControllerBase { private readonly ILogger _logger; private readonly IQueryService _queryService; /// /// 构造函数 /// /// 日志记录器 /// 查询服务 public QueryController(ILogger logger, IQueryService queryService) { _logger = logger; _queryService = queryService; } /// /// 处理查询请求 /// /// 定值参数 /// 故障报告参数 /// 波形配置参数 /// 波形文件参数 /// 装置版本参数 /// 取消令牌 /// 查询结果 [HttpGet] public async Task ProcessQuery( [FromQuery] string? dz = null, [FromQuery] string? faultRpt = null, [FromQuery] string? waveCfg = null, [FromQuery] string? waveDat = null, [FromQuery] string? version = null, CancellationToken cancellationToken = default) { try { _logger.LogInformation("收到查询请求 - dz:{Dz}, faultRpt:{FaultRpt}, waveCfg:{WaveCfg}, waveDat:{WaveDat}, version:{Version}", dz, faultRpt, waveCfg, waveDat, version); WebResult result; // 根据参数类型处理不同的查询 if (!string.IsNullOrEmpty(dz)) { result = await _queryService.ProcessRequestAsync(dz, "定值", cancellationToken); } else if (!string.IsNullOrEmpty(faultRpt)) { result = await _queryService.ProcessRequestAsync(faultRpt, "故障报告", cancellationToken); } else if (!string.IsNullOrEmpty(waveCfg)) { result = await _queryService.ProcessRequestAsync(waveCfg, "波形配置", cancellationToken); } else if (!string.IsNullOrEmpty(waveDat)) { result = await _queryService.ProcessRequestAsync(waveDat, "波形文件", cancellationToken); } else if (!string.IsNullOrEmpty(version)) { result = await _queryService.ProcessRequestAsync(version, "装置版本", cancellationToken); } else { result = WebResult.InvalidParameter(); } // 返回结果 return StatusCode(result.StatusCode, JsonConvert.SerializeObject(result)); } catch (OperationCanceledException) { _logger.LogWarning("查询请求被取消"); return StatusCode(504, "请求超时"); } catch (Exception ex) { _logger.LogError(ex, "处理查询请求时发生异常"); return StatusCode(500, $"服务器内部错误: {ex.Message}"); } } /// /// 获取服务状态 /// /// 服务状态 [HttpGet("status")] public IActionResult GetStatus() { try { var status = new { IsQueryInProgress = _queryService.IsQueryInProgress, Timestamp = DateTime.Now, Status = "Running" }; return Ok(JsonConvert.SerializeObject(status)); } catch (Exception ex) { _logger.LogError(ex, "获取服务状态时发生异常"); return StatusCode(500, $"获取状态失败: {ex.Message}"); } } /// /// 健康检查端点 /// /// 健康状态 [HttpGet("health")] public IActionResult HealthCheck() { return Ok("Healthy"); } } }