using log4net; using Microsoft.AspNetCore.Mvc.RazorPages; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using RabbitMQ.Client; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Security.Principal; using System.Text; using System.Threading.Tasks; namespace Ropin.Inspection.Common.Helper { public class AIProjectHelper { private readonly IHttpClientFactory _httpClientFactory; private static readonly ILog log = LogManager.GetLogger(typeof(AIProjectHelper)); public static AILoginOutput loginResult; public AIProjectHelper(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } /// /// 获取token /// /// public async Task GetToken() { if (loginResult != null) { return loginResult; } AILoginOutput token = null; //string url = string.Format(AIConst.ApiUrl+ AIConst.loginUrl); string url =AIConst.ApiUrl + AIConst.loginUrl; using (var client = _httpClientFactory.CreateClient()) { var login = new { Account = AIConst.userName, Password = AIConst.userPwd }; var loginStr = JsonConvert.SerializeObject(login); var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = new StringContent(loginStr, System.Text.Encoding.UTF8, "application/json") }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); try { var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); // 确保响应状态码为成功 if (response.IsSuccessStatusCode) { var strReturn = await response.Content.ReadAsStringAsync(); AIModel tencentToken = JsonConvert.DeserializeObject>(strReturn); if (tencentToken != null && tencentToken.code=="200") { token = tencentToken.result; } } } catch (HttpRequestException ex) { log.Info($"AItoken异常【{ex.Message}】"); } catch (JsonException ex) { log.Info($"解析AIToken响应异常【{ex.Message}】"); } catch (Exception ex) { log.Info($"获取AIToken时发生未知异常【{ex.Message}】"); } } loginResult = token; return token; } /// /// 获取历史报警记录 /// /// public async Task> GetHistoricAlmrecord(string Devno, int Page = 1, int pageSize = 10,long? entityId=null) { if (loginResult == null) { loginResult = await GetToken(); } if (loginResult==null|| loginResult.RefreshToken==null) { log.Info($"AI-获取历史报警记录-token 为空"); return null; } AISqlSugarPagedList almData= null; string url = AIConst.ApiUrl + AIConst.HistoricAlmrecord; using (var client = _httpClientFactory.CreateClient()) { entityId = entityId ?? AIConst.AIEntityId; // 设置请求头,添加 token client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginResult.AccessToken); var data = new { isPage= Page==0?false:true, Page= Page, PageSize=pageSize, SearchKey = Devno, EntityId= entityId, ThirdParty = "", Device_Type="", Event_Code = "", Mistake=false, //StartTimeRange = ["",""] }; var dataStr = JsonConvert.SerializeObject(data); var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = new StringContent(dataStr, System.Text.Encoding.UTF8, "application/json") }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); try { var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); // 确保响应状态码为成功 if (response.IsSuccessStatusCode) { var strReturn = await response.Content.ReadAsStringAsync(); AIModel> ResponseRestult = JsonConvert.DeserializeObject>>(strReturn); if (ResponseRestult != null && ResponseRestult.code == "200") { almData = ResponseRestult.result; } } } catch (HttpRequestException ex) { log.Info($"AI-获取历史报警记录-异常【{ex.Message}】"); } catch (JsonException ex) { log.Info($"解析AI-获取历史报警记录-响应异常【{ex.Message}】"); } catch (Exception ex) { log.Info($"获取AI-获取历史报警记录-时发生未知异常【{ex.Message}】"); } } return almData; } /// /// 获取报警处理 /// /// public async Task> GetAlmDispose(string Devno, int Page = 1, int pageSize = 10, long? entityId = null) { if (loginResult == null) { loginResult = await GetToken(); } if (loginResult == null || loginResult.RefreshToken == null) { log.Info($"AI-获取历史报警记录-token 为空"); return null; } AISqlSugarPagedList almData = null; string url = AIConst.ApiUrl + AIConst.AlmDispose; using (var client = _httpClientFactory.CreateClient()) { entityId = entityId ?? AIConst.AIEntityId; // 设置请求头,添加 token client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginResult.AccessToken); var data = new { isPage = Page == 0 ? false : true, Page = Page, PageSize = pageSize, SearchKey = Devno, EntityId = entityId, ThirdParty = "", Device_Type = "", Event_Code = "", Mistake = false, //StartTimeRange = ["",""] }; var dataStr = JsonConvert.SerializeObject(data); var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = new StringContent(dataStr, System.Text.Encoding.UTF8, "application/json") }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); try { var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); // 确保响应状态码为成功 if (response.IsSuccessStatusCode) { var strReturn = await response.Content.ReadAsStringAsync(); AIModel> ResponseRestult = JsonConvert.DeserializeObject>>(strReturn); if (ResponseRestult != null && ResponseRestult.code == "200") { almData = ResponseRestult.result; } } } catch (HttpRequestException ex) { log.Info($"AI-获取历史报警记录-异常【{ex.Message}】"); } catch (JsonException ex) { log.Info($"解析AI-获取历史报警记录-响应异常【{ex.Message}】"); } catch (Exception ex) { log.Info($"获取AI-获取历史报警记录-时发生未知异常【{ex.Message}】"); } } return almData; } /// /// AI报警软删除 /// /// public async Task UpdateAlmIsDelete(long AlmId) { if (loginResult == null) { loginResult = await GetToken(); } if (loginResult == null || loginResult.RefreshToken == null) { log.Info($"AI-AI报警软删除-token 为空"); return false; } bool result=false; string url = AIConst.ApiUrl + AIConst.AlmDeleteDispose; using (var client = _httpClientFactory.CreateClient()) { // 设置请求头,添加 token client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginResult.AccessToken); var data = new { Id= AlmId }; var dataStr = JsonConvert.SerializeObject(data); var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = new StringContent(dataStr, System.Text.Encoding.UTF8, "application/json") }; request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); try { var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); // 确保响应状态码为成功 if (response.IsSuccessStatusCode) { var strReturn = await response.Content.ReadAsStringAsync(); AIModel ResponseRestult = JsonConvert.DeserializeObject>(strReturn); if (ResponseRestult != null && ResponseRestult.code == "200") { result =true; } } } catch (HttpRequestException ex) { log.Info($"AI报警软删除-异常【{ex.Message}】"); } catch (JsonException ex) { log.Info($"AI报警软删除-响应异常【{ex.Message}】"); } catch (Exception ex) { log.Info($"AI报警软删除-时发生未知异常【{ex.Message}】"); } } return result; } } public class AIModel { public string code { get; set; } public string type { get; set; } public string message { get; set; } public T result { get; set; } public string extras { get; set; } public string time { get; set; } } /// /// 用户登录结果 /// public class AILoginOutput { /// /// 令牌Token /// public string AccessToken { get; set; } /// /// 刷新Token /// public string RefreshToken { get; set; } private long UserId { get; set; } public void SetUserId(long userId) { UserId = userId; } public long GetUserId() { return UserId; } } /// /// 报警记录表输出参数 /// public class AlmRecordOutput { /// /// 主键Id /// public long Id { get; set; } /// /// 第三方 /// public string ThirdParty { get; set; } public string ThirdPartyName { get; set; } /// /// 设备Id /// public string Device_Id { get; set; } /// /// AI设备名称 /// public string AIDevName { get; set; } /// /// 通道ID /// public string? MonitorChannel { get; set; } /// /// 通道设备ID /// public string? MonitorDevice { get; set; } /// /// 设备通道在线状态 /// public string? MonitorChannelStatus { get; set; } /// /// 烟感设备名称 /// public string IotDevName { get; set; } /// /// 关联Id /// public string? Relation_Id { get; set; } /// /// 设备类型 /// public string? Device_Type { get; set; } /// /// 设备类型名称 /// public string? Device_TypeName { get; set; } /// /// 事件Id /// public string? Event_Id { get; set; } /// /// 事件代码 /// public string Event_Code { get; set; } /// /// 事件名称 /// public string Event_Name { get; set; } /// /// 是否确认 /// public bool? Confirmed { get; set; } /// /// 是否关闭 /// public bool? Closed { get; set; } /// /// 是否误报 /// public bool? Mistake { get; set; } /// /// 是否通知 /// public string? Notified { get; set; } /// /// 发生时间 /// public DateTime? StartTime { get; set; } /// /// 确认时间 /// public DateTime? ConfirmTime { get; set; } /// /// 关闭时间 /// public DateTime? EndTime { get; set; } /// /// 确认者Id /// public long? ConfirmUserId { get; set; } /// /// 确认者姓名 /// public string? ConfirmUserName { get; set; } /// /// 关闭者Id /// public long? CloseUserId { get; set; } /// /// 关闭者姓名 /// public string? CloseUserName { get; set; } /// /// 确认内容 /// public string? ConfrimContent { get; set; } /// /// 处理内容 /// public string? CloseContent { get; set; } /// /// 备注 /// public string? Remark { get; set; } /// /// 所属实体 /// public long? EntityId { get; set; } /// /// 实体 /// public string? EntityName { get; set; } /// /// 区域Id /// public long? AreaId { get; set; } /// /// 区域 /// public string? AreaName { get; set; } /// /// 全景图ID /// public string? PanoramaId { get; set; } /// /// 全景图Url /// public string? PanoramaUrl { get; set; } /// /// Roi框 /// public string? RoiJson { get; set; } /// /// NonRoi框 /// public string? NonRoiJson { get; set; } /// /// 检测框 /// public string? DetectionFrameJson { get; set; } /// /// 安装地址 /// public string? Address { get; set; } /// /// 安装位置 /// public string? Position { get; set; } /// /// 租户Id /// public long? TenantId { get; set; } /// /// 创建时间 /// public DateTime? CreateTime { get; set; } /// /// 更新时间 /// public DateTime? UpdateTime { get; set; } /// /// 创建者Id /// public long? CreateUserId { get; set; } /// /// 创建者姓名 /// public string? CreateUserName { get; set; } /// /// 修改者Id /// public long? UpdateUserId { get; set; } /// /// 修改者姓名 /// public string? UpdateUserName { get; set; } /// /// 软删除 /// public bool IsDelete { get; set; } } /// /// 分页泛型集合 /// /// public class AISqlSugarPagedList { /// /// 页码 /// public int Page { get; set; } /// /// 页容量 /// public int PageSize { get; set; } /// /// 总条数 /// public int Total { get; set; } /// /// 总页数 /// public int TotalPages { get; set; } /// /// 当前页集合 /// public IEnumerable Items { get; set; } /// /// 是否有上一页 /// public bool HasPrevPage { get; set; } /// /// 是否有下一页 /// public bool HasNextPage { get; set; } } public static class AIConst { /// /// 用户名-cszg /// public const string userName1 = "cszg"; /// /// 密码-cszg /// public const string userPwd1 = "04aac704c9490f242acf2d9b6e211da5bfae117737a627eacbc0d064414b13ad454833d6d4d38bc3fddd5108319960e38923e94b3f574616f43e8aaff09817e3d25b551b1e5e26c3a402ba1e42e4b58efdbc83357b62ac4f4369b2ce84ca5481541b5b2c683d52d32b6b"; /// /// 用户名-yszh /// public const string userName2 = "yszh"; /// /// 密码-yszh /// public const string userPwd2 = "cf8d0e72832c74b3e566aa83f677c4a35c28fdc3b091cce608949806339a44fb5f523729c1d22fc824e2ea411ab8cae7e373762ccba8641dd2050f04f27d1373c8326f6877668bec57e1c8deace9b2ac1398a5cb5b9eee04c996d8c774ad9c55946708db089e6416cf"; /// /// 用户名-ropin /// public const string userName = "ropin"; /// /// 密码-ropin /// public const string userPwd = "cfa965675d4efbbb0d4a8d5fadf08bad0f780759ab55a414564b87652a015ba44cd8a9ab79dbde503995f7fbffa6a3b1f6322e3d94a4309bed578d8c262e4a3702a4574d20d00d6d54194c7c09b7f4d54cd9d347640de197b1a8f35663c89019b6054415ec7bbb33ef458ecb"; public const long AIEntityId = 40124884581189; public const string ApiUrl = "https://ropiniot.com/prod-api/api"; public const string ApiUrl1 = "http://localhost:5005/api"; public const string loginUrl = "/sysAuth/loginNoCode"; public const string HistoricAlmrecord = "/AlmRecord/HistoryPage"; public const string AlmDispose = "/AlmRecord/NotPage"; public const string AlmDeleteDispose = "/AlmRecord/Delete"; } }