AlarmLogsController.cs 2.88 KB
using MassTransit.Mediator;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Rcs.Application.Common;
using Rcs.Application.DTOs;
using Rcs.Application.MessageBus.Commands;
using StatusCodes = Microsoft.AspNetCore.Http.StatusCodes;

namespace Rcs.Api.Controllers;

/// <summary>
/// 报警日志控制器
/// </summary>
[ApiController]
[Route("api/alarm-logs")]
public class AlarmLogsController : ControllerBase
{
    private readonly IMediator _mediator;

    public AlarmLogsController(IMediator mediator)
    {
        _mediator = mediator;
    }

    /// <summary>
    /// 分页查询报警日志
    /// </summary>
    [HttpGet]
    public async Task<IActionResult> GetAlarmLogs(
        [FromQuery] GetAlarmLogsQuery query,
        CancellationToken cancellationToken = default)
    {
        var client = _mediator.CreateRequestClient<GetAlarmLogsQuery>();
        var response = await client.GetResponse<PagedResponse<AlarmLogListItemDto>>(query, cancellationToken);
        return StatusCode(response.Message.Code <= 0 ? StatusCodes.Status200OK : response.Message.Code, response.Message);
    }

    /// <summary>
    /// 查看报警日志详情
    /// </summary>
    [HttpGet("{id}")]
    public async Task<IActionResult> GetAlarmLogById(string id, CancellationToken cancellationToken = default)
    {
        if (!Guid.TryParse(id, out var alarmLogId))
        {
            return BadRequest(ApiResponse.Failed("无效的报警日志ID格式", StatusCodes.Status400BadRequest));
        }

        var client = _mediator.CreateRequestClient<GetAlarmLogQuery>();
        var response = await client.GetResponse<ApiResponse<AlarmLogDto>>(new GetAlarmLogQuery
        {
            AlarmLogId = alarmLogId
        }, cancellationToken);

        return StatusCode(response.Message.Code <= 0 ? StatusCodes.Status200OK : response.Message.Code, response.Message);
    }

    /// <summary>
    /// 确认报警
    /// </summary>
    [HttpPost("{id}/ack")]
    [HttpPost("{id}/acknowledge")]
    public async Task<IActionResult> AckAlarmLog(
        string id,
        [FromBody(EmptyBodyBehavior = EmptyBodyBehavior.Allow)] AckAlarmLogRequest? request = null,
        CancellationToken cancellationToken = default)
    {
        if (!Guid.TryParse(id, out var alarmLogId))
        {
            return BadRequest(ApiResponse.Failed("无效的报警日志ID格式", StatusCodes.Status400BadRequest));
        }

        var client = _mediator.CreateRequestClient<AckAlarmLogCommand>();
        var response = await client.GetResponse<ApiResponse>(new AckAlarmLogCommand
        {
            AlarmLogId = alarmLogId,
            AcknowledgedBy = request?.AcknowledgedBy,
            AcknowledgeRemark = request?.AcknowledgeRemark ?? request?.Note
        }, cancellationToken);

        return StatusCode(response.Message.Code <= 0 ? StatusCodes.Status200OK : response.Message.Code, response.Message);
    }
}