AIProjectHelper.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. using log4net;
  2. using Microsoft.AspNetCore.Mvc.RazorPages;
  3. using Newtonsoft.Json;
  4. using Newtonsoft.Json.Linq;
  5. using RabbitMQ.Client;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Net.Http;
  10. using System.Net.Http.Headers;
  11. using System.Security.Principal;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace Ropin.Inspection.Common.Helper
  15. {
  16. public class AIProjectHelper
  17. {
  18. private readonly IHttpClientFactory _httpClientFactory;
  19. private static readonly ILog log = LogManager.GetLogger(typeof(AIProjectHelper));
  20. public static AILoginOutput loginResult;
  21. public AIProjectHelper(IHttpClientFactory httpClientFactory)
  22. {
  23. _httpClientFactory = httpClientFactory;
  24. }
  25. /// <summary>
  26. /// 获取token
  27. /// </summary>
  28. /// <returns></returns>
  29. public async Task<AILoginOutput> GetToken()
  30. {
  31. if (loginResult != null)
  32. {
  33. return loginResult;
  34. }
  35. AILoginOutput token = null;
  36. //string url = string.Format(AIConst.ApiUrl+ AIConst.loginUrl);
  37. string url =AIConst.ApiUrl + AIConst.loginUrl;
  38. using (var client = _httpClientFactory.CreateClient())
  39. {
  40. var login = new
  41. {
  42. Account = AIConst.userName,
  43. Password = AIConst.userPwd
  44. };
  45. var loginStr = JsonConvert.SerializeObject(login);
  46. var request = new HttpRequestMessage(HttpMethod.Post, url)
  47. {
  48. Content = new StringContent(loginStr, System.Text.Encoding.UTF8, "application/json")
  49. };
  50. request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  51. try
  52. {
  53. var response = await client.SendAsync(request);
  54. response.EnsureSuccessStatusCode(); // 确保响应状态码为成功
  55. if (response.IsSuccessStatusCode)
  56. {
  57. var strReturn = await response.Content.ReadAsStringAsync();
  58. AIModel<AILoginOutput> tencentToken = JsonConvert.DeserializeObject<AIModel<AILoginOutput>>(strReturn);
  59. if (tencentToken != null && tencentToken.code=="200")
  60. {
  61. token = tencentToken.result;
  62. }
  63. }
  64. }
  65. catch (HttpRequestException ex)
  66. {
  67. log.Info($"AItoken异常【{ex.Message}】");
  68. }
  69. catch (JsonException ex)
  70. {
  71. log.Info($"解析AIToken响应异常【{ex.Message}】");
  72. }
  73. catch (Exception ex)
  74. {
  75. log.Info($"获取AIToken时发生未知异常【{ex.Message}】");
  76. }
  77. }
  78. loginResult = token;
  79. return token;
  80. }
  81. /// <summary>
  82. /// 获取历史报警记录
  83. /// </summary>
  84. /// <returns></returns>
  85. public async Task<AISqlSugarPagedList<AlmRecordOutput>> GetHistoricAlmrecord(string Devno, int Page = 1, int pageSize = 10)
  86. {
  87. if (loginResult == null)
  88. {
  89. loginResult = await GetToken();
  90. }
  91. if (loginResult==null|| loginResult.RefreshToken==null)
  92. {
  93. log.Info($"AI-获取历史报警记录-token 为空");
  94. }
  95. AISqlSugarPagedList<AlmRecordOutput> almData= null;
  96. string url = AIConst.ApiUrl + AIConst.HistoricAlmrecord;
  97. using (var client = _httpClientFactory.CreateClient())
  98. {
  99. // 设置请求头,添加 token
  100. client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginResult.AccessToken);
  101. var data = new
  102. {
  103. isPage= Page==0?false:true,
  104. Page= Page,
  105. PageSize=pageSize,
  106. SearchKey = Devno,
  107. ThirdParty="",
  108. Device_Type="",
  109. Event_Code = "",
  110. Mistake=false,
  111. //StartTimeRange = ["",""]
  112. };
  113. var dataStr = JsonConvert.SerializeObject(data);
  114. var request = new HttpRequestMessage(HttpMethod.Post, url)
  115. {
  116. Content = new StringContent(dataStr, System.Text.Encoding.UTF8, "application/json")
  117. };
  118. request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  119. try
  120. {
  121. var response = await client.SendAsync(request);
  122. response.EnsureSuccessStatusCode(); // 确保响应状态码为成功
  123. if (response.IsSuccessStatusCode)
  124. {
  125. var strReturn = await response.Content.ReadAsStringAsync();
  126. AIModel<AISqlSugarPagedList<AlmRecordOutput>> ResponseRestult = JsonConvert.DeserializeObject<AIModel<AISqlSugarPagedList<AlmRecordOutput>>>(strReturn);
  127. if (ResponseRestult != null && ResponseRestult.code == "200")
  128. {
  129. almData = ResponseRestult.result;
  130. }
  131. }
  132. }
  133. catch (HttpRequestException ex)
  134. {
  135. log.Info($"AI-获取历史报警记录-异常【{ex.Message}】");
  136. }
  137. catch (JsonException ex)
  138. {
  139. log.Info($"解析AI-获取历史报警记录-响应异常【{ex.Message}】");
  140. }
  141. catch (Exception ex)
  142. {
  143. log.Info($"获取AI-获取历史报警记录-时发生未知异常【{ex.Message}】");
  144. }
  145. }
  146. return almData;
  147. }
  148. }
  149. public class AIModel<T>
  150. {
  151. public string code { get; set; }
  152. public string type { get; set; }
  153. public string message { get; set; }
  154. public T result { get; set; }
  155. public string extras { get; set; }
  156. public string time { get; set; }
  157. }
  158. /// <summary>
  159. /// 用户登录结果
  160. /// </summary>
  161. public class AILoginOutput
  162. {
  163. /// <summary>
  164. /// 令牌Token
  165. /// </summary>
  166. public string AccessToken { get; set; }
  167. /// <summary>
  168. /// 刷新Token
  169. /// </summary>
  170. public string RefreshToken { get; set; }
  171. private long UserId { get; set; }
  172. public void SetUserId(long userId)
  173. {
  174. UserId = userId;
  175. }
  176. public long GetUserId()
  177. {
  178. return UserId;
  179. }
  180. }
  181. /// <summary>
  182. /// 报警记录表输出参数
  183. /// </summary>
  184. public class AlmRecordOutput
  185. {
  186. /// <summary>
  187. /// 主键Id
  188. /// </summary>
  189. public long Id { get; set; }
  190. /// <summary>
  191. /// 第三方
  192. /// </summary>
  193. public string ThirdParty { get; set; }
  194. public string ThirdPartyName { get; set; }
  195. /// <summary>
  196. /// 设备Id
  197. /// </summary>
  198. public string Device_Id { get; set; }
  199. /// <summary>
  200. /// AI设备名称
  201. /// </summary>
  202. public string AIDevName { get; set; }
  203. /// <summary>
  204. /// 通道ID
  205. /// </summary>
  206. public string? MonitorChannel { get; set; }
  207. /// <summary>
  208. /// 通道设备ID
  209. /// </summary>
  210. public string? MonitorDevice { get; set; }
  211. /// <summary>
  212. /// 设备通道在线状态
  213. /// </summary>
  214. public string? MonitorChannelStatus { get; set; }
  215. /// <summary>
  216. /// 烟感设备名称
  217. /// </summary>
  218. public string IotDevName { get; set; }
  219. /// <summary>
  220. /// 关联Id
  221. /// </summary>
  222. public string? Relation_Id { get; set; }
  223. /// <summary>
  224. /// 设备类型
  225. /// </summary>
  226. public string? Device_Type { get; set; }
  227. /// <summary>
  228. /// 设备类型名称
  229. /// </summary>
  230. public string? Device_TypeName { get; set; }
  231. /// <summary>
  232. /// 事件Id
  233. /// </summary>
  234. public string? Event_Id { get; set; }
  235. /// <summary>
  236. /// 事件代码
  237. /// </summary>
  238. public string Event_Code { get; set; }
  239. /// <summary>
  240. /// 事件名称
  241. /// </summary>
  242. public string Event_Name { get; set; }
  243. /// <summary>
  244. /// 是否确认
  245. /// </summary>
  246. public bool? Confirmed { get; set; }
  247. /// <summary>
  248. /// 是否关闭
  249. /// </summary>
  250. public bool? Closed { get; set; }
  251. /// <summary>
  252. /// 是否误报
  253. /// </summary>
  254. public bool? Mistake { get; set; }
  255. /// <summary>
  256. /// 是否通知
  257. /// </summary>
  258. public string? Notified { get; set; }
  259. /// <summary>
  260. /// 发生时间
  261. /// </summary>
  262. public DateTime? StartTime { get; set; }
  263. /// <summary>
  264. /// 确认时间
  265. /// </summary>
  266. public DateTime? ConfirmTime { get; set; }
  267. /// <summary>
  268. /// 关闭时间
  269. /// </summary>
  270. public DateTime? EndTime { get; set; }
  271. /// <summary>
  272. /// 确认者Id
  273. /// </summary>
  274. public long? ConfirmUserId { get; set; }
  275. /// <summary>
  276. /// 确认者姓名
  277. /// </summary>
  278. public string? ConfirmUserName { get; set; }
  279. /// <summary>
  280. /// 关闭者Id
  281. /// </summary>
  282. public long? CloseUserId { get; set; }
  283. /// <summary>
  284. /// 关闭者姓名
  285. /// </summary>
  286. public string? CloseUserName { get; set; }
  287. /// <summary>
  288. /// 确认内容
  289. /// </summary>
  290. public string? ConfrimContent { get; set; }
  291. /// <summary>
  292. /// 处理内容
  293. /// </summary>
  294. public string? CloseContent { get; set; }
  295. /// <summary>
  296. /// 备注
  297. /// </summary>
  298. public string? Remark { get; set; }
  299. /// <summary>
  300. /// 所属实体
  301. /// </summary>
  302. public long? EntityId { get; set; }
  303. /// <summary>
  304. /// 实体
  305. /// </summary>
  306. public string? EntityName { get; set; }
  307. /// <summary>
  308. /// 区域Id
  309. /// </summary>
  310. public long? AreaId { get; set; }
  311. /// <summary>
  312. /// 区域
  313. /// </summary>
  314. public string? AreaName { get; set; }
  315. /// <summary>
  316. /// 全景图ID
  317. /// </summary>
  318. public string? PanoramaId { get; set; }
  319. /// <summary>
  320. /// 全景图Url
  321. /// </summary>
  322. public string? PanoramaUrl { get; set; }
  323. /// <summary>
  324. /// Roi框
  325. /// </summary>
  326. public string? RoiJson { get; set; }
  327. /// <summary>
  328. /// NonRoi框
  329. /// </summary>
  330. public string? NonRoiJson { get; set; }
  331. /// <summary>
  332. /// 检测框
  333. /// </summary>
  334. public string? DetectionFrameJson { get; set; }
  335. /// <summary>
  336. /// 安装地址
  337. /// </summary>
  338. public string? Address { get; set; }
  339. /// <summary>
  340. /// 安装位置
  341. /// </summary>
  342. public string? Position { get; set; }
  343. /// <summary>
  344. /// 租户Id
  345. /// </summary>
  346. public long? TenantId { get; set; }
  347. /// <summary>
  348. /// 创建时间
  349. /// </summary>
  350. public DateTime? CreateTime { get; set; }
  351. /// <summary>
  352. /// 更新时间
  353. /// </summary>
  354. public DateTime? UpdateTime { get; set; }
  355. /// <summary>
  356. /// 创建者Id
  357. /// </summary>
  358. public long? CreateUserId { get; set; }
  359. /// <summary>
  360. /// 创建者姓名
  361. /// </summary>
  362. public string? CreateUserName { get; set; }
  363. /// <summary>
  364. /// 修改者Id
  365. /// </summary>
  366. public long? UpdateUserId { get; set; }
  367. /// <summary>
  368. /// 修改者姓名
  369. /// </summary>
  370. public string? UpdateUserName { get; set; }
  371. /// <summary>
  372. /// 软删除
  373. /// </summary>
  374. public bool IsDelete { get; set; }
  375. }
  376. /// <summary>
  377. /// 分页泛型集合
  378. /// </summary>
  379. /// <typeparam name="TEntity"></typeparam>
  380. public class AISqlSugarPagedList<TEntity>
  381. {
  382. /// <summary>
  383. /// 页码
  384. /// </summary>
  385. public int Page { get; set; }
  386. /// <summary>
  387. /// 页容量
  388. /// </summary>
  389. public int PageSize { get; set; }
  390. /// <summary>
  391. /// 总条数
  392. /// </summary>
  393. public int Total { get; set; }
  394. /// <summary>
  395. /// 总页数
  396. /// </summary>
  397. public int TotalPages { get; set; }
  398. /// <summary>
  399. /// 当前页集合
  400. /// </summary>
  401. public IEnumerable<TEntity> Items { get; set; }
  402. /// <summary>
  403. /// 是否有上一页
  404. /// </summary>
  405. public bool HasPrevPage { get; set; }
  406. /// <summary>
  407. /// 是否有下一页
  408. /// </summary>
  409. public bool HasNextPage { get; set; }
  410. }
  411. public static class AIConst
  412. {
  413. /// <summary>
  414. /// 用户名
  415. /// </summary>
  416. public const string userName1 = "cszg";
  417. /// <summary>
  418. /// 密码
  419. /// </summary>
  420. public const string userPwd1 = "04aac704c9490f242acf2d9b6e211da5bfae117737a627eacbc0d064414b13ad454833d6d4d38bc3fddd5108319960e38923e94b3f574616f43e8aaff09817e3d25b551b1e5e26c3a402ba1e42e4b58efdbc83357b62ac4f4369b2ce84ca5481541b5b2c683d52d32b6b";
  421. /// <summary>
  422. /// 用户名
  423. /// </summary>
  424. public const string userName = "yszh";
  425. /// <summary>
  426. /// 密码
  427. /// </summary>
  428. public const string userPwd = "cf8d0e72832c74b3e566aa83f677c4a35c28fdc3b091cce608949806339a44fb5f523729c1d22fc824e2ea411ab8cae7e373762ccba8641dd2050f04f27d1373c8326f6877668bec57e1c8deace9b2ac1398a5cb5b9eee04c996d8c774ad9c55946708db089e6416cf";
  429. public const string ApiUrl = "https://ropiniot.com/prod-api/api";
  430. public const string ApiUrl1 = "http://localhost:5005/api";
  431. public const string loginUrl = "/sysAuth/loginNoCode";
  432. public const string HistoricAlmrecord = "/AlmRecord/HistoryPage";
  433. }
  434. }