diff --git a/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
index 03f6bee..829c51f 100644
--- a/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
+++ b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
@@ -18,7 +18,7 @@ namespace Alarm.DomainService.DahAlarm
private readonly IMqttClientService _mqttClientService;
private readonly ITokenProviderService _tokenProviderService;
- private readonly HttpClient _http;
+ // private readonly HttpClient _http;
private string mqttHostIp;
private int mqttHostPort;
@@ -50,16 +50,16 @@ namespace Alarm.DomainService.DahAlarm
topicName = _configuration["SubscribeMQTT:TopicName"]!;
_mqttClientService = mqttClientService;
_tokenProviderService = tokenProviderService;
- _http = http;
+ // _http = http;
}
- /////
- ///// 开发测试的时候,忽略证书
- /////
- //private static readonly HttpClient _http = new(new HttpClientHandler
- //{
- // ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
- //});
+ ///
+ /// 开发测试的时候,忽略证书
+ ///
+ private static readonly HttpClient _http = new(new HttpClientHandler
+ {
+ ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
+ });
///
/// 新增报警事件订阅
@@ -209,8 +209,8 @@ namespace Alarm.DomainService.DahAlarm
if (dto.Info.AlarmType == 4321)
{
//拼接物联平台标准的mqtt消息格式
- // var payload = "[{\"taglabel\":\"" + dto.Info.DeviceCode + ".alart." + dto.Info.DeviceName + "\",\"value\":\"" + dto.Info.AlarmStat + "\",\"time\":\"" + DateTimeOffset.UtcNow.ToUnixTimeSeconds() + "\"}]";
- var payload = "[{\"taglabel\":\"残卫测试报警按钮.alarmStat\",\"value\":\"" + dto.Info.AlarmStat + "\",\"time\":\"" + DateTimeOffset.UtcNow.ToUnixTimeSeconds() + "\"}]";
+ var payload = "[{\"taglabel\":\"" + dto.Info.DeviceCode + ".alart." + dto.Info.DeviceName + "\",\"value\":\"" + dto.Info.AlarmStat + "\",\"time\":\"" + DateTimeOffset.UtcNow.ToUnixTimeSeconds() + "\"}]";
+ // var payload = "[{\"taglabel\":\"残卫测试报警按钮.alarmStat\",\"value\":\"" + dto.Info.AlarmStat + "\",\"time\":\"" + DateTimeOffset.UtcNow.ToUnixTimeSeconds() + "\"}]";
await _mqttClient.EnsureConnectedAsync(mqttHostIp, mqttHostPort, mqttUsername, mqttPassword, topicName, mqttClientId);
await _mqttClientService.PublishAsync(topicName, payload);
@@ -288,8 +288,8 @@ namespace Alarm.DomainService.DahAlarm
_logger.LogWarning("获取事件列表:token无效");
return new DaHApiResult { Success = false, Code = "1009", Msg = "token无效" };
}
- var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/evo-brm/1.0.0/device/1000021";
- //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-brm/1.0.0/device/1000021";
+ var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/evo-event/1.0.0/subscribe/subscribe-list?monitorType=url&category={name}";
try
{
diff --git a/WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json b/WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json
index 128b131..ea44d24 100644
--- a/WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json
+++ b/WeiCloud.Fusion/AlarmService/AlarmService.API/appsettings.json
@@ -27,8 +27,8 @@
"ClientSecret": "6d6c78f8-3d4c-4e76-ab6b-827942a7b725",
"Username": "system",
"Password": "Admin123",
- "Callback": "http://demo.weienergy.cn:5000/api/Alarm/DahuaAuthCallback",
- "SubsystemName": "192.168.21.43_alarm",
- "SubsystemMagic": "192.168.21.43_5001"
+ "Callback": "http://demo.weienergy.cn/axalarm/api/Alarm/DahuaAuthCallback",
+ "SubsystemName": "59.110.150.214_alarm",
+ "SubsystemMagic": "59.110.150.214_12013"
}
}
\ No newline at end of file
diff --git a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/DaHTokenService/TokenProviderService.cs b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/DaHTokenService/TokenProviderService.cs
index 602ce25..a05af23 100644
--- a/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/DaHTokenService/TokenProviderService.cs
+++ b/WeiCloud.Fusion/Common.SharedService/Common.Shared.DomainService/DaHTokenService/TokenProviderService.cs
@@ -1,6 +1,8 @@
using Common.Shared.Application.DaHua;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
+using MongoDB.Bson;
+using OfficeOpenXml.FormulaParsing.LexicalAnalysis;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using System.Net.Http.Json;
@@ -34,12 +36,18 @@ namespace Common.Shared.DomainService
public async Task GetTokenAsync(string clientId)
{
if (TokenCache.TokenMap.TryGetValue(clientId, out var tokenEntry)
- && tokenEntry.ExpireAt > DateTimeOffset.UtcNow.AddMinutes(5))
+ && tokenEntry.ExpireAt > DateTimeOffset.UtcNow.AddMinutes(1))
{
- return tokenEntry.AccessToken!;
+ if (!IsTokenValid(tokenEntry.AccessToken!))
+ {
+ _logger.LogWarning("从字典里匹配");
+
+ return tokenEntry.AccessToken!;
+ }
}
var tokenLock = TokenLockProvider.GetLock(clientId);
+ _logger.LogWarning("枷锁");
await tokenLock.WaitAsync();
try
{
@@ -47,7 +55,12 @@ namespace Common.Shared.DomainService
if (TokenCache.TokenMap.TryGetValue(clientId, out tokenEntry)
&& tokenEntry.ExpireAt > DateTimeOffset.UtcNow.AddMinutes(5))
{
- return tokenEntry.AccessToken!;
+ if (!IsTokenValid(tokenEntry.AccessToken!))
+ {
+ _logger.LogWarning("再次匹配");
+
+ return tokenEntry.AccessToken!;
+ }
}
var refreshed = await TryRefreshOrLoginAsync(clientId, tokenEntry);
@@ -137,7 +150,8 @@ namespace Common.Shared.DomainService
dto.ClientSecret = _configuration["DahuaAuth:ClientSecret"]!;
dto.Password = _configuration["DahuaAuth:Password"]!;
dto.Username = _configuration["DahuaAuth:Username"]!;
-
+ _logger.LogWarning("在GetDaHToken方法中的记录:Dahua Host = {Host}, ClientId = {ClientId}",
+ _configuration["DahuaAuth:Host"], _configuration["DahuaAuth:ClientId"], _configuration["DahuaAuth:ClientSecret"]);
DaHApiResult loginResult = await GetToken(dto);
TokenEntry refreshed = new()
@@ -207,10 +221,11 @@ namespace Common.Shared.DomainService
try
{
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/evo-oauth/1.0.0/oauth/public-key";
-
+ _logger.LogWarning($"获取的url{url}");
using var resp = await _http.GetAsync(url);
resp.EnsureSuccessStatusCode();
var json = await resp.Content.ReadAsStringAsync();
+ _logger.LogWarning($"获取密钥的结果json{json}");
var envelope = JsonSerializer.Deserialize>(json, new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
@@ -230,7 +245,7 @@ namespace Common.Shared.DomainService
}
catch (Exception ex)
{
- _logger.LogWarning(ex, "大华平台获取公钥出错");
+ _logger.LogWarning(ex, $"大华平台获取公钥出错{ex.Message}");
result.Success = false;
result.Code = "1001";
result.Msg = "获取大华公钥失败";
@@ -267,33 +282,44 @@ namespace Common.Shared.DomainService
{
var url = $"https://{_configuration["DahuaAuth:Host"]}/evo-apigw/evo-oauth/1.0.0/oauth/extend/token";
//必须加密
+ _logger.LogWarning($"获取token的url{url}");
+ _logger.LogWarning($"获取token的dto的json{dto.ToJson()}");
dto.Password = EncryptByPublicKey(dto.Password, dto.PublicKey!);
using var resp = await _http.PostAsJsonAsync(url, dto);
resp.EnsureSuccessStatusCode();
-
+ _logger.LogWarning("这是正式请求的:Dahua Host = {Host}, ClientId = {ClientId},ClientSecret={ClientSecret}", _configuration["DahuaAuth:Host"], _configuration["DahuaAuth:ClientId"], _configuration["DahuaAuth:ClientSecret"]);
var tokenInfo = await resp.Content.ReadFromJsonAsync>();
-
+ _logger.LogWarning($"获取大华登录令牌返回结果:{tokenInfo.ToJson()}");
if (tokenInfo == null || !result.Success || result.Code != "0")
{
result.Success = false;
result.Code = "1004";
result.Msg = "获取大华登录令牌失败";
- _logger.LogWarning("获取大华登录令牌失败,返回结果:{Result}", result);
+ _logger.LogWarning($"获取大华登录令牌失败,返回结果:{result}");
}
result = tokenInfo!;
//固定的拼接方式
- result.Data!.AccessToken = string.Concat(tokenInfo?.Data!.TokenType, " ", tokenInfo?.Data!.AccessToken);
-
- TokenEntry refreshed = new TokenEntry
+ if (tokenInfo?.Data!.AccessToken != null && tokenInfo?.Data!.AccessToken.Length > 1)
{
- AccessToken = string.Concat(result!.Data.TokenType, " ", result.Data.AccessToken),
+ result.Data!.AccessToken = string.Concat(tokenInfo?.Data!.TokenType, " ", tokenInfo?.Data!.AccessToken);
+ TokenEntry refreshed = new TokenEntry
+ {
+ AccessToken = string.Concat(result!.Data.TokenType, " ", result.Data.AccessToken),
- ExpireAt = DateTimeOffset.UtcNow.AddSeconds(result.Data.ExpiresIn)
- };
+ ExpireAt = DateTimeOffset.UtcNow.AddSeconds(result.Data.ExpiresIn)
+ };
+ }
+ else
+ {
+ result.Success = false;
+ result.Code = "1006";
+ result.Msg = "没拿到token";
+ _logger.LogWarning($"获取大华登录令牌失败,返回结果:{result}");
+ }
}
catch (Exception ex)
{
- _logger.LogError(ex, "获取大华登录令牌出错");
+ _logger.LogError(ex, $"获取大华登录令牌出错{ex.Message}");
result.Success = false;
result.Code = "1004";
result.Msg = "获取大华登录令牌失败";
diff --git a/WeiCloud.Fusion/VideoService/Video.API/Program.cs b/WeiCloud.Fusion/VideoService/Video.API/Program.cs
index 45bc79b..d28df52 100644
--- a/WeiCloud.Fusion/VideoService/Video.API/Program.cs
+++ b/WeiCloud.Fusion/VideoService/Video.API/Program.cs
@@ -41,8 +41,8 @@ namespace Video.API
builder =>
{
builder
- .WithOrigins(isconfig.CorsWithOrigins) //Դʹöŷָ
- //.AllowAnyOrigin() //ԴʱAPIã
+ // .WithOrigins(isconfig.CorsWithOrigins) //Դʹöŷָ
+ .AllowAnyOrigin() //ԴʱAPIã
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
@@ -150,9 +150,9 @@ namespace Video.API
});
}
- app.UseHttpsRedirection();
+ // app.UseHttpsRedirection();
- app.UseAuthorization();
+ // app.UseAuthorization();
app.MapGet("/healthz", () => Results.Ok("OK"));
app.MapControllers();
diff --git a/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs b/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs
index 4cd968b..5f3a217 100644
--- a/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs
+++ b/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs
@@ -2,6 +2,7 @@
using Common.Shared.DomainService;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
+using NPOI.XWPF.UserModel;
using System.Net.Http.Json;
using System.Text.Json;
using Video.DomainService.Dahvision;
@@ -13,7 +14,7 @@ namespace Video.DomainService
private readonly ILogger _logger;
private readonly IConfiguration _configuration;
private readonly ITokenProviderService _tokenProviderService;
- private readonly HttpClient _http;
+ // private readonly HttpClient _http;
public DahuaGeneralCtlService(ILogger logger, IConfiguration configuration, ITokenProviderService tokenProviderService, HttpClient http)
{
@@ -21,16 +22,16 @@ namespace Video.DomainService
_configuration = configuration;
_tokenProviderService = tokenProviderService;
- _http = http;
+ // _http = http;
}
- /////
- ///// 开发测试的时候,忽略证书
- /////
- //private static readonly HttpClient _http = new HttpClient(new HttpClientHandler
- //{
- // ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
- //});
+ ///
+ /// 开发测试的时候,忽略证书
+ ///
+ private static readonly HttpClient _http = new HttpClient(new HttpClientHandler
+ {
+ ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
+ });
///
/// hls等录像回放
@@ -416,11 +417,12 @@ namespace Video.DomainService
if (dto == null || dto.Data == null)
{
_logger.LogWarning("实时流请求失败:请求参数不能为空");
- return new DaHApiResult { Success = false, Code = "1009", Msg = "请求参数不能为空" };
+ return new DaHApiResult { Success = false, Code = "1005", Msg = "请求参数不能为空" };
}
var clientId = _configuration["DahuaAuth:ClientId"];
var token = await _tokenProviderService.GetTokenAsync(clientId!);
+ _logger.LogWarning($"我的token: {token}");
if (!_tokenProviderService.IsTokenValid(token))
{
_logger.LogWarning("rtsp实时预览接口方式:token无效");
@@ -432,7 +434,7 @@ namespace Video.DomainService
{
url = $"https://{ipaddress}/evo-apigw/admin/API/MTS/Video/StartVideo";
}
-
+ _logger.LogWarning($"我的url: {url}");
using var req = new HttpRequestMessage(HttpMethod.Post, url)
{
Content = JsonContent.Create(dto) // 等价于 PostAsJsonAsync,但和 req 绑定
@@ -447,14 +449,15 @@ namespace Video.DomainService
if (!resp.IsSuccessStatusCode)
{
_logger.LogWarning("实时流请求 HTTP 失败: {Status}, Body: {Body}", (int)resp.StatusCode, body);
- return new DaHApiResult { Success = false, Code = "1010", Msg = $"HTTP错误 {(int)resp.StatusCode}" };
+ _logger.LogWarning($"{resp.StatusCode}: {body}");
+ return new DaHApiResult { Success = false, Code = "1014", Msg = $"HTTP错误 {(int)resp.StatusCode}" };
}
-
+ _logger.LogWarning($"大华实时流请求返回body{body}");
var result = JsonSerializer.Deserialize>(body);
if (result == null || !result.Success)
{
- _logger.LogWarning("实时流请求业务失败: {Body}", body);
- return new DaHApiResult { Success = false, Code = "1010", Msg = "实时流请求失败" };
+ _logger.LogWarning("实时流请求业务反序列化失败: {Body}", body);
+ return new DaHApiResult { Success = false, Code = "1013", Msg = "实时流请求业务反序列化失败" };
}
result.Data!.Url = UrlHostReplacer.ReplaceHost(
result.Data.Url,
@@ -466,8 +469,9 @@ namespace Video.DomainService
}
catch (Exception ex)
{
- _logger.LogError(ex, "大华实时流请求出错");
- return new DaHApiResult { Success = false, Code = "1010", Msg = "实时流请求失败" };
+ _logger.LogError(ex, $"大华实时流请求出错{ex.Message}");
+ _logger.LogWarning($"{ex.Message}");
+ return new DaHApiResult { Success = false, Code = "1012", Msg = $"实时流请求失败{ex.Message}" };
}
}