pull/18/head
刘鑫 3 months ago
parent 121a4a0d3d
commit 71376ba153
  1. 15
      WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
  2. 2
      WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/IDahuaGeneralCtlService.cs
  3. 2
      WeiCloud.Fusion/AlarmService/AlarmService.API/Controllers/AlarmController.cs
  4. 2
      WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json
  5. 86
      WeiCloud.Fusion/Common.SharedService/Common.Shared.Application/DaHua/ResponeDto/EventEnvelopeDto.cs

@ -280,18 +280,17 @@ namespace Alarm.DomainService.DahAlarm
/// <param name="name"></param> /// <param name="name"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="NotImplementedException"></exception> /// <exception cref="NotImplementedException"></exception>
public async Task<DaHApiResult<SubscriptionMapDto>> GetEventList(string name = "alarm") public async Task<DaHApiResult<SubscribeDataDto>> GetEventList(string name = "alarm")
{ {
var clientId = _configuration["DahuaAuth:ClientId"]; var clientId = _configuration["DahuaAuth:ClientId"];
var token = await _tokenProviderService.GetTokenAsync(clientId!); var token = await _tokenProviderService.GetTokenAsync(clientId!);
if (!_tokenProviderService.IsTokenValid(token)) if (!_tokenProviderService.IsTokenValid(token))
{ {
_logger.LogWarning("获取事件列表:token无效"); _logger.LogWarning("获取事件列表:token无效");
return new DaHApiResult<SubscriptionMapDto> { Success = false, Code = "1009", Msg = "token无效" }; return new DaHApiResult<SubscribeDataDto> { Success = false, Code = "1009", Msg = "token无效" };
} }
// var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/evo-brm/1.0.0/device/1000021"; // var url = $"http://demo.weienergy.cn:15230/open-api/token/v1/oauth/token?client_id=69591850&client_secret=WHcpAryKFc28suzL&grant_type=client_credentials";
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/evo-event/1.0.0/subscribe/subscribe-list?monitorType=url&category={name}"; var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/evo-event/1.0.0/subscribe/subscribe-list?monitorType=url&category={name}";
try try
{ {
var request = new HttpRequestMessage(HttpMethod.Get, url); var request = new HttpRequestMessage(HttpMethod.Get, url);
@ -304,14 +303,14 @@ namespace Alarm.DomainService.DahAlarm
if (!resp.IsSuccessStatusCode) if (!resp.IsSuccessStatusCode)
{ {
_logger.LogWarning("实时流请求 HTTP 失败: {Status}, Body: {Body}", (int)resp.StatusCode, body); _logger.LogWarning("实时流请求 HTTP 失败: {Status}, Body: {Body}", (int)resp.StatusCode, body);
return new DaHApiResult<SubscriptionMapDto> { Success = false, Code = "1010", Msg = $"HTTP错误 {(int)resp.StatusCode}" }; return new DaHApiResult<SubscribeDataDto> { Success = false, Code = "1010", Msg = $"HTTP错误 {(int)resp.StatusCode}" };
} }
var result = JsonSerializer.Deserialize<DaHApiResult<SubscriptionMapDto>>(body); var result = JsonSerializer.Deserialize<DaHApiResult<SubscribeDataDto>>(body);
if (result == null || !result.Success) if (result == null || !result.Success)
{ {
_logger.LogWarning("实时流请求业务失败: {Body}", body); _logger.LogWarning("实时流请求业务失败: {Body}", body);
return new DaHApiResult<SubscriptionMapDto> { Success = false, Code = "1010", Msg = "实时流请求失败" }; return new DaHApiResult<SubscribeDataDto> { Success = false, Code = "1010", Msg = "实时流请求失败" };
} }
return result; return result;
@ -319,7 +318,7 @@ namespace Alarm.DomainService.DahAlarm
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, "大华实时流请求出错"); _logger.LogError(ex, "大华实时流请求出错");
return new DaHApiResult<SubscriptionMapDto> { Success = false, Code = "1010", Msg = "实时流请求失败" }; return new DaHApiResult<SubscribeDataDto> { Success = false, Code = "1010", Msg = "实时流请求失败" };
} }
} }

@ -16,7 +16,7 @@ namespace Alarm.DomainService.DahAlarm
Task<bool> DeleteEvent(string name); Task<bool> DeleteEvent(string name);
Task<DaHApiResult<SubscriptionMapDto>> GetEventList(string name = "alarm"); Task<DaHApiResult<SubscribeDataDto>> GetEventList(string name = "alarm");
/// <summary> /// <summary>
/// AddSubscribeEvent回调函数处理 /// AddSubscribeEvent回调函数处理

@ -48,7 +48,7 @@ namespace AlarmService.API.Controllers
/// <param name="name"></param> /// <param name="name"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public async Task<DaHApiResult<SubscriptionMapDto>> GetEventList(string name = "alarm") public async Task<DaHApiResult<SubscribeDataDto>> GetEventList(string name = "alarm")
{ {
return await _generalCtlService.GetEventList(name); return await _generalCtlService.GetEventList(name);

@ -27,7 +27,7 @@
"ClientSecret": "6d6c78f8-3d4c-4e76-ab6b-827942a7b725", "ClientSecret": "6d6c78f8-3d4c-4e76-ab6b-827942a7b725",
"Username": "system", "Username": "system",
"Password": "Admin123", "Password": "Admin123",
"Callback": "http://demo.weienergy.cn/axalarm/api/Alarm/DahuaAuthCallback", "Callback": "http://192.168.21.42:18080/axalarm/api/Alarm/DahuaAuthCallback",
"SubsystemName": "59.110.150.214_alarm", "SubsystemName": "59.110.150.214_alarm",
"SubsystemMagic": "59.110.150.214_12013" "SubsystemMagic": "59.110.150.214_12013"
} }

@ -120,101 +120,53 @@ namespace Common.Shared.Application.DaHua
public JsonElement? Extend { get; set; } public JsonElement? Extend { get; set; }
} }
/// <summary> public sealed class SubscribeDataDto
/// 订阅映射配置
/// 用于定义不同服务节点的订阅参数配置
/// </summary>
public class SubscriptionMapDto
{ {
/// <summary> [JsonPropertyName("subscribeMap")]
/// 订阅配置字典 public SubscribeMap? SubscribeMap { get; set; }
/// 键:服务节点标识(格式:IP地址_端口号)
/// 值:该节点的订阅参数列表
/// </summary>
public Dictionary<string, List<SubscriptionConfig>>? Items { get; set; } = new Dictionary<string, List<SubscriptionConfig>>();
} }
/// <summary> /// <summary>
/// 订阅配置 /// 语义化的字典类型:键为如 "59.110.150.214_alarm" 的分组名,值为该分组下的一组订阅项。
/// 定义单个订阅的具体参数 /// 继承 Dictionary 便于序列化/反序列化,保持类型语义。
/// </summary> /// </summary>
public class SubscriptionConfig public class SubscribeMap : Dictionary<string, List<SubscribeItem>>
{
public SubscribeMap() : base()
{
}
}
public sealed class SubscribeItem
{ {
/// <summary> /// <summary>
/// 订阅类型列表 /// 事件类型编码;上游可能给字符串形式的数字,保持字符串列表以兼容。
/// 可为空,表示订阅所有类型
/// </summary> /// </summary>
[JsonPropertyName("types")] [JsonPropertyName("types")]
public List<string>? Types { get; set; } public List<string>? Types { get; set; }
/// <summary>
/// 节点编码列表
/// 可为空,表示订阅所有节点
/// </summary>
[JsonPropertyName("nodeCodes")] [JsonPropertyName("nodeCodes")]
public List<string>? NodeCodes { get; set; } public List<string>? NodeCodes { get; set; }
/// <summary>
/// 组织机构列表
/// 可为空,表示订阅所有组织
/// </summary>
[JsonPropertyName("orgs")] [JsonPropertyName("orgs")]
public List<string>? Orgs { get; set; } public List<string>? Orgs { get; set; }
/// <summary>
/// 等级列表
/// 可为空,表示订阅所有等级
/// </summary>
[JsonPropertyName("grades")] [JsonPropertyName("grades")]
public List<string>? Grades { get; set; } public List<string>? Grades { get; set; }
/// <summary>
/// 域订阅级别
/// 枚举值:
/// 0 = 不订阅
/// 1 = 订阅本域
/// 2 = 订阅本域及下级域
/// </summary>
[JsonPropertyName("domainSubscribe")] [JsonPropertyName("domainSubscribe")]
public int DomainSubscribe { get; set; } public int? DomainSubscribe { get; set; }
/// <summary>
/// 传输方案
/// 枚举值:
/// 0 = HTTP
/// 1 = HTTPS
/// 2 = WebSocket
/// 3 = MQTT
/// </summary>
[JsonPropertyName("scheme")] [JsonPropertyName("scheme")]
public int Scheme { get; set; } public int? Scheme { get; set; }
/// <summary>
/// 事件类型
/// 枚举值:
/// 0 = 所有事件
/// 1 = 告警事件
/// 2 = 状态事件
/// 3 = 操作事件
/// </summary>
[JsonPropertyName("eventType")] [JsonPropertyName("eventType")]
public int EventType { get; set; } public int? EventType { get; set; }
/// <summary>
/// 监控回调地址
/// 接收事件推送的目标URL
/// </summary>
[JsonPropertyName("monitor")] [JsonPropertyName("monitor")]
public string Monitor { get; set; } = string.Empty; public string? Monitor { get; set; }
/// <summary>
/// 监控类型
/// 枚举值:
/// "url" = HTTP/HTTPS 回调
/// "websocket" = WebSocket 连接
/// "queue" = 消息队列
/// </summary>
[JsonPropertyName("monitorType")] [JsonPropertyName("monitorType")]
public string MonitorType { get; set; } = string.Empty; public string? MonitorType { get; set; }
} }
} }
Loading…
Cancel
Save