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)
{
if (loginResult == null)
{
loginResult = await GetToken();
}
if (loginResult==null|| loginResult.RefreshToken==null)
{
log.Info($"AI-获取历史报警记录-token 为空");
}
AISqlSugarPagedList almData= null;
string url = AIConst.ApiUrl + AIConst.HistoricAlmrecord;
using (var client = _httpClientFactory.CreateClient())
{
// 设置请求头,添加 token
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginResult.AccessToken);
var data = new
{
isPage= Page==0?false:true,
Page= Page,
PageSize=pageSize,
SearchKey = Devno,
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 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
{
///
/// 用户名
///
public const string userName1 = "cszg";
///
/// 密码
///
public const string userPwd1 = "04aac704c9490f242acf2d9b6e211da5bfae117737a627eacbc0d064414b13ad454833d6d4d38bc3fddd5108319960e38923e94b3f574616f43e8aaff09817e3d25b551b1e5e26c3a402ba1e42e4b58efdbc83357b62ac4f4369b2ce84ca5481541b5b2c683d52d32b6b";
///
/// 用户名
///
public const string userName = "yszh";
///
/// 密码
///
public const string userPwd = "cf8d0e72832c74b3e566aa83f677c4a35c28fdc3b091cce608949806339a44fb5f523729c1d22fc824e2ea411ab8cae7e373762ccba8641dd2050f04f27d1373c8326f6877668bec57e1c8deace9b2ac1398a5cb5b9eee04c996d8c774ad9c55946708db089e6416cf";
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";
}
}