using Fw.Utility.UnifyResponse; using Hotline.Ai.Jths.OrderVisits; using Hotline.Ai.Visit; using Hotline.Orders; using Hotline.Share.Enums.Order; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using RestSharp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Hotline.Ai.Jths { public class AiVisitService : IAiVisitService { private readonly RestClient _client; private readonly string _baseUrl; private readonly string _appkey; private readonly string _serviceversion; private readonly string _sceneuid; private readonly string _ruleuid; private ILogger _logger; public AiVisitService(string baseUrl, string appkey, string serviceversion, string sceneuid, string ruleuid) { _baseUrl = baseUrl; _appkey = appkey; _serviceversion = serviceversion; _sceneuid = sceneuid; _ruleuid = ruleuid; var options = new RestClientOptions(_baseUrl); _client = new RestClient(options); } public async Task CreateAiOrderVisitTask(AiOrderVisit aiOrderVisit, CancellationToken cancellationToken) { var requestData = new AiVisitServiceRequest() { BatchName = aiOrderVisit.Name, BatchStatus = 1, SceneUid = _sceneuid, Priority = 1, StartDate = aiOrderVisit.BeginTime.ToString("yyyy/MM/dd HH:mm:ss"), EndDate = aiOrderVisit.EndTime.ToString("yyyy/MM/dd HH:mm:ss"), FestivalBan = aiOrderVisit.FestivalBan, RuleType = aiOrderVisit.RuleType, RuleUid = _ruleuid, }; var taskDataList = new List(); foreach (var item in aiOrderVisit.AiOrderVisitDetails) { var taskData = new TaskData(); taskData.CalledNumber = item.OuterNo; taskData.VariableList = new List(); if (item.Order.FromGender!= EGender.Unknown) { if (!string.IsNullOrEmpty(item.Order.FromName)) { taskData.VariableList.Add(new Variable() { Code = "OC_SCENE_VAR_FIELD11", Value = item.Order.FromName }); } taskData.VariableList.Add(new Variable() { Code = "OC_SCENE_VAR_FIELD14", Value = item.Order.FromGender == EGender.Female ? "女士" : "先生" }); } taskData.VariableList.Add(new Variable() { Code = "OC_SCENE_VAR_FIELD17", Value = item.Order.CreationTime.ToString("yyyy年MM月dd日hh点mm分") }); taskData.VariableList.Add(new Variable() { Code = "OC_SCENE_VAR_FIELD18", Value = item.Order.Title }); taskDataList.Add(taskData); } requestData.TaskDataList = taskDataList; var response = await ExecuteAsync(_baseUrl + "/edas/batchTask",Method.Post, requestData,cancellationToken); if (response.Result.TaskInfoList!=null && !string.IsNullOrEmpty(response.Result.BatchUid)) { //拼对象 aiOrderVisit.BatchUid = response.Result.BatchUid; for (int i = 0; i < aiOrderVisit.AiOrderVisitDetails.Count; i++) { var taskInfo = response.Result.TaskInfoList.FirstOrDefault(x => x.CalledNumber == aiOrderVisit.AiOrderVisitDetails[i].OuterNo); if (taskInfo != null) { aiOrderVisit.AiOrderVisitDetails[i].AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.InProgress; aiOrderVisit.AiOrderVisitDetails[i].TaskUid = taskInfo.TaskUid; } else { aiOrderVisit.AiOrderVisitDetails[i].AiOrderVisitState = Share.Enums.Ai.EAiOrderVisitState.Cancel; } } } return aiOrderVisit; } public async Task> ExecuteAsync(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", _serviceversion); req.AddHeader("appkey", _appkey); if (httpMethod is Method.Get) { req.AddObject(request); } else { req.AddJsonBody(request); } try { var response = await _client.ExecuteAsync>(req, cancellationToken); return response.Data; } catch (Exception e) { throw new HttpRequestException($"智能质检平台错误,Error: {e.Message}"); } } } }