137 lines
4.8 KiB
C#
Raw Normal View History

2025-07-31 18:51:24 +08:00
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
{
/// <summary>
/// 查询API控制器
/// </summary>
[ApiController]
[Route("api")]
public class QueryController : ControllerBase
{
private readonly ILogger<QueryController> _logger;
private readonly IQueryService _queryService;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="logger">日志记录器</param>
/// <param name="queryService">查询服务</param>
public QueryController(ILogger<QueryController> logger, IQueryService queryService)
{
_logger = logger;
_queryService = queryService;
}
/// <summary>
/// 处理查询请求
/// </summary>
/// <param name="dz">定值参数</param>
/// <param name="faultRpt">故障报告参数</param>
/// <param name="waveCfg">波形配置参数</param>
/// <param name="waveDat">波形文件参数</param>
/// <param name="version">装置版本参数</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>查询结果</returns>
[HttpGet]
public async Task<IActionResult> 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
{
2025-09-11 15:12:10 +08:00
_logger.LogError("收到查询请求 - dz:{Dz}, faultRpt:{FaultRpt}, waveCfg:{WaveCfg}, waveDat:{WaveDat}, version:{Version}",
2025-07-31 18:51:24 +08:00
dz, faultRpt, waveCfg, waveDat, version);
WebResult<object> result;
// 根据参数类型处理不同的查询
if (!string.IsNullOrEmpty(dz))
{
result = await _queryService.ProcessRequestAsync(dz, "dz","定值", cancellationToken);
2025-07-31 18:51:24 +08:00
}
else if (!string.IsNullOrEmpty(faultRpt))
{
//GetFaultRptByTime|2025-08-20 00:00|2025-08-20 23:59
result = await _queryService.ProcessRequestAsync(faultRpt, "faultRpt", "故障报告", cancellationToken);
2025-07-31 18:51:24 +08:00
}
else if (!string.IsNullOrEmpty(waveCfg))
{
result = await _queryService.ProcessRequestAsync(waveCfg, "waveCfg", "波形配置", cancellationToken);
2025-07-31 18:51:24 +08:00
}
else if (!string.IsNullOrEmpty(waveDat))
{
result = await _queryService.ProcessRequestAsync(waveDat, "waveDat", "波形文件", cancellationToken);
2025-07-31 18:51:24 +08:00
}
else if (!string.IsNullOrEmpty(version))
{
result = await _queryService.ProcessRequestAsync(version, "version", "装置版本", cancellationToken);
2025-07-31 18:51:24 +08:00
}
else
{
result = WebResult<object>.InvalidParameter();
}
// 返回结果 - 直接返回WebResult让ASP.NET Core自动序列化
return StatusCode(result.StatusCode, result);
2025-07-31 18:51:24 +08:00
}
catch (OperationCanceledException)
{
_logger.LogWarning("查询请求被取消");
return StatusCode(504, "请求超时");
}
catch (Exception ex)
{
_logger.LogError(ex, "处理查询请求时发生异常");
return StatusCode(500, $"服务器内部错误: {ex.Message}");
}
}
/// <summary>
/// 获取服务状态
/// </summary>
/// <returns>服务状态</returns>
[HttpGet("status")]
public IActionResult GetStatus()
{
try
{
var status = new
{
IsQueryInProgress = _queryService.IsQueryInProgress,
Timestamp = DateTime.Now,
Status = "Running"
};
return Ok(status);
2025-07-31 18:51:24 +08:00
}
catch (Exception ex)
{
_logger.LogError(ex, "获取服务状态时发生异常");
return StatusCode(500, $"获取状态失败: {ex.Message}");
}
}
/// <summary>
/// 健康检查端点
/// </summary>
/// <returns>健康状态</returns>
[HttpGet("health")]
public IActionResult HealthCheck()
{
return Ok("Healthy");
}
}
}