Browse Source

Merge branch 'dev' of http://110.188.24.182:10023/Fengwo/hotline into dev

田爽 10 months ago
parent
commit
3da94c542c

+ 14 - 2
src/Hotline.Ai.Jths/AiVisitService.cs

@@ -32,6 +32,18 @@ namespace Hotline.Ai.Jths
             _client = new RestClient(options);
         }
 
+        public async Task<bool> ChangeStatusAsync(string batchUid, string status, CancellationToken cancellationToken)
+        {
+            string posturl = _baseUrl + "/edas/task/" + status + "?batchUid=" + batchUid;
+            var requestData = new AiVisitServiceRequest(){ };
+            var response = await ExecuteAsync<AiVisitServiceRequest, AiVisitServiceResponse>(_baseUrl + "/edas/batchTask", Method.Post, requestData, cancellationToken);
+            if (response.Code== 10000)
+            {
+                return true;
+            }
+            return false;
+        }
+
         public async Task<CallOutTask> CreateAiCallOutTask(CallOutTask callOutTask, string sceneuid, string ruleuId, string callOutContentKey, CancellationToken cancellationToken)
         {
             string content = callOutTask.CallOutTemplate.TemplateContent;
@@ -58,7 +70,7 @@ namespace Hotline.Ai.Jths
             }
             requestData.TaskDataList = taskDataList;
             var response = await ExecuteAsync<AiVisitServiceRequest, AiVisitServiceResponse>(_baseUrl + "/edas/batchTask", Method.Post, requestData, cancellationToken);
-            if (response.Result.TaskInfoList != null && !string.IsNullOrEmpty(response.Result.BatchUid))
+            if (response.Result != null && response.Result.TaskInfoList != null && !string.IsNullOrEmpty(response.Result.BatchUid))
             {
                 //拼对象
                 callOutTask.BatchUid = response.Result.BatchUid;
@@ -133,7 +145,7 @@ namespace Hotline.Ai.Jths
             }
             requestData.TaskDataList = taskDataList;
             var response = await ExecuteAsync<AiVisitServiceRequest, AiVisitServiceResponse>(_baseUrl + "/edas/batchTask",Method.Post, requestData,cancellationToken);
-            if (response.Result.TaskInfoList!=null && !string.IsNullOrEmpty(response.Result.BatchUid))
+            if (response.Result!=null && response.Result.TaskInfoList!=null && !string.IsNullOrEmpty(response.Result.BatchUid))
             {
                 //拼对象
                 aiOrderVisit.BatchUid = response.Result.BatchUid;

+ 54 - 8
src/Hotline.Api/Controllers/AiController.cs

@@ -345,17 +345,63 @@ namespace Hotline.Api.Controllers
         [HttpPost("callout/closecallouttask")]
         public async Task CloseCalloutTask([FromBody] CloseCalloutTaskReq request)
         {
-            var callOut = await _callOutTaskRepository.Queryable()
-                    .Includes(x => x.CallOutTaskDetails)
-                    .FirstAsync(x => x.BatchUid == request.Id);
-
-            if (callOut!=null)
+            switch (request.TypeId)
             {
-                if (callOut.AiCallOutTaskState != EAiCallOutTaskState.NoStarted)
-                    throw UserFriendlyException.SameMessage("当前状态不能终止");
-                
+                case 1:
+                    var aiVisit = await _aiOrderVisitRepository.Queryable()
+                        .Includes(x => x.AiOrderVisitDetails)
+                        .FirstAsync(x => x.Id == request.Id);
+                    if (aiVisit!=null && !string.IsNullOrEmpty(aiVisit.BatchUid))
+                    {
+                        if (aiVisit.TaskState != EAiOrderVisitTaskState.NoStarted || aiVisit.TaskState != EAiOrderVisitTaskState.InProgress)
+                            throw UserFriendlyException.SameMessage("当前状态不能终止");
+
+                        bool isOk = await _aiVisitService.ChangeStatusAsync(aiVisit.BatchUid, "cancel", HttpContext.RequestAborted);
 
+                        if (!isOk)
+                            throw UserFriendlyException.SameMessage("终止失败");
+
+                        aiVisit.TaskState = EAiOrderVisitTaskState.Close;
+                        aiVisit.AiOrderVisitDetails.ForEach(x =>
+                        {
+                            if (x.AiOrderVisitState == EAiOrderVisitState.NoStarted)
+                                x.AiOrderVisitState = EAiOrderVisitState.LoseEfficacy;
+                        });
+                        await _aiOrderVisitRepository.UpdateAsync(aiVisit, HttpContext.RequestAborted);
+                        await _aiOrderVisitDetailRepository.UpdateRangeAsync(aiVisit.AiOrderVisitDetails, HttpContext.RequestAborted);
+                    }
+                    break;
+                case 2:
+                    var callOut = await _callOutTaskRepository.Queryable()
+                       .Includes(x => x.CallOutTaskDetails)
+                       .FirstAsync(x => x.Id == request.Id);
+                    if (callOut != null && !string.IsNullOrEmpty(callOut.BatchUid))
+                    {
+                        if (callOut.AiCallOutTaskState != EAiCallOutTaskState.NoStarted || callOut.AiCallOutTaskState != EAiCallOutTaskState.InProgress)
+                            throw UserFriendlyException.SameMessage("当前状态不能终止");
+
+                        bool isOk = await _aiVisitService.ChangeStatusAsync(callOut.BatchUid, "cancel", HttpContext.RequestAborted);
+
+                        if (!isOk)
+                            throw UserFriendlyException.SameMessage("终止失败");
+                        //处理业务数据
+                        callOut.AiCallOutTaskState = EAiCallOutTaskState.Close;
+                        callOut.CallOutTaskDetails.ForEach(x =>
+                        {
+                            if (x.AiCallOutState == EAiCallOutState.NoStarted)
+                                x.AiCallOutState = EAiCallOutState.LoseEfficacy;
+                        });
+                        await _callOutTaskRepository.UpdateAsync(callOut, HttpContext.RequestAborted);
+                        await _callOutTaskDetailRepository.UpdateRangeAsync(callOut.CallOutTaskDetails, HttpContext.RequestAborted);
+                    }
+                    break;
+                default:
+                    throw UserFriendlyException.SameMessage("未知业务");
+                    break;
             }
+           
+
+           
         }
 
 

+ 7 - 0
src/Hotline.Share/Dtos/Ai/AiDto.cs

@@ -36,6 +36,8 @@ namespace Hotline.Share.Dtos.Ai
         public bool? IsSuccess { get; set; }
 
         public EAiCallOutState AiCallOutState { get; set; }
+
+        public string AiCallOutStateText => AiCallOutState.GetDescription();
     }
 
 
@@ -382,6 +384,11 @@ namespace Hotline.Share.Dtos.Ai
     public class CloseCalloutTaskReq
     {
         public string Id { get; set; }
+
+        /// <summary>
+        /// 1 :智能回访  2:批量外呼
+        /// </summary>
+        public int TypeId { get; set; }
     }
 
 

+ 2 - 0
src/Hotline.Share/Enums/Ai/EAiOrderVisitTaskState.cs

@@ -13,6 +13,8 @@ namespace Hotline.Share.Enums.Ai
 
         [Description("已结束")]
         Ended = 3,
+        [Description("已终止")]
+        Close = 4,
     }
 
 }

+ 3 - 0
src/Hotline/Ai/Visit/IAiVisitService.cs

@@ -2,6 +2,7 @@
 using Hotline.Ai.CallOut;
 using Hotline.Orders;
 using Hotline.Share.Dtos.Order;
+using Microsoft.AspNetCore.Http;
 
 namespace Hotline.Ai.Visit
 {
@@ -13,5 +14,7 @@ namespace Hotline.Ai.Visit
 
 
         Task<AiVisitQueryData> QueryAiVisitTask(string batchId,string taskId, CancellationToken cancellationToken);
+
+        Task<bool> ChangeStatusAsync(string batchUid, string status, CancellationToken cancellationToken);
     }
 }