智慧建筑第三方功能集成微服务,目的是聚集所有涉及到第三方厂商调用的功能,按照业务功能划分不同微服务
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

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);
}
}
}