You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.1 KiB
107 lines
3.1 KiB
using Alarm.DomainService.DahAlarm; |
|
using Common.Shared.Application.DaHua; |
|
using Microsoft.AspNetCore.Mvc; |
|
using MongoDB.Bson; |
|
using System.Text.Json; |
|
|
|
namespace AlarmService.API.Controllers |
|
{ |
|
/// <summary> |
|
/// 大华设备报警 |
|
/// </summary> |
|
[Route("api/[controller]/[action]")] |
|
[ApiController] |
|
public class AlarmController : ControllerBase |
|
{ |
|
private readonly ILogger<AlarmController> _logger; |
|
private readonly IDahuaGeneralCtlService _generalCtlService; |
|
|
|
public AlarmController(ILogger<AlarmController> logger, IDahuaGeneralCtlService generalCtlService) |
|
{ |
|
_logger = logger; |
|
|
|
_generalCtlService = generalCtlService; |
|
} |
|
|
|
/// <summary> |
|
/// 订阅报警事件 |
|
/// </summary> |
|
/// <returns></returns> |
|
[HttpPost] |
|
public async Task<DaHApiResult<object>> AddSubscribeEvent() |
|
{ |
|
return await _generalCtlService.AddSubscribeEvent(); |
|
} |
|
|
|
/// <summary> |
|
/// 报警的回调 |
|
/// </summary> |
|
/// <param name="data"></param> |
|
/// <returns></returns> |
|
[HttpPost] |
|
[Consumes("application/json")] |
|
[Produces("application/json")] |
|
public async Task<IActionResult> DahuaAuthCallback([FromBody] JsonElement data) |
|
{ |
|
EventEnvelopeDto dto = new EventEnvelopeDto(); |
|
try |
|
{ |
|
dto = JsonSerializer.Deserialize<EventEnvelopeDto>(data)!; |
|
} |
|
catch (Exception ex) |
|
{ |
|
_logger.LogWarning($"收到了报警回调{data.ToJson()}"); |
|
_logger.LogError(ex, "JSON反序列化失败"); |
|
} |
|
|
|
// 即使数据结构异常,也不应该让平台收到 HTTP 500 |
|
try |
|
{ |
|
if (dto != null) |
|
{ |
|
await _generalCtlService.HandleAsync(dto); |
|
} |
|
else |
|
{ |
|
_logger.LogWarning("接收到的DTO为 null,跳过业务处理"); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
_logger.LogError(ex, "处理回调时异常"); |
|
} |
|
|
|
// 返回 Java 示例中的成功结构 |
|
var result = new |
|
{ |
|
code = "0", |
|
message = "成功" |
|
}; |
|
|
|
return new JsonResult(result); |
|
} |
|
|
|
/// <summary> |
|
/// 获取监听报警列表 |
|
/// </summary> |
|
/// <param name="name"></param> |
|
/// <returns></returns> |
|
[HttpGet] |
|
public async Task<DaHApiResult<SubscribeDataDto>> GetEventList(string name = "alarm") |
|
|
|
{ |
|
return await _generalCtlService.GetEventList(name); |
|
} |
|
|
|
/// <summary> |
|
/// 取消订阅某个事件 |
|
/// </summary> |
|
/// <param name="name"></param> |
|
/// <returns></returns> |
|
[HttpDelete] |
|
public async Task<bool> DeleteEvent(string name) |
|
{ |
|
return await _generalCtlService.DeleteEvent(name); |
|
} |
|
} |
|
} |