AiQualityService.cs 4.8 KB

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