AiQualityService.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using Hotline.Ai.Quality;
  2. using RestSharp;
  3. using Fw.Utility.UnifyResponse;
  4. using Hotline.Share.Dtos.Quality;
  5. using Hotline.CallCenter.Calls;
  6. using Hotline.Orders;
  7. using Newtonsoft.Json;
  8. using System.Text;
  9. using System.Security.Cryptography;
  10. using Org.BouncyCastle.Tls;
  11. namespace Hotline.Ai.Jths
  12. {
  13. public class AiQualityService : IAiQualityService
  14. {
  15. private readonly RestClient _client;
  16. private readonly string _baseUrl;
  17. public AiQualityService(string baseUrl)
  18. {
  19. _client = new RestClient();
  20. _baseUrl = baseUrl;
  21. }
  22. public async Task CreateAiOrderQualityTask(
  23. string id,
  24. string audioFile,
  25. string fromNo,
  26. DateTime? callStartTime,
  27. string viteRecordPrefix,
  28. string ywlxString,
  29. CancellationToken cancellationToken)
  30. {
  31. if (string.IsNullOrEmpty(audioFile)) return;
  32. var fileExtension = Path.GetExtension(audioFile);
  33. if (!string.IsNullOrEmpty(fileExtension) && fileExtension.StartsWith('.'))
  34. fileExtension = fileExtension.Substring(1);
  35. //var ywlx = !string.IsNullOrEmpty(ywlxString) ? ywlxString : model.Source.ToString();
  36. var agentChannel = "AiAnswered".Equals(ywlxString) ? "2" : "3";
  37. List <AiQualityDto> datalist = new List<AiQualityDto>();
  38. AiQualityDto aiQuality = new AiQualityDto
  39. {
  40. RecordID = id,
  41. RecordPath = viteRecordPrefix + audioFile,
  42. AgentID = "1001",
  43. CallNumber = fromNo,
  44. CallTime = callStartTime?.ToString("yyyy-MM-dd HH:mm:ss") ?? string.Empty,
  45. RecordForm = fileExtension,//recordForm,
  46. ywlx = ywlxString,
  47. AgentChannel = agentChannel
  48. };
  49. datalist.Add(aiQuality);
  50. var data = JsonConvert.SerializeObject(datalist);
  51. var baseUrl = new Uri(_baseUrl);
  52. await ExecuteAsync(baseUrl.ToString() + "routeinfo/api", Method.Post, data, cancellationToken);
  53. }
  54. public async Task<ApiResponse<TResponse>> ExecuteAsync<TRequest, TResponse>(string path, Method httpMethod,
  55. TRequest request, CancellationToken cancellationToken)
  56. where TRequest : class
  57. {
  58. var req = new RestRequest(path, httpMethod);
  59. if (httpMethod is Method.Get)
  60. {
  61. req.AddObject(request);
  62. }
  63. else
  64. {
  65. req.AddJsonBody(request);
  66. }
  67. try
  68. {
  69. var response = await _client.ExecuteAsync<ApiResponse<TResponse>>(req, cancellationToken);
  70. return response.Data;
  71. }
  72. catch (Exception e)
  73. {
  74. throw new HttpRequestException($"智能质检平台错误,Error: {e.Message}");
  75. }
  76. }
  77. public async Task<ApiResponse> ExecuteAsync<TRequest>(string path, Method httpMethod, TRequest request,
  78. CancellationToken cancellationToken)
  79. where TRequest : class
  80. {
  81. var req = new RestRequest(path, httpMethod);
  82. req.AddHeader("content-type", "application/json");
  83. req.AddHeader("token", "");
  84. req.AddHeader("version", "V1.0");
  85. var sign = MD5Encrypt(request.ToString());
  86. req.AddHeader("sign", sign);
  87. req.AddHeader("signType", "md5");
  88. req.AddHeader("appkey", "MTAwMDAx");
  89. if (httpMethod is Method.Get)
  90. {
  91. req.AddObject(request);
  92. }
  93. else
  94. {
  95. req.AddJsonBody(request);
  96. }
  97. try
  98. {
  99. var response = await _client.ExecuteAsync<ApiResponse>(req, cancellationToken);
  100. return response.Data;
  101. }
  102. catch (Exception e)
  103. {
  104. throw new HttpRequestException($"智能质检平台错误,Error: {e.Message}");
  105. }
  106. }
  107. /// <summary>
  108. /// MD5加密
  109. /// </summary>
  110. /// <param name="input">需要加密的字符串</param>
  111. /// <returns></returns>
  112. private static string MD5Encrypt(string? input)
  113. {
  114. using var md5 = MD5.Create();
  115. var t = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
  116. var sb = new StringBuilder(32);
  117. for (var i = 0; i < t.Length; i++)
  118. sb.Append(t[i].ToString("x").PadLeft(2, '0'));
  119. return sb.ToString();
  120. }
  121. private static string Base64En(string? model)
  122. {
  123. var bytes = Encoding.UTF8.GetBytes(model);
  124. return Convert.ToBase64String(bytes);
  125. }
  126. }
  127. }