You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
9.5 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Infrastructure;
using Infrastructure.Helpers;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using OpenAuth.App.ServiceApp.Algo;
using OpenAuth.App.ServiceApp.Algo.Request;
using OpenAuth.App.ServiceApp.Request;
using OpenAuth.WebApi.Model.RabbitMQService;
using System.Text;
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";
private readonly RabbitMqListenerService _listener;
private readonly DaHuaAiApp _app;
public DaHuaAiController(RabbitMqListenerService listener, DaHuaAiApp app)
{
_listener = listener;
_app = app;
}
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"
}
};
var jsonBody = JsonConvert.SerializeObject(data);
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>
/// <param name="data">参数详见文档7.1.3.3. 创建行为场景分析任务</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> CreateTasks(DaHuaTaskInfo data)
{
await _listener.AddQueueBindingAsync("processing_event", "topic", $"event.behaviorAlarm.1.{data.channelId}");
return await PostJsonAsync("/processing/behavior/realtime/tasks", data);
}
/// <summary>
/// 模拟添加队列
/// </summary>
/// <param name="channelId"></param>
[HttpPost]
[AllowAnonymous]
public async void AddQueueBinding(string channelId)
{
await _listener.AddQueueBindingAsync("processing_event", "topic", $"event.trafficJunction.1.{channelId}");
}
/// <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 { });
}
/// <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 { });
}
/// <summary>
/// 大华数据分析
/// </summary>
/// <param name="firstId"></param>
/// <param name="secondId"></param>
[HttpPost]
[AllowAnonymous]
public async void BehaviorAlarm(string firstId, string secondId)
{
var mq = await RabbitMqSender.CreateAsync("123.132.248.154", 9103, "DHCloudg1", "Cloud0#4fCraQrm");
var dataList = await _app.BehaviorAlarm(firstId, secondId);
foreach (var data in dataList.Result)
{
await mq.SendAsync("event.capturePic.1.sdhc04", JsonConvert.SerializeObject(data));
}
}
/// <summary>
/// 测试插入数据
/// </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)
{
return await _app.AddImg(request.taskid, request.path, request.aiid,request.drone_info, request.tag);
}
#endregion
}
}