|
@@ -11,114 +11,115 @@ using System.Security.Cryptography;
|
|
|
namespace Hotline.Ai.Jths
|
|
|
{
|
|
|
public class AiQualityService : IAiQualityService
|
|
|
- {
|
|
|
- private readonly RestClient _client;
|
|
|
- private readonly string _baseUrl;
|
|
|
+ {
|
|
|
+ private readonly RestClient _client;
|
|
|
+ private readonly string _baseUrl;
|
|
|
|
|
|
- public AiQualityService(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)
|
|
|
- {
|
|
|
- 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 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);
|
|
|
- }
|
|
|
+ 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}");
|
|
|
- }
|
|
|
- }
|
|
|
+ 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);
|
|
|
- }
|
|
|
+ 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}");
|
|
|
- }
|
|
|
- }
|
|
|
+ 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();
|
|
|
- }
|
|
|
+ /// <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);
|
|
|
- }
|
|
|
- }
|
|
|
+ private static string Base64En(string? model)
|
|
|
+ {
|
|
|
+ var bytes = Encoding.UTF8.GetBytes(model);
|
|
|
+ return Convert.ToBase64String(bytes);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|