136 lines
4.7 KiB
C#
136 lines
4.7 KiB
C#
|
|
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
|
||
|
|
{
|
||
|
|
_logger.LogInformation("收到查询请求 - dz:{Dz}, faultRpt:{FaultRpt}, waveCfg:{WaveCfg}, waveDat:{WaveDat}, version:{Version}",
|
||
|
|
dz, faultRpt, waveCfg, waveDat, version);
|
||
|
|
|
||
|
|
WebResult<object> 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<object>.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}");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 获取服务状态
|
||
|
|
/// </summary>
|
||
|
|
/// <returns>服务状态</returns>
|
||
|
|
[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}");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 健康检查端点
|
||
|
|
/// </summary>
|
||
|
|
/// <returns>健康状态</returns>
|
||
|
|
[HttpGet("health")]
|
||
|
|
public IActionResult HealthCheck()
|
||
|
|
{
|
||
|
|
return Ok("Healthy");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|