LASAPlatform/OpenAuth.WebApi/Controllers/ServiceControllers/DaHuaAiController.cs

289 lines
10 KiB
C#
Raw Normal View History

2025-09-09 17:24:03 +08:00
using DocumentFormat.OpenXml.Bibliography;
using Infrastructure;
2025-08-14 10:22:13 +08:00
using Infrastructure.Helpers;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
2025-08-27 16:33:05 +08:00
using OpenAuth.App.ServiceApp.Algo;
using OpenAuth.App.ServiceApp.Algo.Request;
2025-08-14 10:22:13 +08:00
using OpenAuth.App.ServiceApp.Request;
2025-08-18 10:48:43 +08:00
using OpenAuth.WebApi.Model.RabbitMQService;
2025-08-27 16:33:05 +08:00
using System.Text;
2025-08-14 10:22:13 +08:00
namespace OpenAuth.WebApi.Controllers.ServiceControllers
{
/// <summary>
/// 大华ai接口
/// </summary>
[Route("api/[controller]/[action]")]
[ApiController]
public class DaHuaAiController : ControllerBase
{
private readonly string ak = "e3d019924e7f40089bcffba4";
private readonly string sk = "cf83a12caa155b994eb34fa9";
private readonly string baseUrl = "https://123.132.248.154:6405";
2025-08-18 10:48:43 +08:00
private readonly RabbitMqListenerService _listener;
2025-08-27 16:33:05 +08:00
private readonly DaHuaAiApp _app;
public DaHuaAiController(RabbitMqListenerService listener, DaHuaAiApp app)
2025-08-18 10:48:43 +08:00
{
_listener = listener;
2025-08-27 16:33:05 +08:00
_app = app;
2025-08-18 10:48:43 +08:00
}
2025-08-14 10:22:13 +08:00
private async Task<Response<string>> PostJsonAsync(string path, object body)
{
var handler = new HttpClientHandler
{
// 忽略服务器证书
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true
};
var headers = DHHeaderUtil.BuildHeader(ak, sk, "POST", path);
var url = $"{baseUrl}{path}";
using var httpClient = new HttpClient(handler);
foreach (var kv in headers)
{
httpClient.DefaultRequestHeaders.Add(kv.Key, kv.Value);
}
var jsonBody = JsonConvert.SerializeObject(body ?? new { });
var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
try
{
var response = await httpClient.PostAsync(url, content);
var responseContent = await response.Content.ReadAsStringAsync();
return new Response<string> { Result = responseContent };
}
catch (Exception ex)
{
return new Response<string> { Result = ex.Message };
}
}
/// <summary>
/// 分页查询车辆分析
/// </summary>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public Task<Response<string>> GetTasksList(int page, int limit)
{
return PostJsonAsync($"/processing/analysis/vehicle/tasks?start={page}&limit={limit}", new
{
channelIds = new[] { "sdhc" }
});
}
[HttpPost]
[AllowAnonymous]
[Obsolete]
public async Task<Response<string>> GetTasksList1(int page, int limit)
{
var handler = new HttpClientHandler();
// 忽略服务器证书
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
// 假设 DHHeaderUtil 返回 Dictionary<string, string>
string ak = "e3d019924e7f40089bcffba4";
string sk = "cf83a12caa155b994eb34fa9";
var headers = DHHeaderUtil.BuildHeader(ak, sk, "POST", $"/processing/analysis/vehicle/tasks?start={page}&limit={limit}");
// 要请求的 URL
var url = $"https://123.132.248.154:6405/processing/analysis/vehicle/tasks?start={page}&limit={limit}";
// 请求体JSON
var data = new
{
channelIds = new[]
{
"sdhc"
}
};
2025-08-18 15:34:42 +08:00
var jsonBody = JsonConvert.SerializeObject(data);
2025-08-14 10:22:13 +08:00
using var httpClient = new HttpClient(handler);
// 添加请求头
// 只把非 Content-Type 的头加到 request
foreach (var kv in headers)
{
if (kv.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase))
continue;
httpClient.DefaultRequestHeaders.Add(kv.Key, kv.Value);
}
// 创建 HttpContent
var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
try
{
var response = await httpClient.PostAsync(url, content);
var responseContent = await response.Content.ReadAsStringAsync();
return new Response<string>()
{
Result = responseContent
};
}
catch (Exception ex)
{
return new Response<string>()
{
Result = ex.Message
};
}
}
/// <summary>
/// 获取算法列表
/// </summary>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public Task<Response<string>> GetsupportList(int page, int limit)
{
return PostJsonAsync($"/processing/engine/algorithms/support?currentPage={page}&pageSize={limit}", new { });
}
/// <summary>
/// 查询算法参数描述文件接口
/// </summary>
/// <param name="version"></param>
/// <param name="functionType"></param>
/// <param name="algorithmCode"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public Task<Response<string>> Getconfig(string version, int functionType, string algorithmCode)
{
return PostJsonAsync("/processing/engine/algorithms/isd/config/get", new
{
version,
functionType,
algorithmCode
});
}
/// <summary>
/// 创建行为场景分析任务
/// </summary>
2025-08-15 14:26:42 +08:00
/// <param name="data">参数详见文档7.1.3.3. 创建行为场景分析任务</param>
2025-08-14 10:22:13 +08:00
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
2025-08-18 10:48:43 +08:00
public async Task<Response<string>> CreateTasks(DaHuaTaskInfo data)
{
2025-08-19 09:53:19 +08:00
await _listener.AddQueueBindingAsync("processing_event", "topic", $"event.behaviorAlarm.1.{data.channelId}");
2025-08-18 10:48:43 +08:00
return await PostJsonAsync("/processing/behavior/realtime/tasks", data);
}
/// <summary>
/// 模拟添加队列
/// </summary>
/// <param name="channelId"></param>
[HttpPost]
[AllowAnonymous]
public async void AddQueueBinding(string channelId)
2025-08-14 10:22:13 +08:00
{
2025-08-18 10:48:43 +08:00
await _listener.AddQueueBindingAsync("processing_event", "topic", $"event.trafficJunction.1.{channelId}");
2025-08-14 10:22:13 +08:00
}
/// <summary>
/// 删除行为场景分析任务
/// </summary>
/// <param name="taskId">行为场景分析任务id</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public Task<Response<string>> DeleteTasks(string taskId)
{
return PostJsonAsync($"/processing/behavior/realtime/tasks/{taskId}", new { });
}
2025-08-15 14:26:42 +08:00
/// <summary>
/// 查看场景认知通用分析任务列表
/// </summary>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <param name="analysisType">分析类型仅支持0智能分析</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public Task<Response<string>> GetTasks(int page, int limit, int analysisType)
{
return PostJsonAsync($"/processing/behavior/realtime/tasks?currentPage={page}&pageSize={limit}&analysisType={analysisType}", new { });
}
/// <summary>
/// 获取智能流播放地址
/// </summary>
/// <param name="id">taskId</param>
/// <param name="streamType">智能流类型当前仅支持2: 行为</param>
/// <param name="type">行为场景智能流仅支持type=1</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public Task<Response<string>> GetChannel(string id, int streamType, int type)
{
return PostJsonAsync($"/processing/inner/play/channel/{id}?streamType={streamType}&type={type}", new { });
}
2025-08-27 16:33:05 +08:00
/// <summary>
/// 大华数据分析
/// </summary>
/// <param name="firstId"></param>
/// <param name="secondId"></param>
2025-09-12 17:23:24 +08:00
/// <param name="cdId"></param>
2025-08-27 16:33:05 +08:00
[HttpPost]
2025-09-10 13:41:50 +08:00
public async Task<Response<string>> BehaviorAlarm(string firstId, string secondId, string cdId)
2025-08-27 16:33:05 +08:00
{
var mq = await RabbitMqSender.CreateAsync("123.132.248.154", 9103, "DHCloudg1", "Cloud0#4fCraQrm");
2025-09-10 10:37:23 +08:00
var dataList = await _app.BehaviorAlarm(firstId, secondId, cdId);
2025-08-27 16:33:05 +08:00
foreach (var data in dataList.Result)
{
await mq.SendAsync("event.capturePic.1.sdhc04", JsonConvert.SerializeObject(data));
}
2025-09-12 09:47:42 +08:00
await _app.UpdateState(cdId);
2025-09-10 13:41:50 +08:00
return new Response<string>()
{
Code = 200,
Result = "执行成功"
};
2025-08-27 16:33:05 +08:00
}
/// <summary>
/// 测试大华
/// </summary>
/// <param name="info"></param>
/// <param name="detectRegionJson"></param>
[HttpPost]
[AllowAnonymous]
public async void AddDaHuaSmokeDetectionImg(string info)
{
await _app.AddDaHuaSmokeDetectionImg(info);
}
2025-09-10 13:41:50 +08:00
///// <summary>
///// 测试大华
///// </summary>
///// <param name="info"></param>
///// <param name="detectRegionJson"></param>
//[HttpPost]
//[AllowAnonymous]
//public async void DrawingImgAndUploadAsync(string info, int[][] detectRegionJson)
//{
// await _app.DrawingImgAndUpload(info, detectRegionJson);
2025-09-09 17:24:03 +08:00
2025-09-10 13:41:50 +08:00
//}
2025-09-09 17:24:03 +08:00
/// <summary>
2025-08-27 16:33:05 +08:00
/// 测试插入数据
/// </summary>
/// <param name="info"></param>
[HttpPost]
[AllowAnonymous]
public async void AddBehaviorAlarm(string info)
{
await _app.AddDaHuaImg(info);
}
#region 接收本地模型数据
[HttpPost]
[AllowAnonymous]
public async Task<Response<bool>> AddImg([FromBody] AiImgReq request)
{
2025-09-09 17:24:03 +08:00
return await _app.AddImg(request.taskid, request.path, request.aiid, request.drone_info, request.tag);
2025-08-27 16:33:05 +08:00
}
#endregion
2025-08-14 10:22:13 +08:00
}
}