123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- using Hotline.Ai.Quality;
- using RestSharp;
- using Fw.Utility.UnifyResponse;
- using Hotline.Share.Dtos.Quality;
- using Hotline.CallCenter.Calls;
- using Hotline.Orders;
- using Newtonsoft.Json;
- using System.Text;
- using System.Security.Cryptography;
- namespace Hotline.Ai.Jths
- {
- public class AiQualityService : IAiQualityService
- {
- private readonly RestClient _client;
- private readonly string _baseUrl;
- public AiQualityService(string baseUrl)
- {
- _client = new RestClient();
- _baseUrl = baseUrl;
- }
- public async Task CreateAiOrderQualityTask(Hotline.Quality.Quality model, TrCallRecord? call, Order order, CancellationToken cancellationToken)
- {
- if (string.IsNullOrEmpty(call?.RecordingFileName)) return;
- var fileName = call.RecordingFileName.Split(".");
- var length = fileName.Count() - 1;
- var recordForm = fileName.Any() && fileName.Length > 1 ? fileName[length] : string.Empty;
- List<AiQualityDto> datalist = new List<AiQualityDto>();
- AiQualityDto aiQuality = new AiQualityDto
- {
- RecordID = model.Id,
- RecordPath = call.RecordingFileUrl,
- AgentID = "1001",
- CallNumber = call.CPN,
- CallTime = call.CreatedTime.ToString("yyyy-MM-dd HH:mm:ss"),
- RecordForm = recordForm,
- ywlx = model.Source.ToString(),
- };
- datalist.Add(aiQuality);
- var data = JsonConvert.SerializeObject(datalist);
- await ExecuteAsync(_baseUrl + "routeinfo/api", Method.Post, data, cancellationToken);
- }
- public async Task<ApiResponse<TResponse>> ExecuteAsync<TRequest, TResponse>(string path, Method httpMethod,
- TRequest request, CancellationToken cancellationToken)
- where TRequest : class
- {
- var req = new RestRequest(path, httpMethod);
- if (httpMethod is Method.Get)
- {
- req.AddObject(request);
- }
- else
- {
- req.AddJsonBody(request);
- }
- try
- {
- var response = await _client.ExecuteAsync<ApiResponse<TResponse>>(req, cancellationToken);
- return response.Data;
- }
- catch (Exception e)
- {
- throw new HttpRequestException($"智能质检平台错误,Error: {e.Message}");
- }
- }
- public async Task<ApiResponse> ExecuteAsync<TRequest>(string path, Method httpMethod, TRequest request,
- CancellationToken cancellationToken)
- where TRequest : class
- {
- var req = new RestRequest(path, httpMethod);
- req.AddHeader("content-type", "application/json");
- req.AddHeader("token", "");
- req.AddHeader("version", "V1.0");
- var sign = MD5Encrypt(request.ToString());
- req.AddHeader("sign", sign);
- req.AddHeader("signType", "md5");
- req.AddHeader("appkey", "MTAwMDAx");
- if (httpMethod is Method.Get)
- {
- req.AddObject(request);
- }
- else
- {
- req.AddJsonBody(request);
- }
- try
- {
- var response = await _client.ExecuteAsync<ApiResponse>(req, cancellationToken);
- return response.Data;
- }
- catch (Exception e)
- {
- throw new HttpRequestException($"智能质检平台错误,Error: {e.Message}");
- }
- }
- /// <summary>
- /// MD5加密
- /// </summary>
- /// <param name="input">需要加密的字符串</param>
- /// <returns></returns>
- private static string MD5Encrypt(string? input)
- {
- using var md5 = MD5.Create();
- var t = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
- var sb = new StringBuilder(32);
- for (var i = 0; i < t.Length; i++)
- sb.Append(t[i].ToString("x").PadLeft(2, '0'));
- return sb.ToString();
- }
- private static string Base64En(string? model)
- {
- var bytes = Encoding.UTF8.GetBytes(model);
- return Convert.ToBase64String(bytes);
- }
- }
- }
|